From 2967138bbc71425070081da5e574f9df42bff496 Mon Sep 17 00:00:00 2001 From: Pankaj Walke Date: Wed, 29 Apr 2026 22:08:08 +0000 Subject: [PATCH 1/4] feat: upgrade Backstage from v1.28.4 to v1.49.4 with CNOE UI revamp - Backstage CLI 0.36.0, Node 22, MUI v5 resolution - CNOE vibrant theme with wave hero headers, dark mode support - Custom pages: ApiExplorer, Search with HeroHeader + dropdown filters - Global CSS: consistent header styling across all pages (light + dark) - Backend: auto-detect k8s cluster, cnoe scaffolder actions, mock backends - Dockerfile: Node 22, NODE_OPTIONS=--no-node-snapshot, dual config - GitHub workflows: pr.yaml (tsc+lint+build), build-and-push scoped to main/tags - Config-driven homepage quick links via app-config.yaml - idpbuilder local-stack manifests for Kro + plugin integration testing - Mock entities wired to fixture data for MOCK_MODE development - Taskfile.yml for dev, build, stack, and CI workflows - Playwright e2e tests with guest auth - Removed lerna, @material-ui/v4, stale Kro modules Signed-off-by: Pankaj Walke --- .github/workflows/build-and-push.yaml | 7 +- .github/workflows/pr.yaml | 24 +- .gitignore | 1 + Dockerfile | 35 +- Taskfile.yml | 198 + app-config.production.yaml | 19 - app-config.yaml | 265 +- backstage.json | 2 +- catalog-info.yaml | 6 +- e2e/plugins.spec.ts | 107 + examples/entities.yaml | 347 +- .../k8s-apply/template-manifest-object.yaml | 4 - .../k8s-apply/template-manifest-string.yaml | 4 - examples/k8s-apply/template.yaml | 1 - examples/local-stack/README.md | 119 + examples/local-stack/backstage-patch.yaml | 19 + .../backstage-patch/manifests/install.yaml | 52 + examples/local-stack/kro.yaml | 21 + .../local-stack/kro/manifests/install.yaml | 63 + .../mock-entities/catalog-info.yaml | 196 + examples/mkdocs.yml | 4 + examples/org.yaml | 35 +- examples/template/template.yaml | 14 - examples/theme-previews/option-a-classic.html | 66 + examples/theme-previews/option-b-vibrant.html | 67 + examples/theme-previews/option-c-minimal.html | 67 + lerna.json | 6 - package.json | 36 +- packages/app/.eslintignore | 1 - packages/app/package.json | 79 +- .../app/public/android-chrome-192x192.png | Bin 13599 -> 0 bytes packages/app/public/apple-touch-icon.png | Bin 12619 -> 0 bytes packages/app/public/favicon-16x16.png | Bin 883 -> 0 bytes packages/app/public/favicon-32x32.png | Bin 1686 -> 0 bytes packages/app/public/favicon.ico | Bin 15086 -> 0 bytes packages/app/public/img/argo-workflows.png | Bin 0 -> 27971 bytes packages/app/public/img/argocd.png | Bin 0 -> 35750 bytes .../public/img/backstage-horizontal-color.png | Bin 0 -> 54050 bytes .../app/public/img/backstage-icon-color.png | Bin 0 -> 77568 bytes .../app/public/img/cnoe/logo-dark-no-name.png | Bin 0 -> 35658 bytes packages/app/public/img/cnoe/logo-dark.png | Bin 0 -> 41824 bytes packages/app/public/img/cnoe/logo-no-name.png | Bin 0 -> 31805 bytes packages/app/public/img/cnoe/logo-white.png | Bin 0 -> 26199 bytes packages/app/public/img/cnoe/logo.png | Bin 0 -> 28951 bytes packages/app/public/img/gitlab.png | Bin 0 -> 24046 bytes packages/app/public/img/kargo.png | Bin 0 -> 19604 bytes packages/app/public/img/keycloak.png | Bin 0 -> 7970 bytes packages/app/public/index.html | 60 - packages/app/public/manifest.json | 15 - packages/app/public/mockServiceWorker.js | 303 + packages/app/public/robots.txt | 2 - packages/app/public/safari-pinned-tab.svg | 1 - packages/app/src/App.test.tsx | 29 - packages/app/src/App.tsx | 77 +- packages/app/src/apis.ts | 64 +- packages/app/src/components/Root/LogoFull.tsx | 30 - packages/app/src/components/Root/LogoIcon.tsx | 31 - packages/app/src/components/Root/Root.tsx | 95 +- .../src/components/api/ApiExplorerPage.tsx | 196 + .../src/components/catalog/CatalogPage.tsx | 124 + .../components/catalog/CustomCatalogPage.tsx | 54 + .../app/src/components/catalog/EntityPage.tsx | 524 +- packages/app/src/components/home/Homepage.tsx | 337 + .../kubernetes/KroNavigationHelper.tsx | 230 + .../kubernetes/KroResourceFilter.tsx | 159 + .../kubernetes/KubernetesContentWithKro.tsx | 88 + .../app/src/components/logos/LogoFull.tsx | 47 + .../app/src/components/logos/LogoIcon.tsx | 35 + packages/app/src/components/logos/index.ts | 2 + .../app/src/components/search/SearchPage.tsx | 237 +- .../app/src/components/shared/HeroHeader.tsx | 29 + packages/app/src/index.tsx | 425 +- packages/app/src/mocks/browser.ts | 4 + .../fixtures/argo-workflow-templates.json | 15 + .../src/mocks/fixtures/argo-workflows.json | 22 + .../mocks/fixtures/spark-applications.json | 27 + .../app/src/mocks/fixtures/spark-logs.txt | 7 + .../mocks/fixtures/terraform-file-list.json | 1 + .../src/mocks/fixtures/terraform-state.json | 41 + packages/app/src/mocks/handlers.ts | 1 + packages/app/src/mocks/handlers/index.ts | 4 + packages/app/src/mocks/handlers/kubernetes.ts | 96 + packages/app/src/mocks/handlers/terraform.ts | 48 + packages/app/src/setupTests.ts | 1 - packages/app/src/theme.ts | 481 + packages/app/tsconfig.json | 9 + packages/backend/.eslintrc.js | 1 - packages/backend/Dockerfile | 52 - packages/backend/README.md | 59 - packages/backend/package.json | 88 +- packages/backend/src/index.test.ts | 8 - packages/backend/src/index.ts | 102 +- .../fixtures/argo-workflow-templates.json | 15 + .../src/mocks/fixtures/argo-workflows.json | 22 + .../mocks/fixtures/argocd-applications.json | 72 + .../mocks/fixtures/kubernetes-workloads.json | 214 + .../mocks/fixtures/spark-applications.json | 27 + .../backend/src/mocks/fixtures/spark-logs.txt | 7 + .../mocks/fixtures/terraform-file-list.json | 1 + .../src/mocks/fixtures/terraform-state.json | 41 + .../{plugins => modules/actions}/argocd.ts | 47 +- .../src/modules/actions/gitea-actions.ts | 309 + .../{plugins => modules/actions}/k8s-apply.ts | 66 +- .../{plugins => modules/actions}/sanitize.ts | 5 - .../{plugins => modules/actions}/verify.ts | 12 +- .../src/{plugins => modules}/scaffolder.ts | 28 +- .../backend/src/plugins/catalog-kro-module.ts | 30 + .../kro-resource-group-processor.ts | 312 + packages/backend/src/plugins/gitea-actions.ts | 600 - packages/backend/src/plugins/kro-audit.ts | 231 + .../src/plugins/kro-entity-transformer.ts | 246 + .../backend/src/plugins/kro-error-handler.ts | 258 + .../backend/src/plugins/kro-permissions.ts | 360 + .../src/plugins/kro-resource-group-service.ts | 386 + packages/backend/src/plugins/kro-security.ts | 171 + packages/backend/src/plugins/kro.ts | 146 + .../plugins/kubernetes-ingestor-kro-module.ts | 68 + .../src/plugins/kubernetes-kro-integration.ts | 238 + packages/backend/src/plugins/mock-argocd.ts | 81 + .../backend/src/plugins/mock-kubernetes.ts | 136 + packages/backend/src/plugins/mock-proxy.ts | 89 + .../backend/src/plugins/mock-terraform.ts | 65 + packages/backend/src/plugins/proxy.ts | 13 - packages/backend/src/types.ts | 25 - packages/backend/tsconfig.json | 9 + playwright.config.ts | 64 +- plugins/README.md | 10 +- plugins/apache-spark/package.json | 29 +- plugins/apache-spark/src/alpha.tsx | 23 + .../ApacheSparkLogs/ApacheSparkLogs.tsx | 8 +- .../ApacheSparkOverviewTable.tsx | 53 +- .../DetailedDrawer/DetailedDrawer.tsx | 97 +- .../DetailedDrawer/DrawerOverview.tsx | 22 +- plugins/apache-spark/src/index.ts | 2 +- plugins/apache-spark/src/plugin.ts | 11 + plugins/argo-workflows/package.json | 29 +- plugins/argo-workflows/src/alpha.tsx | 23 + .../src/components/Overview/Overview.tsx | 17 +- .../WorkflowOverview/WorkflowOverview.tsx | 4 +- .../WorkflowTemplateOverview.tsx | 4 +- plugins/cnoe-ui/package.json | 29 +- plugins/cnoe-ui/src/alpha.tsx | 23 + plugins/cnoe-ui/src/components/Homepage.tsx | 167 +- .../cnoe-ui/src/components/logos/LogoBig.tsx | 71 +- .../cnoe-ui/src/components/logos/LogoFull.tsx | 71 +- .../cnoe-ui/src/components/logos/LogoIcon.tsx | 47 +- .../.eslintrc.js | 0 .../CHANGELOG.md | 1527 ++ .../README.md | 153 + .../catalog-info.yaml | 9 + .../knip-report.md | 8 + .../package.json | 62 + .../report.api.md | 322 + .../src/__tests__/integration.test.ts | 398 + .../src/actions/gitlab.examples.test.ts | 120 + .../src/actions/gitlab.examples.ts | 224 + .../src/actions/gitlab.test.ts | 810 + .../src/actions/gitlab.ts | 771 + .../gitlabGroupEnsureExists.examples.test.ts | 309 + .../gitlabGroupEnsureExists.examples.ts | 126 + .../actions/gitlabGroupEnsureExists.test.ts | 261 + .../src/actions/gitlabGroupEnsureExists.ts | 143 + .../gitlabIssueCreate.examples.test.ts | 713 + .../src/actions/gitlabIssueCreate.examples.ts | 243 + .../src/actions/gitlabIssueCreate.test.ts | 214 + .../src/actions/gitlabIssueCreate.ts | 264 + .../actions/gitlabIssueEdit.examples.test.ts | 819 + .../src/actions/gitlabIssueEdit.examples.ts | 258 + .../src/actions/gitlabIssueEdit.test.ts | 213 + .../src/actions/gitlabIssueEdit.ts | 310 + .../gitlabMergeRequest.examples.test.ts | 355 + .../actions/gitlabMergeRequest.examples.ts | 142 + .../src/actions/gitlabMergeRequest.test.ts | 1511 ++ .../src/actions/gitlabMergeRequest.ts | 523 + .../gitlabPipelineTrigger.examples.test.ts | 322 + .../actions/gitlabPipelineTrigger.examples.ts | 105 + .../src/actions/gitlabPipelineTrigger.test.ts | 266 + .../src/actions/gitlabPipelineTrigger.ts | 173 + ...bProjectAccessTokenCreate.examples.test.ts | 449 + ...gitlabProjectAccessTokenCreate.examples.ts | 263 + .../gitlabProjectAccessTokenCreate.test.ts | 219 + .../actions/gitlabProjectAccessTokenCreate.ts | 145 + ...bProjectDeployTokenCreate.examples.test.ts | 189 + ...gitlabProjectDeployTokenCreate.examples.ts | 114 + .../gitlabProjectDeployTokenCreate.test.ts | 97 + .../actions/gitlabProjectDeployTokenCreate.ts | 122 + .../gitlabProjectMigrate.examples.test.ts | 91 + .../actions/gitlabProjectMigrate.examples.ts | 40 + .../src/actions/gitlabProjectMigrate.test.ts | 96 + .../src/actions/gitlabProjectMigrate.ts | 141 + ...tlabProjectVariableCreate.examples.test.ts | 237 + .../gitlabProjectVariableCreate.examples.ts | 160 + .../actions/gitlabProjectVariableCreate.ts | 129 + .../actions/gitlabRepoPush.examples.test.ts | 184 + .../src/actions/gitlabRepoPush.examples.ts | 76 + .../src/actions/gitlabRepoPush.test.ts | 450 + .../src/actions/gitlabRepoPush.ts | 206 + .../src/actions/helpers.ts | 70 + .../src/actions/index.ts | 26 + .../src/autocomplete/autocomplete.test.ts | 152 + .../src/autocomplete/autocomplete.ts | 108 + .../src/commonGitlabConfig.ts | 53 + .../src/index.ts | 15 +- .../src/module.ts | 78 + .../src/util.test.ts | 388 + .../src/util.ts | 186 + plugins/terraform-backend/package.json | 18 +- plugins/terraform-backend/src/alpha.ts | 7 + plugins/terraform/package.json | 29 +- plugins/terraform/src/alpha.tsx | 23 + .../MainPageComponent/MainPageComponent.tsx | 14 +- .../MainPageFetchComponent.tsx | 49 +- plugins/terraform/src/index.ts | 2 +- plugins/terraform/src/plugin.ts | 11 + tsconfig.json | 16 +- yarn.lock | 20749 +++++++++------- 216 files changed, 36870 insertions(+), 11466 deletions(-) create mode 100644 Taskfile.yml create mode 100644 e2e/plugins.spec.ts create mode 100644 examples/local-stack/README.md create mode 100644 examples/local-stack/backstage-patch.yaml create mode 100644 examples/local-stack/backstage-patch/manifests/install.yaml create mode 100644 examples/local-stack/kro.yaml create mode 100644 examples/local-stack/kro/manifests/install.yaml create mode 100644 examples/local-stack/mock-entities/catalog-info.yaml create mode 100644 examples/mkdocs.yml create mode 100644 examples/theme-previews/option-a-classic.html create mode 100644 examples/theme-previews/option-b-vibrant.html create mode 100644 examples/theme-previews/option-c-minimal.html delete mode 100644 lerna.json delete mode 100644 packages/app/.eslintignore delete mode 100644 packages/app/public/android-chrome-192x192.png delete mode 100644 packages/app/public/apple-touch-icon.png delete mode 100644 packages/app/public/favicon-16x16.png delete mode 100644 packages/app/public/favicon-32x32.png delete mode 100644 packages/app/public/favicon.ico create mode 100644 packages/app/public/img/argo-workflows.png create mode 100644 packages/app/public/img/argocd.png create mode 100644 packages/app/public/img/backstage-horizontal-color.png create mode 100644 packages/app/public/img/backstage-icon-color.png create mode 100644 packages/app/public/img/cnoe/logo-dark-no-name.png create mode 100644 packages/app/public/img/cnoe/logo-dark.png create mode 100644 packages/app/public/img/cnoe/logo-no-name.png create mode 100644 packages/app/public/img/cnoe/logo-white.png create mode 100644 packages/app/public/img/cnoe/logo.png create mode 100644 packages/app/public/img/gitlab.png create mode 100644 packages/app/public/img/kargo.png create mode 100644 packages/app/public/img/keycloak.png delete mode 100644 packages/app/public/index.html delete mode 100644 packages/app/public/manifest.json create mode 100644 packages/app/public/mockServiceWorker.js delete mode 100644 packages/app/public/robots.txt delete mode 100644 packages/app/public/safari-pinned-tab.svg delete mode 100644 packages/app/src/App.test.tsx delete mode 100644 packages/app/src/components/Root/LogoFull.tsx delete mode 100644 packages/app/src/components/Root/LogoIcon.tsx create mode 100644 packages/app/src/components/api/ApiExplorerPage.tsx create mode 100644 packages/app/src/components/catalog/CatalogPage.tsx create mode 100644 packages/app/src/components/catalog/CustomCatalogPage.tsx create mode 100644 packages/app/src/components/home/Homepage.tsx create mode 100644 packages/app/src/components/kubernetes/KroNavigationHelper.tsx create mode 100644 packages/app/src/components/kubernetes/KroResourceFilter.tsx create mode 100644 packages/app/src/components/kubernetes/KubernetesContentWithKro.tsx create mode 100644 packages/app/src/components/logos/LogoFull.tsx create mode 100644 packages/app/src/components/logos/LogoIcon.tsx create mode 100644 packages/app/src/components/logos/index.ts create mode 100644 packages/app/src/components/shared/HeroHeader.tsx create mode 100644 packages/app/src/mocks/browser.ts create mode 100644 packages/app/src/mocks/fixtures/argo-workflow-templates.json create mode 100644 packages/app/src/mocks/fixtures/argo-workflows.json create mode 100644 packages/app/src/mocks/fixtures/spark-applications.json create mode 100644 packages/app/src/mocks/fixtures/spark-logs.txt create mode 100644 packages/app/src/mocks/fixtures/terraform-file-list.json create mode 100644 packages/app/src/mocks/fixtures/terraform-state.json create mode 100644 packages/app/src/mocks/handlers.ts create mode 100644 packages/app/src/mocks/handlers/index.ts create mode 100644 packages/app/src/mocks/handlers/kubernetes.ts create mode 100644 packages/app/src/mocks/handlers/terraform.ts delete mode 100644 packages/app/src/setupTests.ts create mode 100644 packages/app/src/theme.ts create mode 100644 packages/app/tsconfig.json delete mode 100644 packages/backend/.eslintrc.js delete mode 100644 packages/backend/Dockerfile delete mode 100644 packages/backend/README.md delete mode 100644 packages/backend/src/index.test.ts create mode 100644 packages/backend/src/mocks/fixtures/argo-workflow-templates.json create mode 100644 packages/backend/src/mocks/fixtures/argo-workflows.json create mode 100644 packages/backend/src/mocks/fixtures/argocd-applications.json create mode 100644 packages/backend/src/mocks/fixtures/kubernetes-workloads.json create mode 100644 packages/backend/src/mocks/fixtures/spark-applications.json create mode 100644 packages/backend/src/mocks/fixtures/spark-logs.txt create mode 100644 packages/backend/src/mocks/fixtures/terraform-file-list.json create mode 100644 packages/backend/src/mocks/fixtures/terraform-state.json rename packages/backend/src/{plugins => modules/actions}/argocd.ts (75%) create mode 100644 packages/backend/src/modules/actions/gitea-actions.ts rename packages/backend/src/{plugins => modules/actions}/k8s-apply.ts (79%) rename packages/backend/src/{plugins => modules/actions}/sanitize.ts (94%) rename packages/backend/src/{plugins => modules/actions}/verify.ts (87%) rename packages/backend/src/{plugins => modules}/scaffolder.ts (54%) create mode 100644 packages/backend/src/plugins/catalog-kro-module.ts create mode 100644 packages/backend/src/plugins/catalog-processors/kro-resource-group-processor.ts delete mode 100644 packages/backend/src/plugins/gitea-actions.ts create mode 100644 packages/backend/src/plugins/kro-audit.ts create mode 100644 packages/backend/src/plugins/kro-entity-transformer.ts create mode 100644 packages/backend/src/plugins/kro-error-handler.ts create mode 100644 packages/backend/src/plugins/kro-permissions.ts create mode 100644 packages/backend/src/plugins/kro-resource-group-service.ts create mode 100644 packages/backend/src/plugins/kro-security.ts create mode 100644 packages/backend/src/plugins/kro.ts create mode 100644 packages/backend/src/plugins/kubernetes-ingestor-kro-module.ts create mode 100644 packages/backend/src/plugins/kubernetes-kro-integration.ts create mode 100644 packages/backend/src/plugins/mock-argocd.ts create mode 100644 packages/backend/src/plugins/mock-kubernetes.ts create mode 100644 packages/backend/src/plugins/mock-proxy.ts create mode 100644 packages/backend/src/plugins/mock-terraform.ts delete mode 100644 packages/backend/src/plugins/proxy.ts delete mode 100644 packages/backend/src/types.ts create mode 100644 packages/backend/tsconfig.json create mode 100644 plugins/apache-spark/src/alpha.tsx create mode 100644 plugins/argo-workflows/src/alpha.tsx create mode 100644 plugins/cnoe-ui/src/alpha.tsx rename {packages/app => plugins/scaffolder-backend-module-gitlab}/.eslintrc.js (100%) create mode 100644 plugins/scaffolder-backend-module-gitlab/CHANGELOG.md create mode 100644 plugins/scaffolder-backend-module-gitlab/README.md create mode 100644 plugins/scaffolder-backend-module-gitlab/catalog-info.yaml create mode 100644 plugins/scaffolder-backend-module-gitlab/knip-report.md create mode 100644 plugins/scaffolder-backend-module-gitlab/package.json create mode 100644 plugins/scaffolder-backend-module-gitlab/report.api.md create mode 100644 plugins/scaffolder-backend-module-gitlab/src/__tests__/integration.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.examples.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.examples.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.examples.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.examples.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.examples.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.examples.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.examples.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.examples.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.examples.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.examples.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.examples.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.examples.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.examples.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.examples.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.examples.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.examples.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.examples.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.examples.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectVariableCreate.examples.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectVariableCreate.examples.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectVariableCreate.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.examples.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.examples.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/helpers.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/index.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/autocomplete/autocomplete.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/autocomplete/autocomplete.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/commonGitlabConfig.ts rename packages/app/e2e-tests/app.test.ts => plugins/scaffolder-backend-module-gitlab/src/index.ts (69%) create mode 100644 plugins/scaffolder-backend-module-gitlab/src/module.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/util.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/util.ts create mode 100644 plugins/terraform-backend/src/alpha.ts create mode 100644 plugins/terraform/src/alpha.tsx diff --git a/.github/workflows/build-and-push.yaml b/.github/workflows/build-and-push.yaml index 79dd834..237e940 100644 --- a/.github/workflows/build-and-push.yaml +++ b/.github/workflows/build-and-push.yaml @@ -1,8 +1,11 @@ # name: Create and publish a Docker image -# Configures this workflow to run every time a change is pushed. -on: push +# Configures this workflow to run on pushes to main and version tags. +on: + push: + branches: [main] + tags: ['v*'] # Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds. env: diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index a68f108..3aba8c2 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -6,14 +6,24 @@ on: jobs: build: - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v6 - - uses: actions/setup-node@v6 + - name: Setup Node.js + uses: actions/setup-node@v6 with: - node-version: 18 - - name: Run tests - run: | - yarn install --frozen-lockfile --network-timeout 600000 - yarn tsc + node-version: 22 + cache: 'yarn' + + - name: Install dependencies + run: yarn install --frozen-lockfile --network-timeout 600000 + + - name: Type check + run: yarn tsc + + - name: Lint + run: yarn lint:all + + - name: Build backend + run: yarn build:backend diff --git a/.gitignore b/.gitignore index fbf8139..feec02c 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,4 @@ site # E2E test reports e2e-test-report/ +tsconfig.tsbuildinfo diff --git a/Dockerfile b/Dockerfile index e3276c9..8a1ddeb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,16 @@ # Stage 1 - Create yarn install skeleton layer -FROM node:18-bookworm-slim AS packages +FROM node:22-bookworm-slim AS packages WORKDIR /app COPY package.json yarn.lock ./ COPY packages packages - -# Comment this out if you don't have any internal plugins COPY plugins plugins RUN find packages \! -name "package.json" -mindepth 2 -maxdepth 2 -exec rm -rf {} \+ # Stage 2 - Install dependencies and build packages -FROM node:18-bookworm-slim AS build +FROM node:22-bookworm-slim AS build USER node WORKDIR /app @@ -26,18 +24,14 @@ COPY --chown=node:node . . RUN yarn tsc RUN yarn --cwd packages/backend build -# If you have not yet migrated to package roles, use the following command instead: -# RUN yarn --cwd packages/backend backstage-cli backend:bundle --build-dependencies RUN mkdir packages/backend/dist/skeleton packages/backend/dist/bundle \ && tar xzf packages/backend/dist/skeleton.tar.gz -C packages/backend/dist/skeleton \ && tar xzf packages/backend/dist/bundle.tar.gz -C packages/backend/dist/bundle # Stage 3 - Build the actual backend image and install production dependencies -FROM node:18-bookworm-slim +FROM node:22-bookworm-slim -# Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend. -# Install packages needed to get utility binaries RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ apt-get update && \ @@ -45,11 +39,10 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ RUN yarn config set python /usr/bin/python3 -# Add kubectl for the kube apply plugin. -# Add cnoe-cli -# Add mkdocs for the TechDocs plugin. +# Add kubectl for the kube apply plugin RUN curl -L -o /usr/local/bin/kubectl https://dl.k8s.io/release/v1.29.9/bin/linux/amd64/kubectl && chmod +x /usr/local/bin/kubectl +# Add cnoe-cli RUN curl -L -O https://github.com/cnoe-io/cnoe-cli/releases/download/v0.1.0/cnoe_Linux_x86_64.tar.gz && \ curl -L -O https://github.com/cnoe-io/cnoe-cli/releases/download/v0.1.0/checksums.txt && \ sha256sum -c --strict --status --ignore-missing checksums.txt && \ @@ -60,34 +53,24 @@ RUN curl -L -O https://github.com/cnoe-io/cnoe-cli/releases/download/v0.1.0/cnoe COPY ./cnoe-wrapper.sh /usr/bin/cnoe RUN chmod +x /usr/bin/cnoe +# Add mkdocs for TechDocs ENV VIRTUAL_ENV=/opt/venv RUN python3 -m venv $VIRTUAL_ENV ENV PATH="$VIRTUAL_ENV/bin:$PATH" RUN pip3 install 'mkdocs-techdocs-core==1.4.2' -# From here on we use the least-privileged `node` user to run the backend. USER node - -# This should create the app dir as `node`. -# If it is instead created as `root` then the `tar` command below will -# fail: `can't create directory 'packages/': Permission denied`. -# If this occurs, then ensure BuildKit is enabled (`DOCKER_BUILDKIT=1`) -# so the app dir is correctly created as `node`. WORKDIR /app -# Copy the install dependencies from the build stage and context COPY --from=build --chown=node:node /app/yarn.lock /app/package.json /app/packages/backend/dist/skeleton/ ./ RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \ yarn install --frozen-lockfile --production --network-timeout 600000 -# Copy the built packages from the build stage COPY --from=build --chown=node:node /app/packages/backend/dist/bundle/ ./ +COPY --chown=node:node app-config.yaml app-config.production.yaml ./ -# Copy any other files that we need at runtime -COPY --chown=node:node app-config.yaml ./ - -# This switches many Node.js dependencies to production mode. ENV NODE_ENV production +ENV NODE_OPTIONS="--no-node-snapshot" -CMD ["node", "packages/backend", "--config", "app-config.yaml"] +CMD ["node", "packages/backend", "--config", "app-config.yaml", "--config", "app-config.production.yaml"] diff --git a/Taskfile.yml b/Taskfile.yml new file mode 100644 index 0000000..6f87f38 --- /dev/null +++ b/Taskfile.yml @@ -0,0 +1,198 @@ +version: '3' + +vars: + IMAGE_NAME: ghcr.io/cnoe-io/backstage-app + IMAGE_TAG: local + KIND_CLUSTER: localdev + K8S_CONTEXT: kind-{{.KIND_CLUSTER}} + BACKSTAGE_NS: backstage + +tasks: + # ===== Development ===== + + dev: + desc: Start local dev server (frontend + backend) + cmds: + - yarn dev + + dev:mock: + desc: Start local dev server with mock backends (no cluster needed) + cmds: + - MOCK_MODE=true yarn dev + + tsc: + desc: Run TypeScript type checking + cmds: + - yarn tsc + + lint: + desc: Run linter on all packages + cmds: + - yarn lint:all + + test: + desc: Run all tests + cmds: + - yarn test:all + + build: + desc: Build backend bundle + cmds: + - yarn build:backend + + build:all: + desc: Build all packages (frontend + backend) + cmds: + - yarn build:all + + clean: + desc: Clean all build artifacts + cmds: + - yarn clean + + check: + desc: Run tsc + lint + build (same as PR CI) + cmds: + - task: tsc + - task: lint + - task: build + + # ===== Docker ===== + + docker:build: + desc: Build Docker image + cmds: + - docker build -t {{.IMAGE_NAME}}:{{.IMAGE_TAG}} . + + docker:run: + desc: Run Docker image locally (dev config, SQLite) + cmds: + - docker run -p 7007:7007 {{.IMAGE_NAME}}:{{.IMAGE_TAG}} node packages/backend --config app-config.yaml + + # ===== idpbuilder Local Stack ===== + + stack:up: + desc: Bring up full local stack (ref-implementation + Kro + Backstage) + cmds: + - task: stack:idp + - task: stack:kro + - task: stack:patch + - task: stack:deploy + + stack:idp: + desc: Start idpbuilder ref-implementation + cmds: + - | + idpbuilder create --use-path-routing \ + --package https://github.com/cnoe-io/stacks//ref-implementation + - echo "Waiting for cluster to stabilize..." + - kubectl config use-context {{.K8S_CONTEXT}} + - kubectl wait --for=condition=Available deployment/backstage -n {{.BACKSTAGE_NS}} --timeout=600s + + stack:kro: + desc: Install Kro operator and sample ResourceGraphDefinition + cmds: + - kubectl config use-context {{.K8S_CONTEXT}} + - helm install kro oci://registry.k8s.io/kro/charts/kro --namespace kro-system --create-namespace + - kubectl wait --for=condition=Established crd/resourcegraphdefinitions.kro.run --timeout=60s + - kubectl apply -f examples/local-stack/kro/manifests/install.yaml + + stack:patch: + desc: Apply Backstage RBAC and config patches for Kro + cmds: + - kubectl config use-context {{.K8S_CONTEXT}} + - kubectl apply -f examples/local-stack/backstage-patch/manifests/install.yaml + + stack:deploy: + desc: Build, load, and deploy local Backstage image to the cluster + cmds: + - task: docker:build + - task: stack:load + - task: stack:swap + + stack:load: + desc: Load local Docker image into kind cluster + cmds: + - | + docker save {{.IMAGE_NAME}}:{{.IMAGE_TAG}} | \ + docker exec -i {{.KIND_CLUSTER}}-control-plane \ + ctr -n k8s.io images import --all-platforms - + + stack:swap: + desc: Swap Backstage deployment to use local image + cmds: + - kubectl config use-context {{.K8S_CONTEXT}} + - kubectl -n {{.BACKSTAGE_NS}} set image deployment/backstage backstage={{.IMAGE_NAME}}:{{.IMAGE_TAG}} + - | + kubectl -n {{.BACKSTAGE_NS}} patch deployment backstage \ + -p '{"spec":{"template":{"spec":{"containers":[{"name":"backstage","imagePullPolicy":"Never"}]}}}}' + - kubectl -n argocd patch application backstage --type merge -p '{"spec":{"syncPolicy":null}}' + - kubectl -n {{.BACKSTAGE_NS}} rollout status deployment/backstage --timeout=90s + + stack:iterate: + desc: Rebuild and redeploy after code changes (fast cycle) + cmds: + - task: docker:build + - task: stack:load + - kubectl config use-context {{.K8S_CONTEXT}} + - kubectl -n {{.BACKSTAGE_NS}} rollout restart deployment/backstage + - kubectl -n {{.BACKSTAGE_NS}} rollout status deployment/backstage --timeout=90s + + stack:logs: + desc: Tail Backstage logs + cmds: + - kubectl config use-context {{.K8S_CONTEXT}} + - kubectl logs -f deployment/backstage -n {{.BACKSTAGE_NS}} + + stack:status: + desc: Show status of all stack components + cmds: + - kubectl config use-context {{.K8S_CONTEXT}} + - echo "=== Backstage ===" + - kubectl get pods -n {{.BACKSTAGE_NS}} + - echo "" + - echo "=== Kro ===" + - kubectl get pods -n kro-system + - echo "" + - echo "=== ResourceGraphDefinitions ===" + - kubectl get rgd -A + - echo "" + - echo "=== ArgoCD Applications ===" + - kubectl get applications -n argocd + + stack:secrets: + desc: Show idpbuilder credentials + cmds: + - idpbuilder get secrets + + stack:port-forward: + desc: Start port-forward to Backstage (localhost:7007) + cmds: + - kubectl config use-context {{.K8S_CONTEXT}} + - echo "Backstage available at http://localhost:7007" + - kubectl -n {{.BACKSTAGE_NS}} port-forward svc/backstage 7007:7007 + + stack:guest-auth: + desc: Enable guest auth on the cluster (for testing without Keycloak) + cmds: + - kubectl config use-context {{.K8S_CONTEXT}} + - | + kubectl -n {{.BACKSTAGE_NS}} get configmap backstage-config -o yaml | \ + sed 's/keycloak-oidc:/guest:\n dangerouslyAllowOutsideDevelopment: true\n keycloak-oidc:/' | \ + kubectl apply -f - + - kubectl -n {{.BACKSTAGE_NS}} rollout restart deployment/backstage + + stack:down: + desc: Delete the idpbuilder cluster + cmds: + - idpbuilder delete --name {{.KIND_CLUSTER}} + + # ===== CI Helpers ===== + + ci:pr: + desc: Run the same checks as the PR workflow + cmds: + - yarn install --frozen-lockfile --network-timeout 600000 + - task: tsc + - task: lint + - task: build diff --git a/app-config.production.yaml b/app-config.production.yaml index 8f0751c..aaa0431 100644 --- a/app-config.production.yaml +++ b/app-config.production.yaml @@ -1,19 +1,9 @@ app: - # Should be the same as backend.baseUrl when using the `app-backend` plugin. baseUrl: http://localhost:7007 backend: - # Note that the baseUrl should be the URL that the browser and other clients - # should use when communicating with the backend, i.e. it needs to be - # reachable not just from within the backend host, but from all of your - # callers. When its value is "http://localhost:7007", it's strictly private - # and can't be reached by others. baseUrl: http://localhost:7007 - # The listener can also be expressed as a single : string. In this case we bind to - # all interfaces, the most permissive setting. The right value depends on your specific deployment. listen: ':7007' - - # config options: https://node-postgres.com/api/client database: client: pg connection: @@ -21,15 +11,6 @@ backend: port: ${POSTGRES_PORT} user: ${POSTGRES_USER} password: ${POSTGRES_PASSWORD} - # https://node-postgres.com/features/ssl - # you can set the sslmode configuration option via the `PGSSLMODE` environment variable - # see https://www.postgresql.org/docs/current/libpq-ssl.html Table 33.1. SSL Mode Descriptions (e.g. require) - # ssl: - # ca: # if you have a CA file and want to verify it you can uncomment this section - # $file: /ca/server.crt catalog: - # Overrides the default list locations from app-config.yaml as these contain example data. - # See https://backstage.io/docs/features/software-catalog/#adding-components-to-the-catalog for more details - # on how to get entities into the catalog. locations: [] diff --git a/app-config.yaml b/app-config.yaml index 0006a70..d8b8e47 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -1,10 +1,35 @@ app: title: CNOE baseUrl: http://localhost:3000 + packages: all + listen: + port: 3000 + host: 0.0.0.0 organization: name: CNOE +homepage: + quickLinks: + - url: /catalog + label: Catalog + icon: catalog + - url: https://gitlab.com + label: GitLab + iconUrl: /img/gitlab.png + - url: /argocd + label: ArgoCD + iconUrl: /img/argocd.png + - url: /argo-workflows + label: Argo Workflows + iconUrl: /img/argo-workflows.png + - url: / + label: Kargo + iconUrl: /img/kargo.png + - url: /keycloak + label: Keycloak + iconUrl: /img/keycloak.png + backend: # Used for enabling authentication, secret is shared by all backend plugins # See https://backstage.io/docs/auth/service-to-service-auth for @@ -15,14 +40,16 @@ backend: baseUrl: http://localhost:7007 listen: port: 7007 - # Uncomment the following host directive to bind to specific interfaces - # host: 127.0.0.1 + host: 0.0.0.0 csp: connect-src: ["'self'", 'http:', 'https:'] # Content-Security-Policy directives follow the Helmet format: https://helmetjs.github.io/#reference # Default Helmet Content-Security-Policy values can be removed by setting the key to false cors: - origin: http://localhost:3000 + origin: + - http://localhost:3000 + - http://127.0.0.1:3000 + - http://localhost:7007 methods: [GET, HEAD, PATCH, POST, PUT, DELETE] credentials: true # This is for local development only, it is not recommended to use this in production @@ -31,6 +58,7 @@ backend: client: better-sqlite3 connection: ':memory:' # workingDirectory: /tmp # Use this to configure a working directory for the scaffolder, defaults to the OS temp-dir + integrations: gitea: - baseUrl: https://cnoe.localtest.me:8443/gitea @@ -55,11 +83,12 @@ proxy: # and an external cloud storage when deploying TechDocs for production use-case. # https://backstage.io/docs/features/techdocs/how-to-guides#how-to-migrate-from-techdocs-basic-to-recommended-deployment-approach techdocs: - builder: 'local' # Alternatives - 'external' + builder: 'local' generator: - runIn: 'docker' # Alternatives - 'local' + runIn: 'local' publisher: - type: 'local' # Alternatives - 'googleGcs' or 'awsS3'. Read documentation for using alternatives. + type: 'local' + auth: # see https://backstage.io/docs/auth/ to learn about auth providers environment: local # set this to development to enable SSO @@ -79,49 +108,80 @@ scaffolder: defaultAuthor: name: backstage-scaffolder email: noreply - defaultCommitMessage: "backstage scaffolder" + defaultCommitMessage: 'backstage scaffolder' + catalog: import: entityFilename: catalog-info.yaml pullRequestBranchName: backstage-integration rules: - - allow: [ Component, System, API, Resource, Location, Template ] + - allow: [Component, System, API, Resource, Location, Template, Group, User] + # Allow Kro ResourceGroup entities (they appear as Components with type 'kro-resource-group') + - allow: [Component] + spec: + type: kro-resource-group locations: + # Local example data + - type: file + target: ../../examples/entities.yaml + rules: + - allow: [Component, System, API, Resource, Location] + - type: file + target: ../../examples/org.yaml + rules: + - allow: [User, Group] + - type: file + target: ../../examples/template/template.yaml + rules: + - allow: [Template] + - type: file + target: ../../examples/k8s-apply/template.yaml + rules: + - allow: [Template] + - type: file + target: ../../examples/k8s-apply/template-manifest-object.yaml + rules: + - allow: [Template] + - type: file + target: ../../examples/k8s-apply/template-manifest-string.yaml + rules: + - allow: [Template] + - type: file + target: ./examples/local-stack/mock-entities/catalog-info.yaml + rules: + - allow: [Component, System, API, Resource, Location, Template, Group, User] - type: url target: https://cnoe.localtest.me:8443/gitea/giteaAdmin/idpbuilder-localdev-backstage-templates-entities/src/branch/main/catalog-info.yaml -# # Local example template -# - type: file -# target: ../../examples/template/template.yaml -# rules: -# - allow: [Template] -# -# # Local example organizational data -# - type: file -# target: ../../examples/org.yaml -# rules: -# - allow: [User, Group] - - ## Uncomment these lines to add more example data - # - type: url - # target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/all.yaml - - ## Uncomment these lines to add an example org - # - type: url - # target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/acme-corp.yaml - # rules: - # - allow: [User, Group] + kubernetes: serviceLocatorMethod: type: 'multiTenant' clusterLocatorMethods: - type: 'config' clusters: - - url: https://127.0.0.1:33277 # you may need to change this + - url: https://127.0.0.1:33277 name: local authProvider: 'serviceAccount' skipTLSVerify: true - # replace with your own service account token value. e.g. kubectl -n backstage exec -it deploy/backstage -- cat /var/run/secrets/kubernetes.io/serviceaccount/token serviceAccountToken: eyJhbG...... + # Additional configuration for Kro resources + customResources: + - group: 'kro.run' + apiVersion: 'v1alpha1' + plural: 'resourcegraphdefinitions' + - group: 'kro.run' + apiVersion: 'v1alpha1' + plural: 'cicdpipelines' + - group: 'kro.run' + apiVersion: 'v1alpha1' + plural: 'eksclusters' + - group: 'kro.run' + apiVersion: 'v1alpha1' + plural: 'eksclusterwithvpcs' + - group: 'kro.run' + apiVersion: 'v1alpha1' + plural: 'vpcs' + argocd: appLocatorMethods: - type: 'config' @@ -129,7 +189,146 @@ argocd: - name: local url: https://cnoe.localtest.me:8443/argocd username: admin - # replace with your argocd password e.g. kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d password: ${ARGOCD_ADMIN_PASSWORD} + argoWorkflows: - baseUrl: https://cnoe.localtest.me:8443/argo-workflows \ No newline at end of file + baseUrl: https://cnoe.localtest.me:8443/argo-workflows + +kubernetesIngestor: + refreshInterval: 300 # 5 minutes in seconds + # Entity processing configuration for ResourceGroups + entityProcessing: + # Enable automatic catalog ingestion + enabled: true + # Transform Kro resources into catalog entities + transformKroResources: true + # Namespace filtering (empty means all namespaces) + namespaces: [] + # Label selectors for resource filtering + labelSelectors: [] + resources: + # Kro ResourceGraphDefinitions (templates for ResourceGroups) + - apiVersion: 'kro.run/v1alpha1' + kind: 'ResourceGraphDefinition' + # Enable catalog ingestion for ResourceGraphDefinitions + catalogIngestion: + enabled: true + entityType: 'Component' + entitySubtype: 'kro-resource-group' + # Kro instances (these will be discovered dynamically based on ResourceGraphDefinitions) + - apiVersion: 'kro.run/v1alpha1' + kind: 'CICDPipeline' + catalogIngestion: + enabled: true + entityType: 'Component' + entitySubtype: 'kro-resource-group' + - apiVersion: 'kro.run/v1alpha1' + kind: 'EksCluster' + catalogIngestion: + enabled: true + entityType: 'Component' + entitySubtype: 'kro-resource-group' + - apiVersion: 'kro.run/v1alpha1' + kind: 'EksclusterWithVpc' + catalogIngestion: + enabled: true + entityType: 'Component' + entitySubtype: 'kro-resource-group' + - apiVersion: 'kro.run/v1alpha1' + kind: 'Vpc' + catalogIngestion: + enabled: true + entityType: 'Component' + entitySubtype: 'kro-resource-group' + # Standard Kubernetes resources (for relationship mapping) + - apiVersion: 'apps/v1' + kind: 'Deployment' + catalogIngestion: + enabled: false # Don't ingest all deployments, only those managed by ResourceGroups + - apiVersion: 'v1' + kind: 'Service' + catalogIngestion: + enabled: false + - apiVersion: 'v1' + kind: 'ConfigMap' + catalogIngestion: + enabled: false + - apiVersion: 'v1' + kind: 'Secret' + catalogIngestion: + enabled: false + clusters: + - name: local + url: https://127.0.0.1:33277 + authProvider: 'serviceAccount' + serviceAccountToken: eyJhbG...... + skipTLSVerify: true + +# Kro plugin configuration for ResourceGroup management +kro: + enablePermissions: true + enableAuditLogging: true + + # Security configuration + rbacValidation: + enabled: true + strictMode: false + cacheTimeout: 300 # 5 minutes + + auditLogging: + enabled: true + logLevel: 'info' + includeSuccessEvents: true + + errorHandling: + enableDetailedErrors: true + includeStackTrace: false + + clusters: + - name: local + url: https://127.0.0.1:33277 + authProvider: 'serviceAccount' + serviceAccountToken: eyJhbG...... + skipTLSVerify: true + rbac: + requiredPermissions: + - apiGroups: ['kro.run'] + resources: ['resourcegraphdefinitions'] + verbs: + ['get', 'list', 'watch', 'create', 'update', 'patch', 'delete'] + - apiGroups: ['kro.run'] + resources: + ['cicdpipelines', 'eksclusters', 'eksclusterwithvpcs', 'vpcs'] + verbs: + ['get', 'list', 'watch', 'create', 'update', 'patch', 'delete'] + - apiGroups: [''] + resources: ['events'] + verbs: ['get', 'list', 'watch'] + readOnlyPermissions: + - apiGroups: ['kro.run'] + resources: + [ + 'resourcegraphdefinitions', + 'cicdpipelines', + 'eksclusters', + 'eksclusterwithvpcs', + 'vpcs', + ] + verbs: ['get', 'list', 'watch'] + + # ResourceGroup entity processing configuration + entityProcessing: + enabled: true + refreshInterval: 300 + namespaces: [] + labelSelectors: [] + + # Integration with existing Kubernetes plugin + integration: + showInKubernetesViews: true + enableRelationshipMapping: true + +# see https://backstage.io/docs/permissions/getting-started for more on the permission framework +permission: + enabled: true + enablePermissions: true diff --git a/backstage.json b/backstage.json index b67976c..8358ab7 100644 --- a/backstage.json +++ b/backstage.json @@ -1,3 +1,3 @@ { - "version": "1.28.4" + "version": "1.49.4" } diff --git a/catalog-info.yaml b/catalog-info.yaml index a968650..e6f80b4 100644 --- a/catalog-info.yaml +++ b/catalog-info.yaml @@ -3,11 +3,7 @@ kind: Component metadata: name: backstage-idpbuilder description: An example of a Backstage application. - # Example for optional annotations - # annotations: - # github.com/project-slug: backstage/backstage - # backstage.io/techdocs-ref: dir:. spec: type: website - owner: john@example.com + owner: guests lifecycle: experimental diff --git a/e2e/plugins.spec.ts b/e2e/plugins.spec.ts new file mode 100644 index 0000000..14a28ff --- /dev/null +++ b/e2e/plugins.spec.ts @@ -0,0 +1,107 @@ +import { test, expect } from '@playwright/test'; + +test.describe('CNOE Backstage Plugin Tests', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/'); + const enterBtn = page.getByRole('button', { name: 'Enter' }); + if (await enterBtn.isVisible({ timeout: 10000 }).catch(() => false)) { + await enterBtn.click(); + await page.waitForURL('**/home', { timeout: 15000 }); + } + }); + + test('homepage loads with quick links', async ({ page }) => { + await page.goto('/home'); + await expect(page.getByText('Internal Developer Platform')).toBeVisible({ timeout: 30000 }); + await expect(page.getByText('Quick Links')).toBeVisible(); + await expect(page.getByText('Starred Entities')).toBeVisible(); + }); + + test('catalog page loads', async ({ page }) => { + await page.goto('/catalog'); + await expect(page.getByText('CNOE Catalog')).toBeVisible({ timeout: 30000 }); + }); + + test('entity page shows plugin tabs', async ({ page }) => { + // Navigate to the platform-api-service entity which has all plugin annotations + await page.goto('/catalog/default/component/platform-api-service'); + + // Wait for entity page to load + await expect(page.getByText('platform-api-service')).toBeVisible({ timeout: 30000 }); + + // Check that plugin tabs are visible + await expect(page.getByRole('tab', { name: 'Overview' })).toBeVisible(); + await expect(page.getByRole('tab', { name: 'Kubernetes' })).toBeVisible(); + await expect(page.getByRole('tab', { name: 'API' })).toBeVisible(); + await expect(page.getByRole('tab', { name: 'Dependencies' })).toBeVisible(); + await expect(page.getByRole('tab', { name: 'Docs' })).toBeVisible(); + }); + + test('Apache Spark tab renders', async ({ page }) => { + await page.goto('/catalog/default/component/platform-api-service'); + await expect(page.getByText('platform-api-service')).toBeVisible({ timeout: 30000 }); + + // Click Apache Spark tab + const sparkTab = page.getByRole('tab', { name: 'Apache Spark' }); + if (await sparkTab.isVisible()) { + await sparkTab.click(); + // Should show the spark overview table (may show error if mock not working, but tab should render) + await page.waitForTimeout(2000); + // Verify no crash - page should still be functional + await expect(page.locator('body')).not.toContainText('Something went wrong'); + } + }); + + test('Argo Workflows tab renders', async ({ page }) => { + await page.goto('/catalog/default/component/platform-api-service'); + await expect(page.getByText('platform-api-service')).toBeVisible({ timeout: 30000 }); + + const argoTab = page.getByRole('tab', { name: 'Argo Workflows' }); + if (await argoTab.isVisible()) { + await argoTab.click(); + await page.waitForTimeout(2000); + await expect(page.locator('body')).not.toContainText('Something went wrong'); + } + }); + + test('Terraform tab renders', async ({ page }) => { + await page.goto('/catalog/default/component/platform-api-service'); + await expect(page.getByText('platform-api-service')).toBeVisible({ timeout: 30000 }); + + const tfTab = page.getByRole('tab', { name: 'Terraform' }); + if (await tfTab.isVisible()) { + await tfTab.click(); + await page.waitForTimeout(2000); + await expect(page.locator('body')).not.toContainText('Something went wrong'); + } + }); + + test('no console errors on entity page', async ({ page }) => { + const errors: string[] = []; + page.on('console', msg => { + if (msg.type() === 'error') errors.push(msg.text()); + }); + + await page.goto('/catalog/default/component/platform-api-service'); + await expect(page.getByText('platform-api-service')).toBeVisible({ timeout: 30000 }); + + const unexpectedErrors = errors.filter( + e => + !e.includes('401') && + !e.includes('Failed to load') && + !e.includes('fetch') && + !e.includes('net::') && + !e.includes('Warning:') && + !e.includes('prop'), + ); + + expect(unexpectedErrors).toHaveLength(0); + }); + + test('settings page shows theme switcher', async ({ page }) => { + await page.goto('/settings'); + await expect(page.getByText('Appearance')).toBeVisible({ timeout: 30000 }); + await expect(page.getByRole('button', { name: 'CNOE Light' })).toBeVisible(); + await expect(page.getByRole('button', { name: 'CNOE Dark' })).toBeVisible(); + }); +}); diff --git a/examples/entities.yaml b/examples/entities.yaml index 447e8b1..d878632 100644 --- a/examples/entities.yaml +++ b/examples/entities.yaml @@ -1,41 +1,350 @@ --- -# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-system +# System apiVersion: backstage.io/v1alpha1 kind: System metadata: - name: examples + name: cnoe-platform + description: CNOE Internal Developer Platform + tags: + - platform + - cnoe + links: + - url: https://cnoe.io + title: CNOE Website + icon: web spec: - owner: guests + owner: platform-team + --- -# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-component +# Frontend Component apiVersion: backstage.io/v1alpha1 kind: Component metadata: - name: example-website + name: developer-portal + description: Backstage-based developer portal for the CNOE platform + tags: + - backstage + - react + - typescript + annotations: + backstage.io/techdocs-ref: dir:. + links: + - url: https://cnoe.io/docs + title: Documentation + icon: docs + - url: https://github.com/cnoe-io/backstage-app + title: GitHub Repository + icon: github spec: type: website - lifecycle: experimental - owner: guests - system: examples - providesApis: [example-grpc-api] + lifecycle: production + owner: platform-team + system: cnoe-platform + consumesApis: + - platform-api + +--- +# Backend Service +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: platform-api-service + description: Backend API service powering the CNOE platform + tags: + - node + - typescript + - api + annotations: + backstage.io/techdocs-ref: dir:. + backstage.io/kubernetes-namespace: default + backstage.io/kubernetes-id: platform-api-service + argocd/app-name: platform-api-service + apache-spark.cnoe.io/label-selector: app=spark-example + apache-spark.cnoe.io/cluster-name: local + argo-workflows.cnoe.io/label-selector: app=example-workflow + argo-workflows.cnoe.io/namespace: default + terraform.cnoe.io/secret-name: terraform-state + terraform.cnoe.io/secret-namespace: default + links: + - url: https://github.com/cnoe-io/platform-api + title: GitHub Repository + icon: github +spec: + type: service + lifecycle: production + owner: platform-team + system: cnoe-platform + providesApis: + - platform-api + consumesApis: + - cluster-api + dependsOn: + - resource:platform-database + +--- +# Worker Service +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: gitops-controller + description: GitOps reconciliation controller for infrastructure management + tags: + - go + - kubernetes + - gitops +spec: + type: service + lifecycle: production + owner: infra-team + system: cnoe-platform + dependsOn: + - resource:platform-database + --- -# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-api +# Library +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: cnoe-sdk + description: Shared SDK library for CNOE platform integrations + tags: + - typescript + - sdk + - library +spec: + type: library + lifecycle: production + owner: platform-team + system: cnoe-platform + +--- +# API - OpenAPI +apiVersion: backstage.io/v1alpha1 +kind: API +metadata: + name: platform-api + description: CNOE Platform REST API + tags: + - rest + - openapi +spec: + type: openapi + lifecycle: production + owner: platform-team + system: cnoe-platform + definition: | + openapi: "3.0.0" + info: + title: CNOE Platform API + version: "1.0.0" + description: REST API for the CNOE Internal Developer Platform + servers: + - url: https://api.cnoe.example.com/v1 + paths: + /health: + get: + summary: Health check + operationId: getHealth + responses: + '200': + description: Service is healthy + content: + application/json: + schema: + type: object + properties: + status: + type: string + example: ok + /clusters: + get: + summary: List clusters + operationId: listClusters + responses: + '200': + description: List of managed clusters + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Cluster' + post: + summary: Create a cluster + operationId: createCluster + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ClusterInput' + responses: + '201': + description: Cluster created + /clusters/{id}: + get: + summary: Get cluster details + operationId: getCluster + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + '200': + description: Cluster details + content: + application/json: + schema: + $ref: '#/components/schemas/Cluster' + components: + schemas: + Cluster: + type: object + properties: + id: + type: string + name: + type: string + provider: + type: string + enum: [aws, gcp, azure] + status: + type: string + enum: [provisioning, running, degraded, deleting] + region: + type: string + nodeCount: + type: integer + ClusterInput: + type: object + required: [name, provider, region] + properties: + name: + type: string + provider: + type: string + enum: [aws, gcp, azure] + region: + type: string + nodeCount: + type: integer + default: 3 + +--- +# API - gRPC apiVersion: backstage.io/v1alpha1 kind: API metadata: - name: example-grpc-api + name: cluster-api + description: Internal gRPC API for cluster management + tags: + - grpc + - internal spec: type: grpc - lifecycle: experimental - owner: guests - system: examples + lifecycle: production + owner: infra-team + system: cnoe-platform definition: | syntax = "proto3"; - service Exampler { - rpc Example (ExampleMessage) returns (ExampleMessage) {}; + package cnoe.cluster.v1; + + service ClusterService { + rpc CreateCluster (CreateClusterRequest) returns (Cluster) {}; + rpc GetCluster (GetClusterRequest) returns (Cluster) {}; + rpc ListClusters (ListClustersRequest) returns (ListClustersResponse) {}; + rpc DeleteCluster (DeleteClusterRequest) returns (DeleteClusterResponse) {}; } - message ExampleMessage { - string example = 1; - }; + message CreateClusterRequest { + string name = 1; + string provider = 2; + string region = 3; + int32 node_count = 4; + } + + message GetClusterRequest { + string id = 1; + } + + message ListClustersRequest { + int32 page_size = 1; + string page_token = 2; + } + + message ListClustersResponse { + repeated Cluster clusters = 1; + string next_page_token = 2; + } + + message DeleteClusterRequest { + string id = 1; + } + + message DeleteClusterResponse {} + + message Cluster { + string id = 1; + string name = 2; + string provider = 3; + string region = 4; + string status = 5; + int32 node_count = 6; + } + +--- +# Resource - Database +apiVersion: backstage.io/v1alpha1 +kind: Resource +metadata: + name: platform-database + description: PostgreSQL database for the CNOE platform + tags: + - postgresql + - database +spec: + type: database + owner: infra-team + system: cnoe-platform + +--- +# Resource - S3 Bucket +apiVersion: backstage.io/v1alpha1 +kind: Resource +metadata: + name: artifacts-bucket + description: S3 bucket for build artifacts and TechDocs + tags: + - s3 + - storage +spec: + type: s3-bucket + owner: infra-team + system: cnoe-platform + +--- +# Kro ResourceGroup +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: example-resource-group + description: Example Kro ResourceGroup for managing cloud resources + tags: + - kro + - kubernetes + - resourcegroup + annotations: + backstage.io/kubernetes-namespace: default + backstage.io/kubernetes-label-selector: app=example-rg + kro.run/resource-group: example-resource-group + kro.run/managed-resources: '[{"kind":"Deployment","name":"web-app","namespace":"default"},{"kind":"Service","name":"web-app-svc","namespace":"default"}]' +spec: + type: kro-resource-group + lifecycle: production + owner: platform-team + system: cnoe-platform + dependsOn: + - resource:platform-database diff --git a/examples/k8s-apply/template-manifest-object.yaml b/examples/k8s-apply/template-manifest-object.yaml index f88963d..719c5b6 100644 --- a/examples/k8s-apply/template-manifest-object.yaml +++ b/examples/k8s-apply/template-manifest-object.yaml @@ -7,7 +7,6 @@ metadata: spec: owner: guest type: service - # these are the steps which are rendered in the frontend with the form input parameters: [] steps: - id: template @@ -26,11 +25,8 @@ spec: metadata: name: game-demo data: - # property-like keys; each key maps to a simple value player_initial_lives: "3" ui_properties_file_name: "user-interface.properties" - - # file-like keys game.properties: | enemy.types=aliens,monsters player.maximum-lives=5 diff --git a/examples/k8s-apply/template-manifest-string.yaml b/examples/k8s-apply/template-manifest-string.yaml index 312f557..d2c65bf 100644 --- a/examples/k8s-apply/template-manifest-string.yaml +++ b/examples/k8s-apply/template-manifest-string.yaml @@ -7,7 +7,6 @@ metadata: spec: owner: guest type: service - # these are the steps which are rendered in the frontend with the form input parameters: [] steps: - id: template @@ -26,11 +25,8 @@ spec: metadata: name: game-demo data: - # property-like keys; each key maps to a simple value player_initial_lives: "3" ui_properties_file_name: "user-interface.properties" - - # file-like keys game.properties: | enemy.types=aliens,monsters player.maximum-lives=5 diff --git a/examples/k8s-apply/template.yaml b/examples/k8s-apply/template.yaml index 3f097c3..ff7d6b9 100644 --- a/examples/k8s-apply/template.yaml +++ b/examples/k8s-apply/template.yaml @@ -7,7 +7,6 @@ metadata: spec: owner: guest type: service - # these are the steps which are rendered in the frontend with the form input parameters: - title: file name properties: diff --git a/examples/local-stack/README.md b/examples/local-stack/README.md new file mode 100644 index 0000000..721da6c --- /dev/null +++ b/examples/local-stack/README.md @@ -0,0 +1,119 @@ +# Local Testing Stack for Backstage Plugin Integration + +Add-on to the [cnoe-io/stacks ref-implementation](https://github.com/cnoe-io/stacks/tree/main/ref-implementation) that adds Kro operator and updated Backstage config for verifying all plugin integrations. + +## Prerequisites + +- [idpbuilder](https://github.com/cnoe-io/idpbuilder/releases/latest) v0.3.0+ +- kubectl, docker, helm 3.x +- 6 GB RAM allocated to Docker + +## Setup + +### 1. Run the ref-implementation + +```bash +idpbuilder create --use-path-routing \ + --package https://github.com/cnoe-io/stacks//ref-implementation +``` + +Wait ~6 minutes. Track progress at https://cnoe.localtest.me:8443/argocd + +### 2. Install Kro operator + +```bash +helm install kro oci://registry.k8s.io/kro/charts/kro \ + --namespace kro-system --create-namespace +``` + +### 3. Apply Kro sample and Backstage patches + +```bash +# Wait for CRD, then apply sample ResourceGraphDefinition +kubectl wait --for=condition=Established crd/resourcegraphdefinitions.kro.run --timeout=60s +kubectl apply -f examples/local-stack/kro/manifests/install.yaml + +# Apply Backstage RBAC and config for Kro +kubectl apply -f examples/local-stack/backstage-patch/manifests/install.yaml +``` + +### 4. Build and load local Backstage image + +```bash +docker build -t ghcr.io/cnoe-io/backstage-app:local . +docker save ghcr.io/cnoe-io/backstage-app:local | \ + docker exec -i localdev-control-plane ctr -n k8s.io images import --all-platforms - +``` + +### 5. Swap Backstage deployment + +```bash +kubectl -n backstage set image deployment/backstage \ + backstage=ghcr.io/cnoe-io/backstage-app:local +kubectl -n backstage patch deployment backstage \ + -p '{"spec":{"template":{"spec":{"containers":[{"name":"backstage","imagePullPolicy":"Never"}]}}}}' +kubectl -n argocd patch application backstage --type merge \ + -p '{"spec":{"syncPolicy":null}}' +``` + +### 6. Add guest auth (for testing without Keycloak) + +```bash +kubectl -n backstage get configmap backstage-config -o yaml | \ + sed 's/keycloak-oidc:/guest:\n dangerouslyAllowOutsideDevelopment: true\n keycloak-oidc:/' | \ + kubectl apply -f - +kubectl -n backstage rollout restart deployment/backstage +``` + +## Access + +| Service | URL | Credentials | +|---|---|---| +| Backstage | https://cnoe.localtest.me:8443/ | guest or `user1` / `idpbuilder get secrets` | +| ArgoCD | https://cnoe.localtest.me:8443/argocd | admin / `idpbuilder get secrets -p argocd` | +| Gitea | https://cnoe.localtest.me:8443/gitea | giteaAdmin / `idpbuilder get secrets -p gitea` | +| Keycloak | https://cnoe.localtest.me:8443/keycloak | cnoe-admin / `idpbuilder get secrets` | + +## Verification + +| Integration | How to verify | +|---|---| +| Catalog | `/catalog` — entities loaded from Gitea | +| APIs | `/api-docs` — API entities visible | +| Scaffolder | `/create` → choose template → creates repo in Gitea | +| Keycloak | Sign in via Keycloak OIDC | +| Kubernetes | Entity page → Kubernetes tab shows pods | +| ArgoCD | Entity page → ArgoCD card shows app status | +| Kro | `kubectl get rgd -A` — WebApp ResourceGraphDefinition present | +| TechDocs | `/docs` — documentation renders | +| Search | `/search` — results from catalog + techdocs | + +## Iterate + +```bash +# After code changes: +docker build -t ghcr.io/cnoe-io/backstage-app:local . +docker save ghcr.io/cnoe-io/backstage-app:local | \ + docker exec -i localdev-control-plane ctr -n k8s.io images import --all-platforms - +kubectl -n backstage rollout restart deployment/backstage +``` + +## Mock Mode (no cluster needed) + +For local development without any external services: + +```bash +MOCK_MODE=true yarn dev +``` + +Mock entities in `examples/local-stack/mock-entities/catalog-info.yaml` are wired to the mock backends with correct annotations for Kubernetes, ArgoCD, Spark, Argo Workflows, and Terraform tabs. + +## Troubleshooting + +**Kro controller not starting**: Verify Helm install: `helm list -n kro-system` + +**Backstage can't see Kro resources**: Check RBAC: `kubectl auth can-i list resourcegraphdefinitions.kro.run --as=system:serviceaccount:backstage:backstage` + +**ArgoCD reverts image**: Disable auto-sync (step 5 above) + +**Image not found after load**: Ensure `imagePullPolicy: Never` is set on the deployment diff --git a/examples/local-stack/backstage-patch.yaml b/examples/local-stack/backstage-patch.yaml new file mode 100644 index 0000000..0387090 --- /dev/null +++ b/examples/local-stack/backstage-patch.yaml @@ -0,0 +1,19 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: backstage-kro-patch + namespace: argocd + labels: + env: dev +spec: + project: default + source: + repoURL: cnoe://backstage-patch/manifests + targetRevision: HEAD + path: "." + destination: + server: "https://kubernetes.default.svc" + namespace: backstage + syncPolicy: + automated: + selfHeal: true diff --git a/examples/local-stack/backstage-patch/manifests/install.yaml b/examples/local-stack/backstage-patch/manifests/install.yaml new file mode 100644 index 0000000..06b77f2 --- /dev/null +++ b/examples/local-stack/backstage-patch/manifests/install.yaml @@ -0,0 +1,52 @@ +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: backstage-kro-reader +rules: + - apiGroups: ["kro.run"] + resources: ["resourcegraphdefinitions", "webapps"] + verbs: ["get", "list", "watch"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: backstage-kro-reader +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: backstage-kro-reader +subjects: + - kind: ServiceAccount + name: backstage + namespace: backstage +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: backstage-kro-config + namespace: backstage +data: + app-config.kro.yaml: | + kubernetes: + customResources: + - group: kro.run + apiVersion: v1alpha1 + plural: resourcegraphdefinitions + kubernetesIngestor: + components: + enabled: true + clusters: + - url: https://kubernetes.default.svc.cluster.local + name: local + authProvider: serviceAccount + skipTLSVerify: true + skipMetricsLookup: true + serviceAccountToken: + $file: /var/run/secrets/kubernetes.io/serviceaccount/token + caData: + $file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + kro: + enabled: true + permission: + enabled: false diff --git a/examples/local-stack/kro.yaml b/examples/local-stack/kro.yaml new file mode 100644 index 0000000..33f6f0b --- /dev/null +++ b/examples/local-stack/kro.yaml @@ -0,0 +1,21 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: kro + namespace: argocd + labels: + env: dev +spec: + project: default + source: + repoURL: cnoe://kro/manifests + targetRevision: HEAD + path: "." + destination: + server: "https://kubernetes.default.svc" + namespace: kro-system + syncPolicy: + syncOptions: + - CreateNamespace=true + automated: + selfHeal: true diff --git a/examples/local-stack/kro/manifests/install.yaml b/examples/local-stack/kro/manifests/install.yaml new file mode 100644 index 0000000..3cbc485 --- /dev/null +++ b/examples/local-stack/kro/manifests/install.yaml @@ -0,0 +1,63 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: kro-system +--- +# NOTE: Kro controller is installed via Helm (see README.md): +# helm install kro oci://registry.k8s.io/kro/charts/kro --namespace kro-system --create-namespace +# +# The CRD and sample ResourceGraphDefinition below are applied after Helm install. +--- +apiVersion: kro.run/v1alpha1 +kind: ResourceGraphDefinition +metadata: + name: webapp + namespace: default +spec: + schema: + apiVersion: v1alpha1 + kind: WebApp + spec: + name: + type: string + image: + type: string + default: nginx:latest + replicas: + type: integer + default: 1 + resources: + - id: deployment + template: + apiVersion: apps/v1 + kind: Deployment + metadata: + name: ${schema.spec.name} + spec: + replicas: ${schema.spec.replicas} + selector: + matchLabels: + app: ${schema.spec.name} + template: + metadata: + labels: + app: ${schema.spec.name} + spec: + containers: + - name: main + image: ${schema.spec.image} + ports: + - containerPort: 80 + - id: service + template: + apiVersion: v1 + kind: Service + metadata: + name: ${schema.spec.name} + spec: + selector: + app: ${schema.spec.name} + ports: + - port: 80 + targetPort: 80 diff --git a/examples/local-stack/mock-entities/catalog-info.yaml b/examples/local-stack/mock-entities/catalog-info.yaml new file mode 100644 index 0000000..130b28e --- /dev/null +++ b/examples/local-stack/mock-entities/catalog-info.yaml @@ -0,0 +1,196 @@ +--- +# System +apiVersion: backstage.io/v1alpha1 +kind: System +metadata: + name: cnoe-platform + description: CNOE Internal Developer Platform + tags: [platform, cnoe] +spec: + owner: guests + +--- +# Platform API Service — wired to K8s + ArgoCD mock data +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: platform-api-service + description: Platform API backend service with Kubernetes and ArgoCD integration + tags: [go, api, kubernetes] + annotations: + backstage.io/kubernetes-id: platform-api-service + argocd/app-name: platform-api-service + backstage.io/techdocs-ref: dir:. + links: + - url: https://github.com/cnoe-io/platform-api + title: GitHub + icon: github +spec: + type: service + lifecycle: production + owner: guests + system: cnoe-platform + providesApis: + - platform-api + +--- +# Developer Portal — frontend component +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: developer-portal + description: Backstage-based developer portal + tags: [backstage, react, typescript] + annotations: + backstage.io/techdocs-ref: dir:. +spec: + type: website + lifecycle: production + owner: guests + system: cnoe-platform + consumesApis: + - platform-api + +--- +# Data Pipeline — wired to Spark + Argo Workflows mock data +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: data-pipeline + description: ETL data pipeline using Apache Spark and Argo Workflows + tags: [spark, python, data] + annotations: + backstage.io/kubernetes-id: spark-etl-job + apache-spark/app-name: spark-etl-job + argo-workflows/namespace: default +spec: + type: service + lifecycle: production + owner: guests + system: cnoe-platform + +--- +# Infrastructure Service — wired to Terraform mock data +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: infrastructure-service + description: Infrastructure management service using Terraform + tags: [terraform, infrastructure, aws] + annotations: + backstage.io/kubernetes-id: infrastructure-service + terraform/state-key: cnoe-platform/infrastructure +spec: + type: service + lifecycle: production + owner: guests + system: cnoe-platform + +--- +# Platform API definition +apiVersion: backstage.io/v1alpha1 +kind: API +metadata: + name: platform-api + description: CNOE Platform REST API + tags: [rest, openapi] +spec: + type: openapi + lifecycle: production + owner: guests + system: cnoe-platform + definition: | + openapi: 3.0.0 + info: + title: CNOE Platform API + version: 1.0.0 + description: API for managing platform resources + paths: + /api/v1/resources: + get: + summary: List resources + responses: + '200': + description: List of resources + /api/v1/resources/{id}: + get: + summary: Get resource by ID + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + '200': + description: Resource details + +--- +# gRPC API +apiVersion: backstage.io/v1alpha1 +kind: API +metadata: + name: platform-grpc-api + description: CNOE Platform gRPC API for internal services + tags: [grpc, protobuf] +spec: + type: grpc + lifecycle: production + owner: guests + system: cnoe-platform + definition: | + syntax = "proto3"; + package cnoe.platform.v1; + service PlatformService { + rpc GetResource (GetResourceRequest) returns (Resource); + rpc ListResources (ListResourcesRequest) returns (ListResourcesResponse); + } + message GetResourceRequest { string id = 1; } + message Resource { string id = 1; string name = 2; string type = 3; } + message ListResourcesRequest { int32 page_size = 1; string page_token = 2; } + message ListResourcesResponse { repeated Resource resources = 1; string next_page_token = 2; } + +--- +# Database Resource +apiVersion: backstage.io/v1alpha1 +kind: Resource +metadata: + name: platform-database + description: PostgreSQL database for the platform + tags: [postgresql, database] +spec: + type: database + owner: guests + system: cnoe-platform + +--- +# S3 Bucket Resource +apiVersion: backstage.io/v1alpha1 +kind: Resource +metadata: + name: platform-storage + description: S3 bucket for platform artifacts + tags: [s3, storage, aws] +spec: + type: s3-bucket + owner: guests + system: cnoe-platform + +--- +# User and Group +apiVersion: backstage.io/v1alpha1 +kind: Group +metadata: + name: guests + description: Guest users group +spec: + type: team + children: [] + +--- +apiVersion: backstage.io/v1alpha1 +kind: User +metadata: + name: guest +spec: + memberOf: [guests] diff --git a/examples/mkdocs.yml b/examples/mkdocs.yml new file mode 100644 index 0000000..94d681f --- /dev/null +++ b/examples/mkdocs.yml @@ -0,0 +1,4 @@ +site_name: developer-portal +docs_dir: docs +plugins: + - techdocs-core diff --git a/examples/org.yaml b/examples/org.yaml index a10e81f..9579159 100644 --- a/examples/org.yaml +++ b/examples/org.yaml @@ -1,17 +1,46 @@ --- -# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-user apiVersion: backstage.io/v1alpha1 kind: User metadata: name: guest spec: - memberOf: [guests] + memberOf: [platform-team] + +--- +apiVersion: backstage.io/v1alpha1 +kind: User +metadata: + name: admin + description: Platform administrator +spec: + memberOf: [platform-team, infra-team] + +--- +apiVersion: backstage.io/v1alpha1 +kind: Group +metadata: + name: platform-team + description: Platform engineering team +spec: + type: team + children: [] + +--- +apiVersion: backstage.io/v1alpha1 +kind: Group +metadata: + name: infra-team + description: Infrastructure team +spec: + type: team + children: [] + --- -# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-group apiVersion: backstage.io/v1alpha1 kind: Group metadata: name: guests + description: Guest users spec: type: team children: [] diff --git a/examples/template/template.yaml b/examples/template/template.yaml index 33f262b..a729794 100644 --- a/examples/template/template.yaml +++ b/examples/template/template.yaml @@ -1,5 +1,4 @@ apiVersion: scaffolder.backstage.io/v1beta3 -# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-template kind: Template metadata: name: example-nodejs-template @@ -8,9 +7,6 @@ metadata: spec: owner: user:guest type: service - - # These parameters are used to generate the input form in the frontend, and are - # used to gather input data for the execution of the template. parameters: - title: Fill in some steps required: @@ -34,11 +30,7 @@ spec: ui:options: allowedHosts: - github.com - - # These steps are executed in the scaffolder backend, using data that we gathered - # via the parameters above. steps: - # Each step executes an action, in this case one templates files into the working directory. - id: fetch-base name: Fetch Base action: fetch:template @@ -46,8 +38,6 @@ spec: url: ./content values: name: ${{ parameters.name }} - - # This step publishes the contents of the working directory to GitHub. - id: publish name: Publish action: publish:github @@ -55,16 +45,12 @@ spec: allowedHosts: ['github.com'] description: This is ${{ parameters.name }} repoUrl: ${{ parameters.repoUrl }} - - # The final step is to register our new component in the catalog. - id: register name: Register action: catalog:register input: repoContentsUrl: ${{ steps['publish'].output.repoContentsUrl }} catalogInfoPath: '/catalog-info.yaml' - - # Outputs are displayed to the user after a successful execution of the template. output: links: - title: Repository diff --git a/examples/theme-previews/option-a-classic.html b/examples/theme-previews/option-a-classic.html new file mode 100644 index 0000000..fc24c2a --- /dev/null +++ b/examples/theme-previews/option-a-classic.html @@ -0,0 +1,66 @@ + + + + +Option A: Classic CNOE + + + + +

Option A: Classic CNOE — Light

+

Internal Developer Platform

Welcome back, developer

CICD Pipeline RG

Kro ResourceGroup for CI/CD

kro-resource-group

EKS Cluster RG

Provision EKS with VPC

production

Example Website

Example website component

website

Platform Infra

Platform infrastructure

system
+

Option A: Classic CNOE — Dark

+

Internal Developer Platform

Welcome back, developer

CICD Pipeline RG

Kro ResourceGroup for CI/CD

kro-resource-group

EKS Cluster RG

Provision EKS with VPC

production

Example Website

Example website component

website

Platform Infra

Platform infrastructure

system
+ diff --git a/examples/theme-previews/option-b-vibrant.html b/examples/theme-previews/option-b-vibrant.html new file mode 100644 index 0000000..0d57e08 --- /dev/null +++ b/examples/theme-previews/option-b-vibrant.html @@ -0,0 +1,67 @@ + + + + +Option B: CNOE Vibrant + + + + +

Option B: Vibrant — Light (dark sidebar)

+

Internal Developer Platform

Welcome back, developer

CICD Pipeline RG

Kro ResourceGroup for CI/CD

kro-resource-group

EKS Cluster RG

Provision EKS with VPC

production

Example Website

Example website component

website

Platform Infra

Platform infrastructure

system
+

Option B: Vibrant — Dark

+

Internal Developer Platform

Welcome back, developer

CICD Pipeline RG

Kro ResourceGroup for CI/CD

kro-resource-group

EKS Cluster RG

Provision EKS with VPC

production

Example Website

Example website component

website

Platform Infra

Platform infrastructure

system
+ diff --git a/examples/theme-previews/option-c-minimal.html b/examples/theme-previews/option-c-minimal.html new file mode 100644 index 0000000..b4b7066 --- /dev/null +++ b/examples/theme-previews/option-c-minimal.html @@ -0,0 +1,67 @@ + + + + +Option C: CNOE Minimal + + + + +

Option C: Minimal — Light (flat, no gradients)

+

Internal Developer Platform

Welcome back, developer

CICD Pipeline RG

Kro ResourceGroup for CI/CD

kro-resource-group

EKS Cluster RG

Provision EKS with VPC

production

Example Website

Example website component

website

Platform Infra

Platform infrastructure

system
+

Option C: Minimal — Dark (flat)

+

Internal Developer Platform

Welcome back, developer

CICD Pipeline RG

Kro ResourceGroup for CI/CD

kro-resource-group

EKS Cluster RG

Provision EKS with VPC

production

Example Website

Example website component

website

Platform Infra

Platform infrastructure

system
+ diff --git a/lerna.json b/lerna.json deleted file mode 100644 index 529a62f..0000000 --- a/lerna.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "packages": ["packages/*", "plugins/*"], - "npmClient": "yarn", - "version": "0.1.0", - "$schema": "node_modules/lerna/schemas/lerna-schema.json" -} diff --git a/package.json b/package.json index a7f7fc5..ebcda46 100644 --- a/package.json +++ b/package.json @@ -3,26 +3,26 @@ "version": "1.0.0", "private": true, "engines": { - "node": "18 || 20" + "node": "18 || 20 || 22" }, "scripts": { - "dev": "concurrently \"yarn start\" \"yarn start-backend\"", + "dev": "HOST=0.0.0.0 concurrently \"yarn start\" \"yarn start-backend\"", + "dev:mock": "MOCK_MODE=true yarn dev", "start": "yarn workspace app start", "start-backend": "yarn workspace backend start", "build:backend": "yarn workspace backend build", "build:all": "backstage-cli repo build --all", - "build-image": "yarn workspace backend build-image", "tsc": "tsc", "tsc:full": "tsc --skipLibCheck false --incremental false", "clean": "backstage-cli repo clean", "test": "backstage-cli repo test", "test:all": "backstage-cli repo test --coverage", - "test:e2e": "playwright test", "fix": "backstage-cli repo fix", "lint": "backstage-cli repo lint --since origin/main", "lint:all": "backstage-cli repo lint", "prettier:check": "prettier --check .", - "new": "backstage-cli new --scope internal" + "new": "backstage-cli new --scope internal", + "test:e2e": "npx playwright test" }, "workspaces": { "packages": [ @@ -31,28 +31,18 @@ ] }, "devDependencies": { - "@backstage/cli": "^0.26.10", - "@backstage/e2e-test-utils": "^0.1.1", - "@playwright/test": "^1.32.3", - "@spotify/prettier-config": "^12.0.0", + "@backstage/cli": "^0.36.0", + "@playwright/test": "^1.59.1", + "@spotify/prettier-config": "^15.0.0", "concurrently": "^8.0.0", - "lerna": "^7.3.0", - "node-gyp": "^9.0.0", "prettier": "^2.3.2", - "typescript": "~5.2.0" + "typescript": "~5.4.0" }, "resolutions": { "@types/react": "^18", - "@types/react-dom": "^18" + "@types/react-dom": "^18", + "isolated-vm": "5.0.1", + "@mui/material": "^5.15.6" }, - "prettier": "@spotify/prettier-config", - "lint-staged": { - "*.{js,jsx,ts,tsx,mjs,cjs}": [ - "eslint --fix", - "prettier --write" - ], - "*.{json,md}": [ - "prettier --write" - ] - } + "prettier": "@spotify/prettier-config" } diff --git a/packages/app/.eslintignore b/packages/app/.eslintignore deleted file mode 100644 index a48cf0d..0000000 --- a/packages/app/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -public diff --git a/packages/app/package.json b/packages/app/package.json index c7b1b72..443f98b 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -7,63 +7,62 @@ "role": "frontend" }, "scripts": { - "start": "backstage-cli package start", + "start": "HOST=0.0.0.0 backstage-cli package start", "build": "backstage-cli package build", "clean": "backstage-cli package clean", "test": "backstage-cli package test", "lint": "backstage-cli package lint" }, "dependencies": { - "@backstage/app-defaults": "^1.5.7", - "@backstage/catalog-model": "^1.5.0", - "@backstage/cli": "^0.26.10", - "@backstage/core-app-api": "^1.13.0", - "@backstage/core-components": "^0.14.8", - "@backstage/core-plugin-api": "^1.9.3", - "@backstage/integration-react": "^1.1.28", - "@backstage/plugin-api-docs": "^0.11.6", - "@backstage/plugin-catalog": "^1.21.0", - "@backstage/plugin-catalog-common": "^1.0.24", - "@backstage/plugin-catalog-graph": "^0.4.6", - "@backstage/plugin-catalog-import": "^0.12.0", - "@backstage/plugin-catalog-react": "^1.12.1", - "@backstage/plugin-home": "^0.7.6", - "@backstage/plugin-kubernetes": "^0.11.11", - "@backstage/plugin-org": "^0.6.26", - "@backstage/plugin-permission-react": "^0.4.23", - "@backstage/plugin-scaffolder": "^1.22.0", - "@backstage/plugin-search": "^1.4.13", - "@backstage/plugin-search-react": "^1.7.12", - "@backstage/plugin-techdocs": "^1.10.6", - "@backstage/plugin-techdocs-module-addons-contrib": "^1.1.11", - "@backstage/plugin-techdocs-react": "^1.2.5", - "@backstage/plugin-user-settings": "^0.8.8", - "@backstage/theme": "^0.5.6", + "@backstage/core-components": "^0.18.8", + "@backstage/core-plugin-api": "^1.12.4", + "@backstage/frontend-defaults": "^0.5.0", + "@backstage/frontend-plugin-api": "^0.15.1", + "@backstage/plugin-app-react": "^0.2.1", + "@backstage/plugin-api-docs": "^0.13.5", + "@backstage/plugin-catalog": "^2.0.1", + "@backstage/plugin-catalog-common": "^1.1.8", + "@backstage/plugin-catalog-graph": "^0.6.0", + "@backstage/plugin-catalog-import": "^0.13.11", + "@backstage/plugin-catalog-react": "^2.1.1", + "@backstage/plugin-home": "^0.9.3", + "@backstage/plugin-kubernetes": "^0.12.17", + "@backstage/plugin-kubernetes-react": "^0.5.18", + "@backstage/plugin-org": "^0.7.0", + "@backstage/plugin-permission-react": "^0.4.41", + "@backstage/plugin-scaffolder": "^1.36.1", + "@backstage/plugin-search": "^1.7.0", + "@backstage/plugin-search-react": "^1.11.0", + "@backstage/plugin-techdocs": "^1.17.2", + "@backstage/plugin-techdocs-module-addons-contrib": "^1.1.34", + "@backstage/plugin-techdocs-react": "^1.3.9", + "@backstage/plugin-user-settings": "^0.9.1", + "@backstage/theme": "^0.7.2", + "@backstage/integration-react": "^1.2.16", + "@backstage/catalog-model": "^1.7.7", + "@backstage/core-compat-api": "^0.5.9", + "@backstage/core-app-api": "^1.19.6", + "@backstage/app-defaults": "^1.7.6", "@internal/plugin-apache-spark": "^0.1.0", "@internal/plugin-argo-workflows": "^0.1.0", - "@internal/plugin-cnoe-ui": "^0.1.0", "@internal/plugin-terraform": "^0.1.0", - "@material-ui/core": "^4.12.2", - "@material-ui/icons": "^4.9.1", - "@roadiehq/backstage-plugin-argo-cd": "^2.5.1", - "history": "^5.0.0", + "@terasky/backstage-plugin-kro-resources-frontend": "^0.2.1", + "@roadiehq/backstage-plugin-argo-cd": "^2.12.5", + "@backstage-community/plugin-github-actions": "^0.22.0", + "@backstage-community/plugin-tech-radar": "^1.17.0", + "@backstage/ui": "^0.13.2", + "@mui/icons-material": "^5.0.0", "react": "^18.0.2", "react-dom": "^18.0.2", - "react-router": "^6.3.0", - "react-router-dom": "^6.3.0", - "react-use": "^17.2.4", - "@backstage-community/plugin-github-actions": "^0.6.16", - "@backstage-community/plugin-tech-radar": "^0.7.4" + "react-router-dom": "^6.3.0" }, "devDependencies": { - "@backstage/test-utils": "^1.5.7", - "@playwright/test": "^1.32.3", + "@backstage/test-utils": "^1.7.16", "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", - "@types/react-dom": "*", - "cross-env": "^7.0.0" + "@types/react-dom": "*" }, "browserslist": { "production": [ diff --git a/packages/app/public/android-chrome-192x192.png b/packages/app/public/android-chrome-192x192.png deleted file mode 100644 index eec0ae25b971cae8eb0033c9af7e0f676d1df663..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13599 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 EANz~b2mk;8 diff --git a/packages/app/public/apple-touch-icon.png b/packages/app/public/apple-touch-icon.png deleted file mode 100644 index 3158830ac778a62ff8f08da0e9eeee6e8ada8bfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12619 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 VSn|oqbSlsa22WQ%mvv4FO#qym7y1AI diff --git a/packages/app/public/favicon-32x32.png b/packages/app/public/favicon-32x32.png deleted file mode 100644 index c0915ece75949f3d917134f55193949927edc633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1686 zcmd5*YdF&j82@WYD9ojqT$Wo{SSXitp^eRqxy{@++t}P`atlKxQX0)YMm6_KR%p4F z$}J+6LMeH2OXWDHjylI#AJ2#L{k+fbeSgn;`91HK_szmP+3%H7kpcicc}5$z1N!Px-7om}akWbt233fdJ10ExN)z&Z~ATcQ$c2>@ad0I)&=0IMPZ zfJBuET&w|L$8)@+J4!Sl|Nk(stgJlvmnlJ&;dZvl8tO{Q%IJ*5_~q$1+xa={mdc0(T`t!w?RZl>^IxA*%bGu3bF$<*nzTrF> zoQ&9oiO|s=ORAp|1maSVle9kTR(cJ300u{&4iq#dewwjMjZ;umbia|8`fV}#)u6uZ z2{{=Vn6Y8_#3SbXb1ic-&s#nMteerJ5NT@9WJFf_0Z{rXvToRrSOV|5nT6}g)=)7clCVKtHJ1*VPs-V;@XTM)*hF8A>dvO zHk*Y?X8JaA;})mFp7;7TRRuk~8$R*Snh{9txf3X8a4%y!TuP;MHGAGHB;T*cTs()( zPBU^uyOrcpI-AkwlQc~ccBy9xRRz@U7IH^D@piFSO__BF#e(AN-^z2yOmV!NrfGJV z)K=@)T;PiA16X29aqmP@px{GT+&pJ*OCU>i#GE8dw3RuCdu^ zY|d<%y|L(_@zJ9#_m z=Lc$*iilj{bjSDeNH|lRP>yLE)Yq?l!XVsP?uHhR(xnf>5p}vuAuF-j7*tA0oTAH zhFP&ZPMN7z8!K6i|K8u7|AYJvRll0p!ov{KSr|$njU-`o&7fVZN5@WQ|g`Mlirnap=oY~b#iCdHeScp|7sct zd}FL!1NSuuCnVle?ygaP975V!)pzN#*|A{{1* z$fS~)G%HFBO+IIv4>f5HNGY_6SF`0>Gf0kWIFv^nU=X CgrE5U diff --git a/packages/app/public/favicon.ico b/packages/app/public/favicon.ico deleted file mode 100644 index 5e45e5dfbde6f39603d5be60d933c1af14dffb1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 D+pS%} diff --git a/packages/app/public/img/argo-workflows.png b/packages/app/public/img/argo-workflows.png new file mode 100644 index 0000000000000000000000000000000000000000..b9cb18e63431b2559105a29b3140d6fc22882b5b GIT binary patch literal 27971 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 literal 0 HcmV?d00001 diff --git a/packages/app/public/img/argocd.png b/packages/app/public/img/argocd.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb0573d40be13722d55c2582a672298ba0b10e5 GIT binary patch literal 35750 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 z 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

e^A0;l!M@KhVr&_6)UmVYnpkomrH#f2nh08 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 Hb&mNzoaBN$ literal 0 HcmV?d00001 diff --git a/packages/app/public/img/cnoe/logo-no-name.png b/packages/app/public/img/cnoe/logo-no-name.png new file mode 100644 index 0000000000000000000000000000000000000000..82f4320b9d7c4e7e5dd380b5142c8eaa0e2ecbf3 GIT binary patch literal 31805 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 Jxuoga{{tmGu*?7e literal 0 HcmV?d00001 diff --git a/packages/app/public/img/cnoe/logo-white.png b/packages/app/public/img/cnoe/logo-white.png new file mode 100644 index 0000000000000000000000000000000000000000..7e80594c1cf286bcb31ad33f117e1a2dd7d90f6b GIT binary patch literal 26199 zcmeFZWmJ@1)IWR;E!`juDhdh$O1GGF4V@yALrM)bNU4;!fFO+s!qCEyLy3SAf|3s1 z-6;sXXT0y{;3Xy|L242a&evOoPGA$`?vGVOKr^uROD>r5Cl;@dU#hCf{6AY zh_IH71pFmq#9t3QF1S53_JkneOZa~<-&{p+2;zYr-Bs52Oe0nS#7ikI6W4J0fHdg zqp0Bv`2TeB_7Q>y>Ny#p8iKNT2;}k4YcG^&@K18S|9uVE@V{*NUvU6p@PD6{?8LB8 zfPKI1)>G{e$i4SxbM&ZIRX~1Z35xXF-d{CLr3P=uzU!%Oa@Y3Qngv(6Q$fA-O8{eD z_ut5UmadCzXhm4$C1^?r6Hh%F!h;FV$6d}=Y^Nz437zO=lR}V^FdQ>}(|=+}Y-qS5 zkE=OW|L^y$eCXYSece%^<{%;@VE%1*ajFm9^cZg}mH?_}z>n!0P*`0+TPc@*abJibZY?f2Rp5|R*xSzQm|0)L3KuXCA@ zVM0Q(Nc?t20gR&p)AAC6T&$xSMrw#qRD$^LMmpZ-irg&tNjMVocOi55>VkQ74W=lE zw2biYMD=ywrHE|UL%5o$|5Cd)!?#NtjR60b6=4LFpcd0UBn0^__;`r25>8$GJF9Q! z`&N;g7o%ZYa)0NDbMPl?m%zEeGX8?HRjM(mib&Nv*IG&x+us4BX+9!g5kPM5zms}> z6v)k#6kd;QVTH7`|1xv@QLnXyZZ7H8?Z2N~kFv+Cr+V!{8GjkVW6SltTwNe=q~@6q zpdn+cXVwrfQiQJdDvqlS!KIo-x<&N&LzatIagAyM<1S`(+(OlmmdHFagvvt`ZqAyB ze^1Ka`~A4<4jo!#6Ol)HEWkfkGA2Pru2Dzq8%7Qc2(@@z+itM$+~nkgG9RY%z>y=W zEZ2`0Td}Dak(>9*g6*@aziKa&il|0Bh9I{WgCPet))w<{BI2gJgfr&siFcTCD-lgy zRYg0bh>uP|eaR!9kL%1+ba>-*;I%aK+f`SUTTiv=0cHYDL{5#%_J^09spa{bx7+!d zGP%SnX&upQkpZ%ywN<&+%iT#j%py>wZ23r&bM%vJtEAuLD{+O~UDw|D9dM~R2N5g?IBS(SrM>Xh^4mWvWzrDq{ z_3oKTjiJrY`goaEg>wcEq%9w7^r$31qbLg(2a>~Dmn3SIW3ss#mp>wFSWD>tjdLMz zLbO|rO2ya7nZOx;&{? z7&FbL!8{jPUXveqKgHy}*P23RabBpX2lW=jN({sTivCt;;=eKZUj9(sUzow0F7qV^ z^@UyC))tA17&QnlAv6*pn_Xi3ODTl4rzKccpCC(DI*79eHTgx>w=Zz6SWpN65 zV^#Bw%p2xTy|zy@-|LDe`RJ_s?FAP&$lAJI<3u5M#mAe`aj(7|J+*jtf) zK7dgl?$Geu)N_GBOPwF3L=<0<*Su+XnaSAiS?b8}Ortl~DJp{S`p`H=#Qeb0)$Eh( z|4eCKi^hx#y??({({ksxicWaE>+IEgtR4*q0og)PzM1pn-wdrSz8CaXB>W6+a9`d4 zn(U-rOAJ|YYvhduoj+_Aj~bPaJ#WMv#e51Zfp5OcP}2lVupN84A=uB);G(CV_1#>Q zO#3$eSoRR&ItPMW9a!d#m~8pO$fJU>;m-|)-EeJnHFoO>9SZA-dl7Q0J#iJBGhz&G+>GGwCep3vBd^(^kwcq!FzUxwO-Na>F7ZrB)O z_DLywl0<*|8DW;uUkwwjRB|0p9`$r}gk?^%_3No754X=2{V_7NW3bve6WgbPfEej3 ze|88XpS*A7ei0F#>(8+I1bWsk>J&6hc}?6#l1H87`+pWm8yAf?Q?BxRvf5jCuJu^?P2-c=H*%A~ES=mNF?O2!rw81WZN!Q-Cfy>j2`B zug*It58^aM!_TgibH>%7x zI=_oX_!YD*5^Hk+W^2F6kxFJC)qeiwjzWmVEdWY3PQ48P1tOf}N-ITN>Efz;#V-ZF zVvvF24|@hA0dj@;6~#+dk$+5-G&PAl_flOx*AzIV5y(CFp0(6QADcYe#q1xda+j1N zxr2)^izVp8%Ehx^e0LU-^ z0JF%|5rjZnPXvxFOiGme>d^?`hxj*d>P-UKp6Z@eI+wJbh&aETyVoR}l^$J~uUV|X zFnQm8R~l!mW(emwOVd4;Cs>JMtr210jxv>RvIKZE=s#V5=QGxpD20Y@4c3RZ6|8Ui z^M@|3n)pfoIid5mh?e^^)!X>RDTt%=#7C58>glXxmmcwbR~zKYo8QO}!vW!(kqA~z5B#`k;Ayh6SBEb*T!1AC8BC`KyrZoq1jSyd2rjRD9FQbtTMX?vybk~QIrrK z@3Ax`za%xrcjtW$9aWCQts~_3M{A27nMFq&)#j?nJ{RK-ML)XhF47Lo5dEvqu{UNQ z=Z8#wt6UU&RmOMAFyt!Cgn=%Ia41rrdpz3NaoK1v(kTI3GH*^({LW5C2q5IN5kp{@ zU%|9nI=3tr5s}D4fS*~2T{2W18TKqQ;b#-Zec2^NQ!{N?@OK2`j?g80smYoJw~ikZ z^)ztt`FF$U!&p+Tudcg#*u&AGr~BKit=IvPzSR{kVpcr7Q%>HXe!W6S)A%K1#0%C> zFlxjal)9p{bFKx%@z)AowVorjkkH%xs2=#-3PM@ z&dF|A%eRaTA_v#8lQnz2VSck-W)w#jRC~rj!$0qi4D9F<*ii2p#7(=hCvDu%B2~8# z15P5zdO*jcvQj?%-{OFD2B8!0v6)lD>48X`vX?;PU1)Tu* zc^;Ol*{<+z*ra0MIwJA!(iUA3Q; zjLaQ4z|jvB?q^Zaxbsba7|J-w4m}t6kLC*0k`=!Ihp>09o7s$TkvUX=l-) z|9BAjtU%%GVyURvtk?l8vhLe$qnR6mDWfS*>U*Dz1PVRomaCE&Eie8?=JuM!vMC5N z4_UFszSnih-xwO2936bz>+rfOe?t1QzD$&Ag$j1bw?1hLnORw*q`3B&E;BJl9%t?< zmPVG`c2*LzWp7+~?9|nGGHyOcy<5WWJXvx$429<00h_m3g6r%bjFn;z#um|sF0)f! zNtjOx9U=MTjT$N`29cC42w+(6>8}SNKgb^nqbE`#Gz&YcBtBzLd;|1ocHeY5 zp`HTR7oogLTt!!m^K4q9JvQr5UYKteKX=n}DiufU`xRm~6ujIlhlXq(mdxJ$%tz3; z`FL`BxTeS9QQ~W*f2bLW(9u~ zf`>j^2a(#G3WBrIiODa<{7}2tr_!A&!3jQiP?c-fcd!-3Sbg3V_8DsyKLUFNyaiNH z&!s;0DD$C#OHD}3L=~pZ1Ie^{EyKU~Vh9{=`u$Pa^{ylJh2*M}gm`8_ib#uhSNjP0 zwSaqmD${GG^P@VcoSN&@2)=qc(9+OkSo~o6yJ^0oX>B3=472R~+?wlO4{C4a8i`tT zOy|q9^tLi+5LxCRo;-63wh<6}>Ob0b!R#)3fTnqb-&<42UI{qNLXSGfYkn-0I9=pGpM(ung(VWi;Xfa-{mFhzX=3CS$~3d%vh!?>~bBq@9O*pq_i zX*BL-?a%ggitU8%MZ8}Zr~)ET7~`~K67J_JHo1{2LX#yo>DvQc8@NHO#LTJiXH+WL z5!vUNl6_~+xue6KU9oU$Q>toICrZeUa@aVGnnkGT433#7rDIHUHlr9XIH*>v_H|8i z=SD*|6LG;4~;5GR^>G$>< zLz`^gp6Ea{Zn(~Rdepg7RXPnm9$lEqris&6U93Wjbe|dvNq4V4elF6SrYc2b)F9cgIO#C( zf%QbWi0k#$X9V%!xU()JH2KGdR|(OCv0@xn7F9-xWsW_?)I7lIcd-V(Je-ew8=0Tq zmvenlG%dHdvp+T8W#hff+GUerPsOCn%3lNt;FOdEJk-N`*7q|=??qO9E4d+?ob~lK z#=Lm=>FA{ozULEFW-X@$t(IDl5(xt?Fwj1v7Vhbfmk&1gIXsZlzwEjrW3}F^O>6kuJ{m#`-x>*G8a^n?J`+4@w{HBqbxn2)- zdinMI9tzz^r`4A1*qpWljVRMCy|u}DvJ8XiCmV|u(Y-r;pXDGnaDYmlTEvK5N++4| zXZoB3tKVnkop(f4M59iv*<1Mx>Rigri_eql=>wS-K*obmX&X@3*S+&@C58h|#~=3d zV`P5Bu?~hyUN-g=k*Z?gBI8`HA!@W-7w)#BnM^9;0$|sEp&+y|hjLvniTW$+i|eaW zKjVebJA#UBK_>Ow3h_BM&f*odxnMp&M^3C zfs~w8W#t$_^TyjB$6g2BY-)=a1yw6?1bVlk31uhvEt6(A$=IUh{I^U|6q`GAh4p|+#fHmg8 z@8l`%z_}e}%g`jh@>`P}rQSJa4JbDuEsNRTdCUKcKs^;CjlO=AF$(D48d8u}BIKXB zec*$L^fRYvd`Jf}ZHx=!7k2-qFMi)H{%*<^22*dA!`)5Ifc(CTy?wNVybyXX%nwnN z9_sk7qh%&HH@(!VUBSxiAbMBwd_d(ooj2QtgVnjQO`EV-PiV=*=Y?hzM#*;3 zj;)*bITplEM=yvt;AO^TVvAXS5oYs=jeOfv&FS0V_`RjU4yEjV=Haee-Y>8&kBnfwIM z!Ee@s6aw|N*S;~;@8ZbDYg*_dK?3v92gQ94cb~9wbOn2#-1$sxhRwn)SyRcftL9 z=oXCCm{1M&AV&gum$MD@-SbDxdsYq~FfDN2>l-piKCJcThRRs*UvDM&Q9eH^ZgVRv zL3f^%FLq)od>awONs4W|sXH=ge6DKb9k4c#RjQzybWEnO;ErG>pZeCa818bJXqE2RKIFpZB_is*>p5 z9*7rIGgkcN0+7Elj|rP(!(d9NGG{e}MF6Kc*%o*R#GZF_Qz+7JldlHk3Km_8v?#5( zfdJ~JUD^E9b0At;IYIEG+VS*{&|B%HPA$=AGw&CZp20)TcH6~&>#q_7Num~Ih(GIs zI1Zf4=hs8!<$2UfT!HE(8ibCe8l04k`2hxrKD0nbsPg*=dG1{w&;}Mf<=wp(`wu#- zE#SEavr0Ipde#7)-?Z7;BCf%RDh0x5yfi|rk;X*~KDh0a{4TQI?-C`;9XdoQh!O^0 zZsm#fcJWFCSz;#C05bj}w}&n0Pz`%bbGgY&NQtc1xyT#blEOV|QHUlYL-KHszM^lVL*$+&h_#|*b zeHAD9C9Jw_q|LAQ;Qu5&z8KaYlJ2~W7TgrBYGBYRRh%v5R$9m z(}QA53(pj(FN z`JJ*Cmo8hLZ3jsukpH*Zc={Ku%ur!nUS*3F-=%OgR_q3woN94D^p|~FsrO#^;C7FF z3$l1zxmrwERBpaOV;|LI9+N;q$-GYg(+iM~uW2=V?~?V#`de_{WMZ7l^-cT8iMR## zo0qPvgBww3|4o=H%El_8H>+@riFS5`nI`o=ZT%6tiIUPd1k4eSf+9s#IDMnn!(RTy zXsidPxbGavV`u%CW~6~5=? zZwS!+`L9>S$W8?|;@#hIA348ePlD9bKq!q0)VCh!AUxABjJ@<_)p2G;c;ix99c!Nr zu1!a7L74DI>T@*nugUDqD}#QJ6Yzh4EfY+x8=XB=^b#revM5BJcqv&=XjDdjr=Zwf z*iJbe+U|?;q2nXpZ7+CKUwlaPZ%yJv=2h8>bmn{W3LzC!cGq0CXWQn^AFEos)1K1F zdDm)Myjq8wEPXpmq5J||vZ5a#MbO;H#aATrvUy`4*L2Ro!2tBI@ETn6H2eak=_Y^|bM73Z3o7R9oxc#Qc@-nUYiwcTR8Imw z>E6NK{_Kby@O*8TE_aYCLz6`e7I^y9UAw=dEGjTR3pFkCs&~n=WyJiCi=`_0cDqpw z$PnVA6$y+c*NOe7Nf0#20Y1Cc+~W|T_Dj!aMCb?#Sk-Vn4)!?sN}E1tR}*J2`sNN+ zKUH5g&k=hY#j`24VOjH;H${I*n)kvM84xOK=Itw<`9f7*AAxqNJY!aj%0JVfQ}r^p zu6jZ1nrSelFg}dlZfBO-=bRh=a!LWWfB(&@L=-+k@C0N(MkaMQffC*;Ht zj@%1-&_S%vS!&jPhKN3?X$+Mky!myxkAYBaeH@Ad>{zqYd6?|Okm&c_nJ~^6KF!I* zI1}UEd~clgIrdi9?bkZ-`?~>=FyH4uW_>DPm|w!PQ7#Rfn`(c?WOAsSMNKKTRrAF( zFS!8Vun^HUBs-#CG5 zis*3P+{&LN0VUzSHsj}1SH9k=eJc#a$ON=r`A*!RM&iW635}LIRfw2e53x-ky6zM$ z#Qfl58BneFU~#H4kC8J=>6m;IIGI{|VP~ncXj+MKQwMbwOp!5spQ+7p+MSnc&Zo|< z%*)s+eB!-9xX%*IGjrq8m-^&p!p+S@qt6@Hz?Mr9lQJ5j#JLQ zS0(IPJ!N@qbeZjvYUyV+%rr9#gS3(2tJAu4z<*2o0nKQ zR%bRuZdYTNJK}{hXXzE#lyac~O)}+9!q|nNoD>k?EIAl5p3yO;N}ZW--}H z=aKC3B8j9@!GeBH)D75L6HsUK9sBdcDZ}S!y%>QcX@s^O^&T@u5c_7hrLew~*jJA- zZh>wtoqBGcaZcws|J8d9)i8WtihZO*RdmaGNXSIO#JLUSmaY&u3O7u*4w0X$WXWQyo3Ox?JoUeH1BH5L-^H5tAgf&Kq1UY)$ew9T=sxole1osKKE*9@{st~bi?p(R zdhzH6x%9Pr@!q3<6U+E!j+)?;A5KO)G{^#aL5ey)vDOEA?Cw zGdlczCZT$br0w4o{8w^CX$iAH78%uX+7xH8i+v|3e}6`9qL(|GHa{29A)9Yq~k*6AuUW zjhX$_9i*>UAur2SLS#=8T}Gzt#k_6*$Q0g}koTz)e$&oC|H%u1* zQtvEpbu~mSDK@K!<89t2diVE5n0;VX@ZkMwb2mkQaeUMgwx;=a!{D=<+zkf~=bDJD z<`HSK^tX|B?qH9%UWpn`7LN@R$Q4(f-;O%nT5g^oJk%LPmV*?m25@8_0BMY?$Jwwp zOB4#eroYp`FC>h!Su&NcF^ztyE6g?=L{ zk2z_uZ`S*6{_tT>qSRs;HBWr(lgBoZi!<>>Z&k6+;C!zq(alN2J}39EZ^RQLA%EZ) z$gQ706gVZ-I&0sZxGUu=HWj)RDK$0bgD3!+j{7mE7Q{l@S50a_P=H3_5?bpSL+MM3 z!w-w%r5wa69kI5EK)F&*J*!hW6m`SV@qXbt)mF_p@UAiykn3kIjtnZ1Pq|tKx;VLq z$8m09Rp#6xU#%`W*<*@v-oYGh+>?b5kLrKnnqTF?xvta~g!`gvxvKNwv+H%eE1iL1 zzAR{;cgayCDt5wGKW&I8fxZMNdczi5A z_BdXRZ~DB#1ilh%RS?uVkUnW5=d4GjRY>vtx?;a{T)uA&cc|9(I=p)5 zgs2p($&eg?v0NYO2n}9a40bK!Y#j8UDC5QhSxS)d_+VfdoQ3fCj%+DhFIUQFT^0pg zEaXP>neZJ{N%g#N+-4q%SKx$pOn$x5AjFOnI}YE>?LR7_EPuY+Sf!Am&3v})clx_| zy>FkM3(5iN>uWJA+gUHAjrG_%&yUZiH_Lod8%?;@Nb|{X)qjviyYb7aiKFQcWZ{~+ zTXiC|=~no1>Z7T`sEWIu>~DfU{k*GVB>}H`<^MhY(r-xvc^iBq6-sB`yC%fbp@@MI z9fVRF*1%74UVJ0tQnS-j1B&ekHrksu+yM*w;l=3Q?a3WD6f zT4oNi(ve}oA_g4ihReEV{Ko@q>HQ`{xI6Ta&s}4DGnxnp+1Zlb7^sQh0TT%5aK$ z!#URd0wfDO^eya4)QW4k^T!i1P8X;3V3RNHHgKJ43x^~kZ{x9H1zEJ!?zJml>f+8d}I8r%4JoRydYhH7UDbEE z!8pw40dcr*SNriYwwq;*6g-|&p*RZwkueot`-=Bp_TZk@-ztPppKABb zo^dEow6%*Xv8Pmy9$OIiy~cYlK2$id^CZxHV)W39;@Nth0m9Dep5lVLTad2N$#2Kz zwnRsbr2*`8<7eQx;7d^6KI2net4-u2?)exh#a~ zYvLdD1Br(|5J*}1Xi#&o{1Eo#Qj8)yP&JMxKPcxK3#7wR-g&t?Js244ZK4eAZGLFE zbmV-27_~sz291~xTI_U$jII{6WvZpJUAQjkuFYS=UUE;UdDKpIUwdrO#E}?O=rkH> z;1kBH^!Q?Qb5P@LdyNy9$g-RPW~uhoM&^OR^Fp|H@>9&|SDoyWf9g%HWE@_k)QVrO zN^}jZf~Da7yhU`&KnIPE!>2+&j@R5w0alt9SF*=didcSU;YwKX4u>yI3I70cvZYL1 zy4H{7R*cyQ4fa+8}C`iUt6|pkUvn)HUF{VG@ZzCK(U=AH+UE~ z$u74NsO3WN*NqKI3HT?_k+VUi_;W+}YuBG|os`WR>Nb!o>~@z|5S3SgzZ)_*mQq%u z_~6!KCnPjxz?$#_5kHl`&1zBJC4y*bUpDrKy4|oWDD30`44ZRZftSH)j zsV5NI5$-FZ3FkSiYPogd^v9ft2k#i2r3jOqKAwHEGZ5Oy7;<;~c>lTz8SyY-P2H#v zDf=kSgxGV#Huu^bL)-*;%|G?f-E*S`S0<`W;9iw3>+RcE%jIw_Bz^$5mv)w4r zu-Y-Vp^A%Z>qR6<7uncmEx#}%tD6m?ot5a_6T`r8i|xge65uN} zQ){x7TtI_h>IyJ})P~_6OItE1 z+w&jlEy%X?DVKhaVgju`n!Q|{;rY;1V_-FG3FNL(3nlDC$kIz=+JP#|Pcee^e(S+n z4e$d|0y(RE%2wzaevBL!Taox~OOhqI$KFF<$-!yH`ntG2O%y4mF-Ge=r)BmQC1KVj z!0(;>p&F$Blu$a^9_#DhxZd~7Qy12~eX5zK3O*C7_B~t2Qdn~-NdhL#>1c$WU|NI% zS5cX!*g##!nKrKw>AWtGhj4V)&&*(_k{UmvxK zY+59f_6dO_`mI0RHOV%X;!tf{80lHS+?k6h(_CG38!HX>F|i9NIR3fi+FuXCn7=Nn zpLoH~dP|BhTqSvGV?OzxdgRo>h;0R?%6`z()|h6~g{lNPsz=LgCXu8*zBp;QrU#Sx zFwe|W${#XONEVHA+?IVsT$+gt=z6dboHVsL{ZDXeS5+S(b$_Z@lT4Cozv`FiG-q@C z_l!CZ(#3;vXdHCuzc%cz8r7n!n>Psj6|{+Y`sA%s_Baco0`hk-NjLmm2wZ=E0C;~Q zhPn&Np940Y%eWTGniFj!Y(duOjDyDlNY26na zmGEo=w*8*jtZcO@9nVsS=CXZS>(I$x;N=cyoMA2tv4ZaX((K=TD(tLYX59 zt8N)HTh*kLr28-k)kAxC!Au$amTwDDPs-hwgV57#!M=gt=J*NfkoI;W#7cgkHWv*t zTv_rOAG?B*vc-RBW|)r;64W0DbC$uPqgLclbij$P{OAyF7TcCb)n+x%e^yVvG!!Ze zwQG5CH9rL50dDZg^D(hIE&SGM{g^+jjkd*aJej^1n^<#GWk8R{={ap}$gjVT%jp{%7kX&21NccF*}U?Y+#!uK1Z-(J+yfT7IA z*J&RTZqP%?l}+k_gwV4&Uj7~~G&wp}VX_;NQPD?d=5@q(e0lZKXt@dt@q zP_tf&H_7F37}T0~hbBw5TJ*|>cBzmt>Re2nVgY<8tU-AYO;&W7H5Ko(BIxf__7)O*kM<+vgwN?s~=r zSb{Rxt|Gc(Dfl*a(KY8M4U}9poA9%gs=8UMF*DhjLK^}bJ3XSeYf074C55`hiv4`} zy9uvF0s_u%=&CkJVtrP}pyo<=m+zlGH;S>gLwblj8!V?-E&8bBrDrKOq(0;xAyNwZ zP%c2BAXl*jRQQ*qKyFTq8Vpt5HRyQqZ7u+{1M0O)lU_ugk#%${u;#frdyF_4VU{-7 z((y-C8qhgjVlc`8fb|^!R!WtALHQ_S!sgrEk4?_HB6zC0ADJL2zy5FJo)!DI6#7*`j0&PlQ72R$Z|MX|F+=HREjh`Hq zyq+PN`Q4riF}ATGq1K(8z@&r=aE)fg!dsHaYd;}1jHP1L;+hylU&_%lgZix~Y z6j5R#xfvMIaU_lNhOyFtBWm5FwVX@M|J+PbdJ|$?ysVd89X(25^#sq8;TuCeeuG8 z9~=qliI9QH86SzMxYweqVsi~}xL6y}`wNGZak{HQ5Tzkgb71$@654Aw_VF)j=)P(= zNaT;-A63^gafMkWYl?;YCF)soH6MY<;+hK6m%wjjdEY-Cy{CaFRlf7GCgtG>)IlFl z7RSE~GhqPe!s?M;rdIAUp+h-HU^NHe*tX#NRFlKei$aXoLgN;pQt8ueANdYi%GCv! zdNjD?(&<5OiA(h@0G%pGpA3O+wV@uuWG(>r#*JSXv3V0lYT$()6&jhk{9Una9VWsH z3gMjzIr~*R>9>xdz5+DvEJ@u5+!U#T)T044>VtQ&legq{PHKc!mtjgL9ua(@S)k_56Auins-CCS1(O&-XO*Nn4*@ zBWaeB`%+oYVR1r03Xy{1PM7gJAHHrI(k7`EidLYwta0c&n<{yByApXz;O1Kw=R&TO zb&_YGDWUjC;vqRDo-fQ#|P|5&HY$At1NKLvlS*teLtYW2I131=f7(#{q7gBM!yq>O3KPVq!0xlg^GIV zZRWviU(*;VXIDN~%|s0e)b2{xD(DgE_ka^4newbl_^r;5f_Y{VAn(y#kHT(Po~q9* z@={;RNL4tXZHjk#cpqMHn5ujcQtx}8+lejt46538*wGrsGlyT>{`6A7@nntkOZc+* z$K#Q)!aBHA=S92YF`Lrb5T#8AwU@*+<(NnMc|F*c{4>}tuKr6S;A7=eF-i~>cS=U> zYkLIMeo(JhZ3oVGeW1Yz3EjQ;kP zZyIUyK5hifM*48S&0C5r)?82w=nApbqid@(lqEs32;F#b%0I+x;%r6;*}iL=R0ShK zFZYFhTBjcqk*{yODf}KT@o|`Lh0}i$rk!v6N60_*_cX;W^c8pnwhT)@1|CslTVSk? zN|}dAvXr7&B@SeERe&A`W;9CBNVZGS#Z}w^OFW>sKfDqMK0`( zEFimVdmRdOdu8IFgsB@5_dt`@HBejWG$;WAmG{HB z5=vzX|9oGS^6QF*Lo633^=eI%AfCuUq#qDfJaATOWRcEl6N@P3C2TZg#6M$zlSmKi z7ft9*+SxBRf_fQr>^1fiOsV-I9cUl)&Y?DZ+t{euS*-D{S4$Fe=GOb^FHKt1&JgQs z&`{USxga#VIS$e;P#*zkVCa1(Zm)J+HQ!7J9q5F+DB4XtF0{SrVbB@(<5Ai*v*@kb z@%G+C-fK#RK$X_slkbB&v95hJuw?QEBmGJL9mUSz9T_8 zs3?`ifh%SmoI#UEq6ygl=>>SE2t_RM+SIRWguw+raV2?r1U*U{ATj~XDOQ#b-17oW zDK^CJfMSpnXf3X#4oa&*TI>f-S7$4JWj3_4Sp zTlU`Ojj&99QqMho^}nSC^m)hYSU?s9<^D!s0H*1m2skmSYLr_sOrXnjweY* zSGB^8JqINM;K%XyRu?w~PzGdsSvPj2a-2iPKbp72-JAt2EBX8c=Q7iXbLH@>ef&Uq za*pq8O{`*)GIdq$h~+IHlxXckfrj*{>&S~&r(q_S`a;F@S6#6OCY)bb1R>O!{#8Ro zP5YDJS1s3}V)~_)Esb?GZFc3};bCz31*^WwR}0%7b9P~X`efP=F3Qo*tMNSnmwWM7eqS;ywUk}R24hi* zzuOm3%7x5>fwNZ#k`r=__>~eRMDz!t7ljEwF@|JWpcf06{jQ&;rF6}gyJw(ZFFCB1 z(5C|@2|qPdmv1*#5cKitxmb^=*Y+$b2y($PbU70&_T1cL;!Xl;-Km<(gmOL^<&*aD z0vaZbRhM&yFJ$Ru+Wb6HdEjHhN!Bz`!RI21&(^fsGSB*5;+cSy-6=mjSGDd*Vi zOA(rDV}&D0us%A#$!tfPqd5%0(!i=we+i<)!oZ3MhzTcXnX!G>k(8Trp~;0ginQ(^ zuq&Q}yC|JB`U}O)%Sw_&NF|50N>qt?m6_k;CX#4;(ftyz^iamo!JW-6(9#D@T>xDs zs36R*?-YGZDr1lgXkAjxc|**aDoo-ERjz+#CRvJAqPZ5M%ADn7Y0}uV!gJ&@tBdj& zqW~T@@Qm<-mrPhl3pxZ}hujge;U-av#ILLW2{Nx+&KIje6POu=l3!ED^vb9Tj3cL^ zy8XX6Bdwj{7vLVSoJeT$jD-|U!|6JglkaT|kW+-x^1aiYMIt3FFj2vRPVr&;b+XDS zPu1lQks{!nGw{oPd_(+oSwfT9o|_P|D#I%cxYtIj0=irNfBS8SuaXuwAgjAi1#-h# z_BLJgQ~_)fK-%DD_-j)yk-#^)GOx}x{Lr*ha=CkLP7jpPw3{Gz9Lln;C2Rw_r3s`V*x+!0m8hmZLoc* z@q4s912*~S!$nt%bUR@BA-uypr;VvQby15ofEW14?8h`)!HYkXV&!COUuuK?n$H*Z zP#h&irsBv+lh7y_8uur7|MS|sEQo%f`ID$&T6=r`?$oeZ(2z*-2=nXAxnf%S6@$&- zPZG;h#uHD@t~dy4*DPTzRW-ClsM!fxRR@OaRd zK)B+tC3EZUutj2nIn#k}M?U(yzv6z32+Z|{AxtS1PXHX#ky|Wlv1{TH`Ne9&yb4V zgGMf>0mZdya<S%@d5lJm#en{4i z2H#LuwCnqN_!@Nr0jdGmAfO;hd~ZRM75<6uF$2H}Bnh=0-uM9<2;&)Ynjye)u_9Wf=b+ix)0amT-a1fZUOZYi_RXef%$XRjK0D`KfKi;%# zw10?dWlzv`*(cOr|CAs$&;~)yom@yL@@jXei@m}k%Q2g-V^vGdE89IwIg=CCdy2oR zi1I-XDymf`*4FpIF-*pqzH7Ckj{T?o0jA+*ZrakP+ZK-r+7$AXFd(Gk7*a|mP4{5T z^yi7>@Aju%$n~T@^&Z-ffL4G!O5Nz%%<>P|;El_ESzQ_X{u6zcDu@2L%gvmYFvv#k5jgSL|#^Dx6vMg1_z~4LfdI>lz^a>7@6_o}R zl5|U+iGKL8mVH>gp}NV!AfOZj_ED+g8Gr61F#jl6$%|`tSExJGEQNL{UO{cWLWCwi z5%A+c+UpaS{_L-w%O4~G%y`+z_~a%i53|GalknEvs=RQ7aMym?^#@7((sj}}7#uGR z(2d3S2_AXHCQfrA3|ZIzJI5FQ!sP$kG5_~NL-fEC0z&ZrQAYkx`FN+|`*YW{MBP|B z;WQ_%q1!idy-x=lXP9^|H%I8_Itj$7U`=U`Rj1hL2jh`T4RNs;;jMe zsapismp?ZUvC}X85VsRePA2i`&y?RJs#?pw6f)6KTe$x0?d5JeYbmF zx9pq!do#X7vKxl|GC43zllf6DrKx2T=zZC9;W4!`;3bI5Ms++>a-oHd55|T3=<|ns zTPr_%%6QY_FkO%2CfK^<6HBKj9)2ZNG9=r}f5d<@@22dG+Y=Ur+-F??# z%1h_BH?tkIVEKo&Wg;*v0Mh0R;rgYK^us(^gY>OPbgHkUZ=XENEt>csFMpP}rx(vI z|3B?r`9GBJ*T2VJiEl~S(?ZC;FAWn#5h2^qFqWY#X{?#CjD!y*l_eoY3}dP65~HzB zg~&QZDEsasYshnrKHuku=O1`p&-42F@t*rS*SXF)_jR4~zRo%BQt+TSyypVZK)*X~ zgI)I=`l5kZ1@@Qws6WwUQi&%_xAvB1tkf@ZCyyy`Y-zb(j|`$} z=4K6*^hHRiWX>1Tt><5J_}mLhe0FxTWP)Cv>C85M=p0}B&WWFesy)~u@*E*DdG}nv zn8a^c<%Cu@0e(UyP}k983i4G3BDXp8)NVa$z^0r2dMXtfP;@NX?YhSe=<6jSEz7uY z`L}!{m(ZgG@2s6qFWhG$>YU=W3;LLeaV$8YEBnsT>R{&APjMqV@3U5A>Y4{P6x`(h7SssH(;;) zUiD{}Sw5lb+B*mdB_iTOJlGKLJp75{+BUYV>?#L;4o$P!lD+S)Y=}Ci4bWqb^?gNO1$)x<`L{dNGn!B4OQ5s@mt$*5c(+?(;fLNfT)*>vE;r*N6V;* zL-~U-odN{Z;i(d1lQ5RIxsx^ARskY;`g-%)O##YKu|E^Ma{Oa{CBk4e5?6fK(#S7n zT?^7W(djG*X7@u~i&U7xouVH8esA0kv$&+JtDS3u5ve%yPr&@s_ ziS-)Ps?^I5*|S7~N0kc_iG{M;C{RQL*75>r)z^I&^2M3dMS9aSB3@}NYy9~|7hF@U zuga9%-979==zu|Xr#qc_j@fdfv*K@!jOdKAZp}C7^bT;DFrmSoUNn0$nF}hWzZ6v0 z{KO&}jCsON0KsO7Y=kdi9L}*iCGX6(@o^IN&%;B6aTVTny)!~x=cRsqw>u+#2ck!1 zR-E)uS5n`Nr&XU_>b0?3GQ3I>5%wFZ@AnK|3Tb(?dqewJc6Fiu?AO^yTqK|jAo{gd&;5@qs;Kcbw1~N)9UpH={}!cIBlN$y;bDQo~P_QodyWh z%+P09=^)EsmJIL2OOgg@##KvP^vcjHT-QC2Qh@>|0=zO#KBzu6^3qGQ4wtg2qaLR) zLF`&@FADUvhR_$+I-P|pxJnlcC3j;0Y=GM0C`vF`i z)svmhmKB`Zp|ex_oDnrb&FwQKp;@|Ls;1uDhkuiP=@mVj@>fW~*lJ1}41J0TZj}_W zq!6>?{WhSKuhSmhx@4Li{*boeSj=4O=07`yVI^9k%TkL zXRmmF4tB@w$Lm$LLvLNdZ2+NS--^w}iSx9k!*;~+UnM!5?vE;#r_3<+0%};aKFDE) z`osa1XY9fa=R_mo8(5?sW836o;6L9xrvz`l1Qnxu6#Blb4c`kwoUFRFOh&Yr*#VYI%h0MjEKWm}5yj;ysTs{}bD;k|~t@^T*9pdk)GONg~ z93yW_XXfIg;UX2OHtq*3h;IC%`!EM2f?H;?x(*XQ0c$S$=^~?2UZP?e6YAN=jdUsK zOygK7SbkJ&$f%6-I5cH;wl@f299nfoVy=ne`qHFQ3XTU@4xp)mD-9Ge%@Rx!It@C+ zI1sHfa}5_sz|%(Tu;8T6c8?5p@e}n8u-UkRKt~T2od3t3*W&Jw&3#0?0Dn4jg=Xxc zx=}gWm;dSojK(wZz>v&8tOk_~9wlGzXkztjj&LpNdtYh?xr1X!m2Hw*M59}msV;iT zA?{<4x;NTP)piabdRcHit~mzb)}PKET>V8#EUYfPeaGPPFKS8_qgu59C<=*GbyQPl zw+G%e8!7R_pwi}!$m@eP?WgMm$=1mVS@4xTwlJ7|D{U=I-uz-(FY&x;CYSFeJ%frI zlC>AwQ80oS@J^>f12Pab3^)%TvWHkgi5i!FbpLR; zJS|~TSK)UcIa~L&AWIcwVFb#Y`maAVUyurJr+|}WBYNa0!F}HfIRL0*~i^7lyn>V1_F1G8wjEL@8O>ER@R$Yn*9SWj%9&B#dIGS9jroL85;;Ri{yYH3q}p;u;y#! zo>|~+PrL%5&NL9oh}|f;C#?;hFuX`gJg@^=CRGDk=phNIRrelg3cPy~^vGj4(?flL z6L0MVJKyE`hy-sKD3;A!6^4SXueAr*8g6b-94@&F%si(Zc82IA!QSu1PYP46M=gSk z4XP8sc2|%6w$i3>NYCf9Q(rxAj+v$U6y=OWOINcJjtg4gmgl#CP$2>%swz(ZX{bjD zWl08p_F*70n@{R@K|=MszsEGFj2r`S9$`H0h52iJJ;7vV2*Jg8#h7OXWkq-GPVn|> z;DjI<06-FYReC)$r99Ob;y4WwA_=Q|`txKQ;xLH#jWJc-dD5BTx?=!NL*NzT z!tHQK!$31Z;ObLdTMh*qOL@`;%s(~{S^{W@aRpIaZDujkOGe`G6L28Lc?L)GH*_hj z`vq%nd_omWh5baktse5igU#L1{ z0|cP8M^o@3**be-Y(QyI63h+!Ye-1{4@Y4~vi8=DHULC#t2df|oZLUKdz#583utDJ z(SC@lP-AoLRfG1F#^zB_ma7Mr9Sto1D({*e@T?$cfFYblLE3b&9Pe6lwE0K$f)pr{ zRRxojH~!(}_#a;E7>Zuw`)^)U056PktFI&t;kD8RZ4Kb}F?7U;Euiv_;>6|ZhER=v zgd+%$0ECvxnc*Qzx*Ghk899CueD0d!Ohdfh?gKmgGp`Je+`qB)x{ zXiZ2s&M4lmi5ndoxE#6TCm1dU-edss<--!X6ahdoBZwQ2TMq5Bf*$EI^pc;`&@$*ADb0q_FhT$EY+T2`s{Y;#I0(&nO>U1@@n}f2+*FusWk=e{qV~*4~~8o&(QNj#O(w&pU1;8BtwWEOP#; znz{}9-sbtCdWdD?D!D&BSS!C+^42$Enb?p4gm4Gkk~i7!|lJV$Uy*lFcXYWBP{NHC+oi`Dj5meT5AFqK;+uQ9amim6w#dp~BTUz+zNRQ>=FkHKh+ zSMsGZOOwD7O|F$Ni^DX^uk3){acCJJH$SK0BLtFi)=)yOQ>&selYml>8@gHsLWzR2 z^_lB{(O?c!F@_^QhR ziJ|#rTh+*f2fQm`_Eo?}P2aje)hJD2w1yjz6P zH@QiPM(xckYgdZvkn!?dw#o#KwLNM9<;i@9lJaw_HBQ^FQW+2yj z=4*iP&F4wx+Tz=^ff?wJXV${s#M3GVS#?=Re!Hotn)o*{X~LyvtGclK8}^F6OQOm) z8<7=w<0ofxDIu*lz>C3d+Tg`U{%xH`LR|j6^54(%UE^wk{0q!P_?-Cfqo z!pQV**@A-|lNsOtCHq3Bbm5uWte8|5jG;a&%hoQ!H1y4pA5isMmhre#l=C^Y+j}>* zqkej@Y_9R<71`}WJ7&zFPSo=PkyhX?5G>T}$lsBi2-`OO3E#|fbz-exJ-Tzpxc@GN zq7f&$x;Pf?P}}_b-|q_rr#B7Zx?|xHeuOHOtfB6-4r;9cjnkmSpEi6*8P&GKHgNk8 zZ%~+Zsr8T@&^BWlO?Ra3&##v)=5~aYmWAJjjgP@Lt|(+|e(|R%AT@V1Lel+;P$1o{7-Z_rPJI;}lVEDQcw!z-HDCnyi#m%if{oI5n?#KvYSWv!;32MsqG4jL`#fhY@wN=LGc z*tLgRgTU*1;q+qpYj?@1*yr!_&Bm%R|X zCn5w3-62(DDQPu^{ir|+Y^o^c@@=RRKqjhuMCPTh)Jo3UW$7tW_N^C&yilb+c+P1# z4O@y5@4=_OyAu73CC7syXC4MvU}(g&6r123WSk^|%GTs2JO}%sOuK%6ye$vG`W~(} z*D(H->2r35BS9AjH!QW7Bdy+97m|j~$ed@to)1=G4OVf@w{Z=5pJ^#7_sN#eZ$)8$ z=UtT4I^Wh6W~vDoSn0v+2h};>*i~+@=@m~Z^I;`C2N;GI+Y}_-wH>$NTmRFK7V$Au zYE{ze)t=KrX9XjU-ULSvYe%?2y~!L2>zrNj7e0p-Qf z1Mq!RZ7`9Tng*%tj-(w7T)X_Xo)RaQo)F9V2Ap8 zN`RopGlk_?$2P9LScToWNTwBq&xG2#9OmifqCz7h0C6+){WXu295>^JmOj2WS9MkX z{^8xdS|R$i2dG7V7RXDqbM#TJC12(W6ZCqpu+2%IXE{StJ(77-$Z@EQ3nIz@RI%Q_ zt#*I|*pD8btdRYTqgH~noogEpzgZc**&7OS6#zO=nIc=iQCB~2ta zwq!b@g^dCH&5W4LLlEmY<9`H{xBGKuShzs)DyGftXS>}g4iq(dscYDzgVPnwzBf>L z5+Ys|_b{!>K`0eQNbp9EoDgS{d!Eq|C2~qsyUJPw;^$boQ8vkEvGc--oA~n{PFnE+ z=FL;7HJi_wO6N1iE1;Ycou?wc#8R%hj=(fMj)ZZK;G@h+)(bx%j;1tysCd`Z<#k?! z5!SpP(^ylw={mCOMda$dylxiBdjH&ojjeZBsaFMXLyJ+B;o~%{&r1>@Db{(aaO+w4 zFU&oBvLno|u``FuNPw3A#?35lHEkzI3!}*MW5?TK^kB`91l050ZRe8DC?7zL-P{yx zJl4(!<@v%2RQ{4mTYsA(1~+&U$g}wT=QD$=r>sU5q?C_KlURuWZ*W(NrS%{=`#PNR zUp?X`ibT9|Jl0ZNfVJ2frtL0l#3@9qTW-PiO|^t~_bowFAnmXMFT9k*my_8-*ts(? zSyHcskOIL?n&7WfC>mSKaQ>8LTK>dYC7m>EQw-a1b>37O_Q7PXPUd_V*h+U+##^7h zs)7Y~YzDq+RLoTqQAuO_;iVdSswYpoJ0`V~N4IC%U^uedv{<}m`<5lfI!{1{z1Rr# z<|$eaoOa;vQj;X`l0oeEf93Ate_YG`hwcBTcU1q;^Z&vpDGh*SZsL;!%q+rima#2d NzG!mcl`i`3e*s9y_eKB! literal 0 HcmV?d00001 diff --git a/packages/app/public/img/cnoe/logo.png b/packages/app/public/img/cnoe/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a569b27f8958fa0ce5a96359cbfb2efeb73f4a GIT binary patch literal 28951 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Ð`0QHD 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 literal 0 HcmV?d00001 diff --git a/packages/app/public/img/gitlab.png b/packages/app/public/img/gitlab.png new file mode 100644 index 0000000000000000000000000000000000000000..b18437dc582baf16199e7c1d664c3a6bac072c55 GIT binary patch literal 24046 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 P00000NkvXXu0mjf5aq~1 literal 0 HcmV?d00001 diff --git a/packages/app/public/img/keycloak.png b/packages/app/public/img/keycloak.png new file mode 100644 index 0000000000000000000000000000000000000000..6a79a7a2c51f863d75ad282f83203d0af7d266d2 GIT binary patch literal 7970 zcmZ{JbyO5z-2NcBbTcPuV4*%e6$4smY?cM3I>75{r9g!Eav@&!p}RG=+w(HIG6sqk7e>V zkNDe;r7u3Gtg`=wTPV-SQ}R0#uC4I_Wasx24l3zae|vfY5_5X$W{TUC@r_)g?-jw| zVnlDPEo{k*f5MSTy}2vkI^K2DFh5|s^SbCb6nghbr9(Wb9$GtDq{_gXl9L}On45O=QB*4CCxenCN6ZvF7%+$BO= z=*ySyi+#cfdX$>|E@PUXF{W4^|EX=PoG`)xz!-2ke!8d@#rVl(h?Tf`g1*VBPlIJ= zP);e&H2|6Tu|-*;nzJQUAmR2$(wt%}SV#GV1e-(dqr4A1qoMYESSHIptDXpw1>r$U z3G+0~bTB&PZhNAjV8Wp9bCJ)|XFG|(#kBDsD9QnL^;v{HpN%Q%^!nBcUuex$PQVa? zb}_0q`=@IE$9iPy3jOrF4H}P_!C`Z36?g{;wh&l|y1EJ)Al}G1EhLRc6=#TQ@p&rC zvUaaL*~mF5tTn37ud4aO3P?2jjbH&gI#qL9KU>|HsQDMYi}VfWNro9Jvw3ptE?Gr! z%tw8G%+J?v6+ZK5WtEy_e?0d0n|6T&NG{+@GTP#c`}=60yU^x;!(NumiKRESjwLz5 zlYz2fk`dnjRVs9S^4=PCQ6hxLcww5!1};*Uf_~96sb_|L3%d=nk${0vzY3obvrW0m zc_)t<9(G+H)R)HOb+MbZd2c;X&-Cwm^el@RHJhOZ-u`wvtBFt{68XuN3s!&jIf7M6 z#36I;_f0E-LS@k8a~@y5h46Sa;GR==Ae!SiOpHpLhSF+UeB8=L4>|UicoIZ zQCl&Tm6g0w5LU;}nr6&MVMdvM+w8s~EybGVLH_tH_M)T5h zA?)0X{i=21WilCG&N?qG_Q{qD>%*5}9E1}0dT$zl9;xCz@3t=7_2PeFtZVZru_l}4~5;I2a@PVhCTd;$k84;FB$Qy4p$XUy1exDm@o zex6*kc~(n|NQgO$7mADA^`Q6*lO{>4siA8`8&Get162PtQCaRDklU?tw7#!Xe$KhCd>V4heri;-h9xFw5}7Obp`!uD&m>LB zJBxE|aDzoWUpM`7!OKL?*f`*=C7I|lM6qO=1bFHJFPsC>WtG-?em;vVROEgC;L}Mr z?Z9?VFJq{tiMP-m6AV$|nVJgTw?CNPq)|gBb@q=+g$H7i7rwG=O7C2_`=j2+`jlFM zzEF6tK-v6?nk!BS;~%d#63Byz4qgE%Z?!HHML}+0l7ZBQLb$wbw^}{*|c(e zcx-HL>vZZlDtQRC20Ul~m0eg~;Y*4qhnqh%;>^gg#jv-xJHdPwwS)F6B~yt)S2oNuZLv_a@zTPNT8SIT_@b+R#Zg^ zKbNK1r&&6TE1(O#Lru>FD$%5djc!u)tpAgYP9ovI)T=i5VWWsh7R}ZOrHeS@NPPkk z+b0C?BLhA**fQT5CW)skS#{t!;fFejXIjOi30O5aX_;$9o~6m8^X4Tk+G&ooQ?|jj zMze`Nzm8xZde_)_hO9zte3~X~b5l>PuNRxzJi8`eaC8LevX(Ba#tf*gv5zc^gyR~R z{@m5|Or-+hR_N@%c(e1D>BZAo5=qCyHxa*%1H~fhbQ%!3JZsdRAWF{u!2h0*4;cdQ98iU8jT2OlG3a*PT zb9kX@ASpibO-aSdWBjwqlrf5Fs+HuE{sbz{WMOt=6?t@OvOEJd#7w=xG3Z;KPP*@(JIGt#m zmn8)b@;>yHq0a3~Q&6?BVuH&#&p%McwbqJQs{irsbL46Nwp~2GJ=HL4>If3j`FsG(#4fJ01yPU<2!FaUK>nrmd>jdpLRT8>e+^Kj zqJ}oW!d%Hin;XB&reXztR7z7E^YPN`S)p=NS<5y^2ZyZ0OCg9rjabbyX>}wujg5!) z08|qt&b&WZ@bWf)NO-bDt76a_kDkL6LLb?BivH93FuMb!@);byQd`zR5=zm@vwJ{R2 zHvQU8(P;4ZabOooglByA)EJtRkTWZmp;0#L1f#i`vpF1F8n&zLPOaXf=5r8?G)}GJ4^rajh(0#@>0R2L7BYY;VGldD6s9seGG3Ro;|pEo@+V-4~Aa4~JXx z?$NMto+pZTK&qX`JOC)5v?TU)$yT4QBS9A`pw0bJqy3IMYMg4wenK148TU zn@a($kR``Y#eE6oQ8?@(4^hNS{Iq7Xu7w$Dzl;E=pz^}QgMQLiJ3La&iQu>S;^lOb zzr4N&5}e0f?2J&vE@TS8KSBjZQWLmPdpkQvLW421At`*kcXsEhk4JpxN%`Wrq(35=`_?AP&5#k-W(HBo918YBM%pG1jfg7i79N zV({|Ny$v{tj20pP%W25<^|ix;i%K;+Gd$SEWtY*cN#oBHxaKvfPfj#Sf+#k15Y_OA z1`8VIX|c7VGrN7+_lZTAs=?P{8e(V|nkCG2%I$OiQ(KKZ(>@flic^efJ$v3a&`Ld$ z8NzUZ=LMS0d!9a%d7>fq;$5+jqEk}$-rVcSarPu9fsRy%#QJzhK}hpQP(%B89e?qvv*Ws{)VW=8Gp?qWz8 z(r5hhx-mYosWCw91Y&AP&exp@K52bG<5TAqqxGu#9m=dP5(|Htk?9%ymkqDwvt8ZK zcKxXVRGR|*?`<$?22S(ovdr}bZWE|k!_tge%H*}}Esp*rdx;!fTtsQdFcz^J0MO%=`Ut7r#g&nQFP})Q)sx}x9-}cv)b#PDn ze=~x$V}DHv?5^hb+Ni4lY4wiHoS5IMXndvg{-44zX<5%xz!=qow?CL4N}33elA zl}66QWYvV)9Hyzxm@Dk&9$SO&HhKMj^gx z00s!+5g1kEE@Xjpy0LPh7t|-}(#cogy$I?|LoxQv zJ`r^|wt9h&oEy9w<(zCAr>8>NOV@kXg~uDUaF9P#^7U@p_FA$%Ghs=JqH<6d?;E;JLRMXl_MH#_giUz@qW#GD8c!8iumSf}bh zI->5x_MlVtgjj@|U^5ku`L>0O&Kgl&yEdAa=5a~16SwdJ0@ zZj#B1DYdf2fq02Q(duzM_TSP-ST60MsITS2sbTaJZP#g`e+u{0)^;Uyg0*LQ2k!IykR3_-V}hq+=^|2pJ(Ep*tOmSD6ycA} zI+Y()RTDK1?v>vu=;X2M$-W0Sw|3*crNoA!U-!CM3ekU4wsiyn?qnk4`~`0WOw9v1 z3b-mfvJ4{U3K9t%OmHPqroU~&XZ485p{lInvCl{k>7FhS-5J)@)>`rL@&=igi@e?M zF?h(Ikc}*dFKi(0l6c^!eQ(}=Z=M~Xfm6@^xoaSJ7-2k{GBx7 zf6;bE^}#hit4q9u60{`UGA*c7^=Km-qOBWXLy@UKWKI=V)c*udomWC*fl}}&T|QR8ly$9@VobG zQoRB1Kf~gwDmhUIkx_ZOu;F}BXu0=?XbeGDux7ksL5}$*z0#eHBYT@QO%ZLT((yx2 z{Ch$h0{);YNT|U}z^Y4@g#hP(vX*+tm~u!R#(`n4Svr(jeM|#Ci1{A_MeIezbVx{C z6cYPD#JH*5p|Sd8(y_oyU;pGpo=yJx2W6WULrq+){Za~zqlYRe~ zuuMCFU!rRv%yBRzbA0NQMZrtN`Oi1eBCoKpJ8jg<-sys$R72L>CQENhA3=|bfFt{3 z*^jh@{K|%LDi|`jwyV%r-)YxkrM}*rfo-oV=Yz8N>bda~Gq$udMzjCoJT2aPl;Wn# z^C8!vcrLyZ7uw;QHqxldOwS&Zx@@8FaK@#9_%PnQqJHI{(%U3Y>GzV-%%q|22)p5S zTN%PYjgzlgqch4FS>XVc+LSo{$1_za&Tk_l?EC8pZ=}W!j~?xzs&;tNl0N>283>)A zWym9X;yY-0lsnJYJbE+fjOXd)zM1KJi%yZ#v!V!{%=4-Es5_DTJIpAKu+6}W&ZjeO zX=$;dVlitMn2$D1^v~ek(bhP}t7PB&-eozL^b*8$Rz*<4L0Vol&NcFl7a6xC48^jF zo^~xv78WNbxOuO}$pGoflvQchnt!K9!ReQ29at9g!wX_QYaN*S6~yZ+M2xQ?p4RMx z>&F$JIvEG&udlAYoQjHiV5YC}C|iR%X%6Yahjq$T;a0?Eb_3;uKA^8JpV1~@S!zq{ zWq@z;FZ`1z6H@N*cccE5n}AV}>Nx|nZ8vlMUeAqeICxcK@>>jK$r5{}XFrU7O4$)V z33*y>fu#C)GAC@Ypvf2P4*vDUQeVHBkDj=TS8wT2Q9sG|X+2qzSWgvM>+|*KK8C*S zi@i_S!chh1M`A$v-oSoLsa8-yMUg~&C zsJIT&?Ruzd2J$Hou}CG3^?>5Rb1(|UT7O%NpfWW#|H(v*7cQV@!)>q(CFb|5qV5OH zL-jIAJm@BbeJz=L^bznH7F;dm`~EzP#7mA#tqV$ewma}WlT)*6xQAsXLc8qEQ8rq{*E(y zc)qO8)c{$!6yD))NRfd*d&<>x=K%-xywuA?F2T8e=I!w=l*6K45I@Nz4HdSkl_lH;3Y^pqm9B(#iHixef= z`Krd>Hrjo#&2gr*Gg5xtE@PDLFW89N>D`SCB`=SupQ69yD%lR5S&;p30+@Ywcx-N` zKu4yR(zJzx$u~tHxO3G{;GJeL;S1V2jewF|7mv@FT`8T-*sm+SOK<*=n@JaDHu0&~ zE`fCmHQHxoRXzXf>imC`7=)YvC+v~;1OJ9iqs{EpqH-vo65mLm%oraFW(`M>&f@X0 zc@fjPOi5+;G^zZ5+^vQC@7aog*Rrf7@o>#qigA6oYBNM$KCP4cA!bfX#Nwq}Nu4byj}1$WlS> zc6az^Bn||0EwWYmIuVgv6FvYVPXGD8Lar_hw^Lpox)M_fO+zHzmlsLaJ07jYiP9=x zHq@6lnGw!NBhz|9J&k`{88NS6n~u0n?4q1bwae9DND3$X_M75Pvu+5gvDOW zYrH z_G+Tpq=&7AZ^Y7l*6|bh4%yw^eVZ)YG!HevJz2dGcXH*5b(9NUi|RyubibN(ULkUD z-m6fP$HPmi%3M{RKa~7a>B1#6h=ici{v1C+=zn8kWNZZ%?JvxwQf70=gd;ck2Oleq z>8W2>Eu5#h8S8z7w4$T#t+r36DgNksslSHQoo*EAE?uysY@p$Fxpi4_9ahBVO#tWHLU`>0qe-F(?Axs z2Sep9ZeVFiiNb=na$m9!#srB5ek5h$Cl@7-zjh$PEbFrWyx7e;p_qNr`(d3$9ZRt> z7-8G`?u}#-HdTQiHMVE*DjAKLj$3aOZkp(ze^QpzEn*>Kp;nGa)sC|L>dKddB_&=) zI4Thq+|$#;Jww=~%>n#d#<%hOEYzO*WuuyD7QWWcG;aYZ-i#N(o7opfsQ<*jXN&@JL@^ zH5OXpfK?}oaWO(|l2?$^(?{JZvOlwUt24nXxIJbqy55d)!mS+`&Z%BjB-mOsu1?A# zEr#Kr8#qS{qQB77xTNbzX>w<|HsZ}%wSxN?w}DLFQTP*c`(Ixe48^2EC^Yfk=z;+; z5)l(6Ov1`9?s^^BD~+~2TwOyFg;it*M{Kz6Tm5#85ZyucUsBeAE>L=nCR!+-D!EBj zi9p0o(N{X2l;uypsKcb#;G&`ZZYC^*9u__~J)LeC7hIXUFNFp8cicW?yU6DZ-whwLfmh7h?+|e746yB7<;r^42uV;G*Og*QL)0;w6lm zhH+)?Re>MBeF75t=!3g4pVruZ{`%>GzeDm64;P8j=yZ1@&VU0QzPU z^KQ4Ru5uAc2%jjQJ2{|zEost=G1pfghxhl`*cG2Snyud<1+ zt&OjpG|bx$695q*5mA0&A$}1t10hLiVKHf82%nIUw2% - - - - - - - - - - - - - - - <%= config.getString('app.title') %> - - - -

- - - diff --git a/packages/app/public/manifest.json b/packages/app/public/manifest.json deleted file mode 100644 index 4a7c1b4..0000000 --- a/packages/app/public/manifest.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "short_name": "Backstage", - "name": "Backstage", - "icons": [ - { - "src": "favicon.ico", - "sizes": "48x48", - "type": "image/png" - } - ], - "start_url": "./index.html", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/packages/app/public/mockServiceWorker.js b/packages/app/public/mockServiceWorker.js new file mode 100644 index 0000000..1f45c4c --- /dev/null +++ b/packages/app/public/mockServiceWorker.js @@ -0,0 +1,303 @@ +/* eslint-disable */ +/* tslint:disable */ + +/** + * Mock Service Worker (1.3.5). + * @see https://github.com/mswjs/msw + * - Please do NOT modify this file. + * - Please do NOT serve this file on production. + */ + +const INTEGRITY_CHECKSUM = '3d6b9f06410d179a7f7404d4bf4c3c70' +const activeClientIds = new Set() + +self.addEventListener('install', function () { + self.skipWaiting() +}) + +self.addEventListener('activate', function (event) { + event.waitUntil(self.clients.claim()) +}) + +self.addEventListener('message', async function (event) { + const clientId = event.source.id + + if (!clientId || !self.clients) { + return + } + + const client = await self.clients.get(clientId) + + if (!client) { + return + } + + const allClients = await self.clients.matchAll({ + type: 'window', + }) + + switch (event.data) { + case 'KEEPALIVE_REQUEST': { + sendToClient(client, { + type: 'KEEPALIVE_RESPONSE', + }) + break + } + + case 'INTEGRITY_CHECK_REQUEST': { + sendToClient(client, { + type: 'INTEGRITY_CHECK_RESPONSE', + payload: INTEGRITY_CHECKSUM, + }) + break + } + + case 'MOCK_ACTIVATE': { + activeClientIds.add(clientId) + + sendToClient(client, { + type: 'MOCKING_ENABLED', + payload: true, + }) + break + } + + case 'MOCK_DEACTIVATE': { + activeClientIds.delete(clientId) + break + } + + case 'CLIENT_CLOSED': { + activeClientIds.delete(clientId) + + const remainingClients = allClients.filter((client) => { + return client.id !== clientId + }) + + // Unregister itself when there are no more clients + if (remainingClients.length === 0) { + self.registration.unregister() + } + + break + } + } +}) + +self.addEventListener('fetch', function (event) { + const { request } = event + const accept = request.headers.get('accept') || '' + + // Bypass server-sent events. + if (accept.includes('text/event-stream')) { + return + } + + // Bypass navigation requests. + if (request.mode === 'navigate') { + return + } + + // Opening the DevTools triggers the "only-if-cached" request + // that cannot be handled by the worker. Bypass such requests. + if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { + return + } + + // Bypass all requests when there are no active clients. + // Prevents the self-unregistered worked from handling requests + // after it's been deleted (still remains active until the next reload). + if (activeClientIds.size === 0) { + return + } + + // Generate unique request ID. + const requestId = Math.random().toString(16).slice(2) + + event.respondWith( + handleRequest(event, requestId).catch((error) => { + if (error.name === 'NetworkError') { + console.warn( + '[MSW] Successfully emulated a network error for the "%s %s" request.', + request.method, + request.url, + ) + return + } + + // At this point, any exception indicates an issue with the original request/response. + console.error( + `\ +[MSW] Caught an exception from the "%s %s" request (%s). This is probably not a problem with Mock Service Worker. There is likely an additional logging output above.`, + request.method, + request.url, + `${error.name}: ${error.message}`, + ) + }), + ) +}) + +async function handleRequest(event, requestId) { + const client = await resolveMainClient(event) + const response = await getResponse(event, client, requestId) + + // Send back the response clone for the "response:*" life-cycle events. + // Ensure MSW is active and ready to handle the message, otherwise + // this message will pend indefinitely. + if (client && activeClientIds.has(client.id)) { + ;(async function () { + const clonedResponse = response.clone() + sendToClient(client, { + type: 'RESPONSE', + payload: { + requestId, + type: clonedResponse.type, + ok: clonedResponse.ok, + status: clonedResponse.status, + statusText: clonedResponse.statusText, + body: + clonedResponse.body === null ? null : await clonedResponse.text(), + headers: Object.fromEntries(clonedResponse.headers.entries()), + redirected: clonedResponse.redirected, + }, + }) + })() + } + + return response +} + +// Resolve the main client for the given event. +// Client that issues a request doesn't necessarily equal the client +// that registered the worker. It's with the latter the worker should +// communicate with during the response resolving phase. +async function resolveMainClient(event) { + const client = await self.clients.get(event.clientId) + + if (client?.frameType === 'top-level') { + return client + } + + const allClients = await self.clients.matchAll({ + type: 'window', + }) + + return allClients + .filter((client) => { + // Get only those clients that are currently visible. + return client.visibilityState === 'visible' + }) + .find((client) => { + // Find the client ID that's recorded in the + // set of clients that have registered the worker. + return activeClientIds.has(client.id) + }) +} + +async function getResponse(event, client, requestId) { + const { request } = event + const clonedRequest = request.clone() + + function passthrough() { + // Clone the request because it might've been already used + // (i.e. its body has been read and sent to the client). + const headers = Object.fromEntries(clonedRequest.headers.entries()) + + // Remove MSW-specific request headers so the bypassed requests + // comply with the server's CORS preflight check. + // Operate with the headers as an object because request "Headers" + // are immutable. + delete headers['x-msw-bypass'] + + return fetch(clonedRequest, { headers }) + } + + // Bypass mocking when the client is not active. + if (!client) { + return passthrough() + } + + // Bypass initial page load requests (i.e. static assets). + // The absence of the immediate/parent client in the map of the active clients + // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet + // and is not ready to handle requests. + if (!activeClientIds.has(client.id)) { + return passthrough() + } + + // Bypass requests with the explicit bypass header. + // Such requests can be issued by "ctx.fetch()". + if (request.headers.get('x-msw-bypass') === 'true') { + return passthrough() + } + + // Notify the client that a request has been intercepted. + const clientMessage = await sendToClient(client, { + type: 'REQUEST', + payload: { + id: requestId, + url: request.url, + method: request.method, + headers: Object.fromEntries(request.headers.entries()), + cache: request.cache, + mode: request.mode, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body: await request.text(), + bodyUsed: request.bodyUsed, + keepalive: request.keepalive, + }, + }) + + switch (clientMessage.type) { + case 'MOCK_RESPONSE': { + return respondWithMock(clientMessage.data) + } + + case 'MOCK_NOT_FOUND': { + return passthrough() + } + + case 'NETWORK_ERROR': { + const { name, message } = clientMessage.data + const networkError = new Error(message) + networkError.name = name + + // Rejecting a "respondWith" promise emulates a network error. + throw networkError + } + } + + return passthrough() +} + +function sendToClient(client, message) { + return new Promise((resolve, reject) => { + const channel = new MessageChannel() + + channel.port1.onmessage = (event) => { + if (event.data && event.data.error) { + return reject(event.data.error) + } + + resolve(event.data) + } + + client.postMessage(message, [channel.port2]) + }) +} + +function sleep(timeMs) { + return new Promise((resolve) => { + setTimeout(resolve, timeMs) + }) +} + +async function respondWithMock(response) { + await sleep(response.delay) + return new Response(response.body, response) +} diff --git a/packages/app/public/robots.txt b/packages/app/public/robots.txt deleted file mode 100644 index 01b0f9a..0000000 --- a/packages/app/public/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * diff --git a/packages/app/public/safari-pinned-tab.svg b/packages/app/public/safari-pinned-tab.svg deleted file mode 100644 index 0f500b3..0000000 --- a/packages/app/public/safari-pinned-tab.svg +++ /dev/null @@ -1 +0,0 @@ -Created by potrace 1.11, written by Peter Selinger 2001-2013 \ No newline at end of file diff --git a/packages/app/src/App.test.tsx b/packages/app/src/App.test.tsx deleted file mode 100644 index ec8ba1d..0000000 --- a/packages/app/src/App.test.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import React from 'react'; -import { render, waitFor } from '@testing-library/react'; -import App from './App'; - -describe('App', () => { - it('should render', async () => { - process.env = { - NODE_ENV: 'test', - APP_CONFIG: [ - { - data: { - app: { title: 'Test' }, - backend: { baseUrl: 'http://localhost:7007' }, - techdocs: { - storageUrl: 'http://localhost:7007/api/techdocs/static/docs', - }, - }, - context: 'test', - }, - ] as any, - }; - - const rendered = render(); - - await waitFor(() => { - expect(rendered.baseElement).toBeInTheDocument(); - }); - }); -}); diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx index ae87f47..4d0e47a 100644 --- a/packages/app/src/App.tsx +++ b/packages/app/src/App.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { Navigate, Route } from 'react-router-dom'; -import { apiDocsPlugin, ApiExplorerPage } from '@backstage/plugin-api-docs'; +import { apiDocsPlugin } from '@backstage/plugin-api-docs'; import { CatalogEntityPage, CatalogIndexPage, @@ -22,50 +22,31 @@ import { import { TechDocsAddons } from '@backstage/plugin-techdocs-react'; import { ReportIssue } from '@backstage/plugin-techdocs-module-addons-contrib'; import { UserSettingsPage } from '@backstage/plugin-user-settings'; -import {apis, keycloakOIDCAuthApiRef} from './apis'; +import { apis } from './apis'; import { entityPage } from './components/catalog/EntityPage'; import { searchPage } from './components/search/SearchPage'; import { Root } from './components/Root'; - -import {AlertDisplay, OAuthRequestDialog, SignInPage} from '@backstage/core-components'; +import { + AlertDisplay, + OAuthRequestDialog, + SignInPage, +} from '@backstage/core-components'; import { createApp } from '@backstage/app-defaults'; import { AppRouter, FlatRoutes } from '@backstage/core-app-api'; import { CatalogGraphPage } from '@backstage/plugin-catalog-graph'; import { RequirePermission } from '@backstage/plugin-permission-react'; import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha'; -import LightIcon from '@material-ui/icons/WbSunny'; -import { - CNOEHomepage, - cnoeLightTheme, - cnoeDarkTheme, -} from '@internal/plugin-cnoe-ui'; -import {configApiRef, useApi} from "@backstage/core-plugin-api"; -import { ArgoWorkflowsPage } from '@internal/plugin-argo-workflows'; -import { ApacheSparkPage } from '@internal/plugin-apache-spark'; -import { - UnifiedThemeProvider -} from "@backstage/theme"; -import { TerraformPluginPage } from '@internal/plugin-terraform'; +import { cnoeVibrantLightAppTheme, cnoeVibrantDarkAppTheme } from './theme'; +import { Homepage } from './components/home/Homepage'; +import { CustomApiExplorerPage } from './components/api/ApiExplorerPage'; +import { EntityKindPicker } from '@backstage/plugin-catalog-react'; const app = createApp({ apis, + themes: [cnoeVibrantLightAppTheme, cnoeVibrantDarkAppTheme], components: { SignInPage: props => { - const configApi = useApi(configApiRef); - if (configApi.getString('auth.environment') === 'local') { - return ; - } - return ( - - ); + return ; }, }, bindRoutes({ bind }) { @@ -85,33 +66,13 @@ const app = createApp({ catalogIndex: catalogPlugin.routes.catalogIndex, }); }, - themes: [ - { - id: 'cnoe-light-theme', - title: 'Light Theme', - variant: 'light', - icon: , - Provider: ({ children }) => ( - - ), - }, - { - id: 'cnoe-dark-theme', - title: 'Dark Theme', - variant: 'dark', - icon: , - Provider: ({ children }) => ( - - ), - }, - ], }); const routes = ( } /> - } /> - } /> + } /> + ); @@ -161,6 +119,3 @@ export default app.createRoot( , ); - - - diff --git a/packages/app/src/apis.ts b/packages/app/src/apis.ts index 68db2f8..bb3ff2a 100644 --- a/packages/app/src/apis.ts +++ b/packages/app/src/apis.ts @@ -4,24 +4,78 @@ import { ScmAuth, } from '@backstage/integration-react'; import { - AnyApiFactory, ApiRef, BackstageIdentityApi, + AnyApiFactory, + ApiRef, + BackstageIdentityApi, configApiRef, - createApiFactory, createApiRef, discoveryApiRef, oauthRequestApiRef, OpenIdConnectApi, ProfileInfoApi, SessionApi, + createApiFactory, + createApiRef, + discoveryApiRef, + identityApiRef, + oauthRequestApiRef, + OpenIdConnectApi, + ProfileInfoApi, + SessionApi, } from '@backstage/core-plugin-api'; -import {OAuth2} from "@backstage/core-app-api"; +import { OAuth2 } from '@backstage/core-app-api'; +import { + kubernetesApiRef, + kubernetesAuthProvidersApiRef, + KubernetesBackendClient, + KubernetesAuthProviders, +} from '@backstage/plugin-kubernetes-react'; +import { + argoCDApiRef, + ArgoCDApiClient, +} from '@roadiehq/backstage-plugin-argo-cd'; export const keycloakOIDCAuthApiRef: ApiRef< OpenIdConnectApi & ProfileInfoApi & BackstageIdentityApi & SessionApi > = createApiRef({ id: 'auth.keycloak-oidc', }); + export const apis: AnyApiFactory[] = [ createApiFactory({ api: scmIntegrationsApiRef, - deps: {configApi: configApiRef}, - factory: ({configApi}) => ScmIntegrationsApi.fromConfig(configApi), + deps: { configApi: configApiRef }, + factory: ({ configApi }) => ScmIntegrationsApi.fromConfig(configApi), }), ScmAuth.createDefaultApiFactory(), + createApiFactory({ + api: kubernetesAuthProvidersApiRef, + deps: {}, + factory: () => new KubernetesAuthProviders({ + microsoftAuthApi: undefined as any, + googleAuthApi: undefined as any, + }), + }), + createApiFactory({ + api: kubernetesApiRef, + deps: { + discoveryApi: discoveryApiRef, + fetchApi: { id: 'core.fetch', T: {} as any }, + kubernetesAuthProvidersApi: kubernetesAuthProvidersApiRef, + } as any, + factory: ({ discoveryApi, fetchApi, kubernetesAuthProvidersApi }: any) => + new KubernetesBackendClient({ discoveryApi, fetchApi, kubernetesAuthProvidersApi }), + }), + createApiFactory({ + api: argoCDApiRef, + deps: { + discoveryApi: discoveryApiRef, + identityApi: identityApiRef, + configApi: configApiRef, + }, + factory: ({ discoveryApi, identityApi, configApi }) => + new ArgoCDApiClient({ + discoveryApi, + identityApi, + backendBaseUrl: configApi.getString('backend.baseUrl'), + searchInstances: true, + useNamespacedApps: false, + }), + }), createApiFactory({ api: keycloakOIDCAuthApiRef, deps: { diff --git a/packages/app/src/components/Root/LogoFull.tsx b/packages/app/src/components/Root/LogoFull.tsx deleted file mode 100644 index 47e3b73..0000000 --- a/packages/app/src/components/Root/LogoFull.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react'; -import { makeStyles } from '@material-ui/core'; - -const useStyles = makeStyles({ - svg: { - width: 'auto', - height: 30, - }, - path: { - fill: '#7df3e1', - }, -}); -const LogoFull = () => { - const classes = useStyles(); - - return ( - - - - ); -}; - -export default LogoFull; diff --git a/packages/app/src/components/Root/LogoIcon.tsx b/packages/app/src/components/Root/LogoIcon.tsx deleted file mode 100644 index 7eae8c7..0000000 --- a/packages/app/src/components/Root/LogoIcon.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react'; -import { makeStyles } from '@material-ui/core'; - -const useStyles = makeStyles({ - svg: { - width: 'auto', - height: 28, - }, - path: { - fill: '#7df3e1', - }, -}); - -const LogoIcon = () => { - const classes = useStyles(); - - return ( - - - - ); -}; - -export default LogoIcon; diff --git a/packages/app/src/components/Root/Root.tsx b/packages/app/src/components/Root/Root.tsx index 28d7342..7af37cc 100644 --- a/packages/app/src/components/Root/Root.tsx +++ b/packages/app/src/components/Root/Root.tsx @@ -1,11 +1,14 @@ import React, { PropsWithChildren } from 'react'; -import { makeStyles } from '@material-ui/core'; -import HomeIcon from '@material-ui/icons/Home'; -import ExtensionIcon from '@material-ui/icons/Extension'; -import MapIcon from '@material-ui/icons/MyLocation'; -import LibraryBooks from '@material-ui/icons/LibraryBooks'; -import CreateComponentIcon from '@material-ui/icons/AddCircleOutline'; -import {LogoFull, LogoIcon} from '@internal/plugin-cnoe-ui'; +import HomeIcon from '@mui/icons-material/Home'; +import ExtensionIcon from '@mui/icons-material/Extension'; +import MapIcon from '@mui/icons-material/MyLocation'; +import LibraryBooks from '@mui/icons-material/LibraryBooks'; +import CreateComponentIcon from '@mui/icons-material/AddCircleOutline'; +import CategoryIcon from '@mui/icons-material/Category'; +import MenuIcon from '@mui/icons-material/Menu'; +import SearchIcon from '@mui/icons-material/Search'; +import GroupIcon from '@mui/icons-material/People'; +import { LogoFull, LogoIcon } from '../logos'; import { Settings as SidebarSettings, UserSettingsSignInAvatar, @@ -22,32 +25,38 @@ import { SidebarSpace, useSidebarOpenState, Link, + SidebarExpandButton, } from '@backstage/core-components'; -import MenuIcon from '@material-ui/icons/Menu'; -import SearchIcon from '@material-ui/icons/Search'; +import { MyGroupsSidebarItem } from '@backstage/plugin-org'; -const useSidebarLogoStyles = makeStyles({ +const sidebarLogoStyles = { root: { width: sidebarConfig.drawerWidthClosed, height: 3 * sidebarConfig.logoHeight, display: 'flex', - flexFlow: 'row nowrap', + flexFlow: 'row nowrap' as const, alignItems: 'center', - marginBottom: -14, + marginBottom: 8, + borderBottom: '1px solid rgba(255,255,255,0.1)', + paddingBottom: 16, }, link: { width: sidebarConfig.drawerWidthClosed, marginLeft: 24, }, -}); +}; const SidebarLogo = () => { - const classes = useSidebarLogoStyles(); const { isOpen } = useSidebarOpenState(); return ( -
- +
+ {isOpen ? : }
@@ -57,32 +66,68 @@ const SidebarLogo = () => { export const Root = ({ children }: PropsWithChildren<{}>) => ( + {/* Logo */} + + {/* Search — uses SidebarGroup so it aligns with other items */} } to="/search"> + + + {/* Main navigation */} }> - {/* Global nav, not org-specific */} - + + - {/* End global nav */} + + Tools + + + - } - to="/settings" + + {/* Collapse toggle */} +
{ (e.currentTarget as HTMLDivElement).style.opacity = '1'; }} + onMouseLeave={e => { (e.currentTarget as HTMLDivElement).style.opacity = '0.6'; }} > - - + +
+ + {/* Settings at bottom */} +
+ } + to="/settings" + > + + +
{children}
diff --git a/packages/app/src/components/api/ApiExplorerPage.tsx b/packages/app/src/components/api/ApiExplorerPage.tsx new file mode 100644 index 0000000..c839b51 --- /dev/null +++ b/packages/app/src/components/api/ApiExplorerPage.tsx @@ -0,0 +1,196 @@ +import React from 'react'; +import { Content, Page } from '@backstage/core-components'; +import { + EntityListProvider, + EntityLifecyclePicker, + EntityOwnerPicker, + EntityTypePicker, + EntityKindPicker, + EntitySearchBar, +} from '@backstage/plugin-catalog-react'; +import { CatalogTable } from '@backstage/plugin-catalog'; +import FilterListIcon from '@mui/icons-material/FilterList'; + +const contentWrapperStyle: React.CSSProperties = { + width: '100%', + padding: '0 0.3vw 24px', +}; + +const waveSvg = `url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='1368' height='400' fill='none'%3e%3cmask id='a' width='1368' height='401' x='0' y='0' maskUnits='userSpaceOnUse'%3e%3cpath fill='url(%23paint0_linear)' d='M437 116C223 116 112 0 112 0h1256v400c-82 0-225-21-282-109-112-175-436-175-649-175z'/%3e%3cpath fill='url(%23paint1_linear)' d='M1368 400V282C891-29 788 40 711 161 608 324 121 372 0 361v39h1368z'/%3e%3cpath fill='url(%23paint2_linear)' d='M1368 244v156H0V94c92-24 198-46 375 0l135 41c176 51 195 109 858 109z'/%3e%3cpath fill='url(%23paint3_linear)' d='M1252 400h116c-14-7-35-14-116-16-663-14-837-128-1013-258l-85-61C98 28 46 8 0 0v400h1252z'/%3e%3c/mask%3e%3cg mask='url(%23a)'%3e%3cpath fill='white' d='M-172-98h1671v601H-172z'/%3e%3c/g%3e%3cdefs%3e%3clinearGradient id='paint0_linear' x1='602' x2='1093.5' y1='-960.5' y2='272' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint1_linear' x1='482' x2='480' y1='1058.5' y2='70.5' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint2_linear' x1='424' x2='446.1' y1='-587.5' y2='274.6' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint3_linear' x1='587' x2='349' y1='-1120.5' y2='341' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e")`; + +const headerCardStyle: React.CSSProperties = { + background: `linear-gradient(135deg, #003D7A 0%, #00568C 50%, #1A8DFF 100%)`, + backgroundImage: `${waveSvg}, linear-gradient(135deg, #003D7A 0%, #00568C 50%, #1A8DFF 100%)`, + backgroundSize: 'cover, cover', + backgroundPosition: 'center', + borderRadius: 16, + padding: '40px 24px 32px', + textAlign: 'center', + color: '#fff', + marginBottom: 24, + boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', + overflow: 'hidden', +}; + +const titleStyle: React.CSSProperties = { + margin: 0, + fontSize: '2rem', + fontWeight: 700, + letterSpacing: '-0.5px', +}; + +const subtitleStyle: React.CSSProperties = { + margin: '8px 0 0', + fontSize: '1rem', + fontWeight: 400, + opacity: 0.85, +}; + +const toolbarCardStyle: React.CSSProperties = { + background: 'rgba(255,255,255,0.03)', + borderRadius: 16, + boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', + padding: '12px 16px', + display: 'flex', + alignItems: 'center', + gap: 12, + marginBottom: 24, +}; + +const tableCardStyle: React.CSSProperties = { + background: 'var(--backstage-color-background-paper, #fff)', + borderRadius: 16, + boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', + border: '1px solid rgba(0,0,0,0.06)', + overflow: 'hidden', +}; + +const filterBtnBase: React.CSSProperties = { + display: 'flex', + alignItems: 'center', + gap: 6, + padding: '8px 16px', + borderRadius: 20, + border: '1px solid rgba(255,152,0,0.3)', + background: 'transparent', + cursor: 'pointer', + fontSize: 14, + fontWeight: 500, + color: '#FF9800', + transition: 'all 0.2s ease', + position: 'relative' as const, +}; + +const filterBtnActiveStyle: React.CSSProperties = { + ...filterBtnBase, + background: 'rgba(255,152,0,0.08)', + borderColor: 'rgba(255,152,0,0.5)', + color: '#FF9800', +}; + +const dropdownStyle: React.CSSProperties = { + position: 'absolute', + top: 'calc(100% + 8px)', + right: 0, + width: 280, + background: 'var(--backstage-color-background-paper, #fff)', + borderRadius: 16, + boxShadow: '0 8px 32px rgba(0,0,0,0.14), 0 2px 8px rgba(0,0,0,0.06)', + border: '1px solid rgba(0,0,0,0.06)', + padding: '16px', + zIndex: 10, + display: 'flex', + flexDirection: 'column', + gap: 12, +}; + +const filterSectionStyle: React.CSSProperties = { + display: 'flex', + flexDirection: 'column', + gap: 4, +}; + +const filterLabelStyle: React.CSSProperties = { + fontSize: 11, + fontWeight: 600, + textTransform: 'uppercase', + letterSpacing: '0.5px', + color: 'var(--backstage-color-text-secondary, #666)', + padding: '0 4px', +}; + +const FilterDropdown = () => { + const [open, setOpen] = React.useState(false); + const ref = React.useRef(null); + + React.useEffect(() => { + const handleClickOutside = (e: MouseEvent) => { + if (ref.current && !ref.current.contains(e.target as Node)) { + setOpen(false); + } + }; + if (open) { + document.addEventListener('mousedown', handleClickOutside); + } + return () => document.removeEventListener('mousedown', handleClickOutside); + }, [open]); + + return ( +
+ + {open && ( +
+
+ Type + +
+
+ Owner + +
+
+ Lifecycle + +
+
+ )} +
+ ); +}; + +export const CustomApiExplorerPage = () => { + return ( + + + ); +}; diff --git a/packages/app/src/components/catalog/CatalogPage.tsx b/packages/app/src/components/catalog/CatalogPage.tsx new file mode 100644 index 0000000..2195b5a --- /dev/null +++ b/packages/app/src/components/catalog/CatalogPage.tsx @@ -0,0 +1,124 @@ +import React, { useState, useRef, useEffect } from 'react'; +import { + EntityTypePicker, + EntityOwnerPicker, + EntityLifecyclePicker, + EntityTagPicker, + UserListPicker, +} from '@backstage/plugin-catalog-react'; +import FilterListIcon from '@mui/icons-material/FilterList'; +import CloseIcon from '@mui/icons-material/Close'; + +const filterBtnBase: React.CSSProperties = { + display: 'flex', + alignItems: 'center', + gap: 6, + padding: '8px 16px', + borderRadius: 20, + border: '1px solid rgba(255,152,0,0.3)', + background: 'transparent', + cursor: 'pointer', + fontSize: 14, + fontWeight: 500, + color: '#FF9800', + transition: 'all 0.2s ease', + position: 'relative' as const, +}; + +const filterBtnActiveStyle: React.CSSProperties = { + ...filterBtnBase, + background: 'rgba(255,152,0,0.08)', + borderColor: 'rgba(255,152,0,0.5)', + color: '#FF9800', +}; + +const dropdownStyle: React.CSSProperties = { + position: 'absolute', + top: 'calc(100% + 8px)', + right: 0, + width: 280, + background: 'var(--backstage-color-background-paper, #fff)', + borderRadius: 16, + boxShadow: '0 8px 32px rgba(0,0,0,0.14), 0 2px 8px rgba(0,0,0,0.06)', + border: '1px solid rgba(0,0,0,0.06)', + padding: '16px', + zIndex: 100, + display: 'flex', + flexDirection: 'column', + gap: 12, +}; + +const filterSectionStyle: React.CSSProperties = { + display: 'flex', + flexDirection: 'column', + gap: 4, +}; + +const filterLabelStyle: React.CSSProperties = { + fontSize: 11, + fontWeight: 600, + textTransform: 'uppercase', + letterSpacing: '0.5px', + color: 'var(--backstage-color-text-secondary, #666)', + padding: '0 4px', +}; + +export const CatalogDropdownFilters = () => { + const [open, setOpen] = useState(false); + const ref = useRef(null); + + useEffect(() => { + if (!open) return; + const handleClick = (e: MouseEvent) => { + if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false); + }; + document.addEventListener('mousedown', handleClick); + return () => document.removeEventListener('mousedown', handleClick); + }, [open]); + + return ( +
+ + {open && ( +
+
+ Filters + +
+
+ Owned / All + +
+
+ Type + +
+
+ Owner + +
+
+ Lifecycle + +
+
+ Tags + +
+
+ )} +
+ ); +}; diff --git a/packages/app/src/components/catalog/CustomCatalogPage.tsx b/packages/app/src/components/catalog/CustomCatalogPage.tsx new file mode 100644 index 0000000..2ef94e5 --- /dev/null +++ b/packages/app/src/components/catalog/CustomCatalogPage.tsx @@ -0,0 +1,54 @@ +import React from 'react'; +import { Content, Page } from '@backstage/core-components'; +import { + CatalogIndexPage as StockCatalogIndexPage, + CatalogTable, +} from '@backstage/plugin-catalog'; +import { + EntityKindPicker, + EntityListProvider, + EntitySearchBar, +} from '@backstage/plugin-catalog-react'; +import { HeroHeader, contentWrapperStyle } from '../shared/HeroHeader'; +import { CatalogDropdownFilters } from './CatalogPage'; + +const toolbarCardStyle: React.CSSProperties = { + background: 'rgba(255,255,255,0.03)', + borderRadius: 16, + boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', + padding: '12px 16px', + display: 'flex', + alignItems: 'center', + gap: 12, + marginBottom: 24, +}; + +const tableCardStyle: React.CSSProperties = { + background: 'var(--backstage-color-background-paper, #fff)', + borderRadius: 16, + boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', + border: '1px solid rgba(0,0,0,0.06)', + overflow: 'hidden', +}; + +export const CustomCatalogPage = () => ( + + +); diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index 98f05aa..77e773a 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -1,17 +1,26 @@ import React from 'react'; -import { Button, Grid } from '@material-ui/core'; -import { - EntityApiDefinitionCard, - EntityConsumedApisCard, - EntityConsumingComponentsCard, - EntityHasApisCard, - EntityProvidedApisCard, - EntityProvidingComponentsCard, -} from '@backstage/plugin-api-docs'; +import Dashboard from '@mui/icons-material/Dashboard'; +import RocketLaunch from '@mui/icons-material/RocketLaunch'; +import Cloud from '@mui/icons-material/Cloud'; +import AccountTree from '@mui/icons-material/AccountTree'; +import Api from '@mui/icons-material/Api'; +import Hub from '@mui/icons-material/Hub'; +import Description from '@mui/icons-material/Description'; +import Bolt from '@mui/icons-material/Bolt'; +import Storage from '@mui/icons-material/Storage'; +import Category from '@mui/icons-material/Category'; +import Schedule from '@mui/icons-material/Schedule'; +import Person from '@mui/icons-material/Person'; +import Schema from '@mui/icons-material/Schema'; +import GridView from '@mui/icons-material/GridView'; +import { useEntity } from '@backstage/plugin-catalog-react'; import { EntityAboutCard, + EntityDependsOnComponentsCard, + EntityDependsOnResourcesCard, EntityHasComponentsCard, EntityHasResourcesCard, + EntityHasSubcomponentsCard, EntityHasSystemsCard, EntityLayout, EntityLinksCard, @@ -33,6 +42,14 @@ import { } from '@backstage/plugin-org'; import { EntityTechdocsContent } from '@backstage/plugin-techdocs'; import { EmptyState } from '@backstage/core-components'; +import { + EntityApiDefinitionCard, + EntityConsumedApisCard, + EntityConsumingComponentsCard, + EntityHasApisCard, + EntityProvidedApisCard, + EntityProvidingComponentsCard, +} from '@backstage/plugin-api-docs'; import { Direction, EntityCatalogGraphCard, @@ -47,23 +64,96 @@ import { RELATION_PART_OF, RELATION_PROVIDES_API, } from '@backstage/catalog-model'; - import { TechDocsAddons } from '@backstage/plugin-techdocs-react'; import { ReportIssue } from '@backstage/plugin-techdocs-module-addons-contrib'; import { EntityKubernetesContent, isKubernetesAvailable } from '@backstage/plugin-kubernetes'; - import { - EntityArgoCDOverviewCard, - isArgocdAvailable -} from '@roadiehq/backstage-plugin-argo-cd'; + IfKroResourceGraphAvailable, + IfKroOverviewAvailable, + KroOverviewCard, + KroResourceGraph, + isKroAvailable, +} from '@terasky/backstage-plugin-kro-resources-frontend'; import { EntityArgoWorkflowsOverviewCard, + EntityArgoWorkflowsTemplateOverviewCard, isArgoWorkflowsAvailable, } from '@internal/plugin-argo-workflows'; -import {ApacheSparkPage, isApacheSparkAvailable} from "@internal/plugin-apache-spark"; -import { isTerraformAvailable, TerraformPluginPage } from '@internal/plugin-terraform'; +import { + EntityApacheSparkContent, + isApacheSparkAvailable, +} from '@internal/plugin-apache-spark'; +import { + EntityTerraformContent, + isTerraformAvailable, +} from '@internal/plugin-terraform'; +import { + EntityArgoCDOverviewCard, + isArgocdAvailable, +} from '@roadiehq/backstage-plugin-argo-cd'; + +// CSS grid layout helpers (replaces MUI Grid) +const grid12: React.CSSProperties = { + display: 'grid', + gridTemplateColumns: 'repeat(12, 1fr)', + gap: '24px', + alignItems: 'stretch', +}; +const span = (n: number): React.CSSProperties => ({ gridColumn: `span ${n}` }); + +// Tab label helper — renders icon + text inline +// EntityLayout.Route types title as string but renders ReactNode at runtime +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const tabLabel = (icon: React.ReactElement, text: string): any => ( + + {React.cloneElement(icon, { style: { fontSize: 18 } })} + {text} + +); + +// Chip style helpers for EntityMetadataBar +const chipBase: React.CSSProperties = { + display: 'inline-flex', + alignItems: 'center', + gap: '4px', + borderRadius: '16px', + fontSize: '12px', + padding: '4px 12px', + fontWeight: 500, +}; + +const EntityMetadataBar = () => { + const { entity } = useEntity(); + const lifecycle = (entity.spec?.lifecycle as string) || 'unknown'; + const type = (entity.spec?.type as string) || 'unknown'; + const owner = (entity.spec?.owner as string) || 'unknown'; + + const lifecycleColor = + lifecycle === 'production' + ? { background: '#e8f5e9', color: '#2e7d32' } + : lifecycle === 'experimental' + ? { background: '#fff8e1', color: '#f57f17' } + : { background: '#e3f2fd', color: '#1565c0' }; + + return ( +
+ + + {type} + + + + {lifecycle} + + + + {owner} + +
+ ); +}; const techdocsContent = ( @@ -75,23 +165,25 @@ const techdocsContent = ( const cicdContent = ( - isArgoWorkflowsAvailable(e)}> - + +
+
+ +
+
+ +
+
- +
Read more - + } /> @@ -102,124 +194,222 @@ const entityWarningContent = ( <> - +
- +
- - +
- +
- - +
- +
); const overviewContent = ( - +
+ {entityWarningContent} - - - +
+ +
+
+ +
- Boolean(isArgocdAvailable(e))}> - + +
- - - - - isTerraformAvailable(e)}> - - - +
- - - - +
- - +
+
+ +
+
+); + +const kubernetesContent = ( + +); + +const kroDetailsContent = ( +
+
+ + + +
+
+ + + +
+
+); + +const dependenciesContent = ( +
+
+ +
+
+ +
+
); const serviceEntityPage = ( - + , 'Overview')}> {overviewContent} - - + , 'CI/CD')}> {cicdContent} - - isKubernetesAvailable(e)}> - + , 'Kubernetes')} + if={isKubernetesAvailable} + > + {kubernetesContent} - - - + , 'Kro Details')} if={isKroAvailable}> + {kroDetailsContent} - - - - + , 'API')}> +
+
- - +
+
- - +
+
- - + , 'Dependencies')}> + {dependenciesContent} + + , 'Docs')}> {techdocsContent} + , 'Apache Spark')} + if={isApacheSparkAvailable} + > + + + , 'Terraform')} + if={isTerraformAvailable} + > + +
); const websiteEntityPage = ( - + , 'Overview')}> {overviewContent} - - + , 'CI/CD')}> {cicdContent} - - + , 'Kubernetes')} + if={isKubernetesAvailable} + > + {kubernetesContent} + + , 'Kro Details')} if={isKroAvailable}> + {kroDetailsContent} + + , 'Dependencies')}> + {dependenciesContent} + + , 'Docs')}> {techdocsContent} + , 'Apache Spark')} + if={isApacheSparkAvailable} + > + + + , 'Terraform')} + if={isTerraformAvailable} + > + + ); -/** - * NOTE: This page is designed to work on small screens such as mobile devices. - * This is based on Material UI Grid. If breakpoints are used, each grid item must set the `xs` prop to a column size or to `true`, - * since this does not default. If no breakpoints are used, the items will equitably share the available space. - * https://material-ui.com/components/grid/#basic-grid. - */ +const resourceGroupPage = ( + + , 'Overview')}> +
+ {entityWarningContent} +
+ +
+
+ +
+
+ +
+
+ + + +
+
+
+ , 'Kro Details')} if={isKroAvailable}> + {kroDetailsContent} + + , 'Kubernetes')} + if={isKubernetesAvailable} + > + + + , 'Dependencies')}> + {dependenciesContent} + + , 'Docs')}> + {techdocsContent} + +
+); const defaultEntityPage = ( - + , 'Overview')}> {overviewContent} - - + , 'Docs')}> {techdocsContent} @@ -230,113 +420,110 @@ const componentPage = ( {serviceEntityPage} - {websiteEntityPage} - {defaultEntityPage} ); const apiPage = ( - - + , 'Overview')}> +
{entityWarningContent} - +
- - - - - - - - - - - - - +
+
+ +
+
+ +
+
+ +
+
+ +
+
- - - - + , 'Definition')}> +
+
- - +
+
); const userPage = ( - - + , 'Overview')}> +
{entityWarningContent} - - - - - - - +
+ +
+
+ +
+
); const groupPage = ( - - + , 'Overview')}> +
{entityWarningContent} - - - - - - - +
+ +
+
+ +
+
- - +
+
- - +
+
); const systemPage = ( - - + , 'Overview')}> +
{entityWarningContent} - - - - - - - +
+ +
+
+ +
+
- - - - - - - - - - - +
+
+ +
+
+ +
+
+ +
+
- + , 'Diagram')}> - - + , 'Overview')}> +
{entityWarningContent} - - - - - - - - - - +
+ +
+
+ +
+
+ +
+
); @@ -383,7 +570,10 @@ export const entityPage = ( - + {defaultEntityPage} ); diff --git a/packages/app/src/components/home/Homepage.tsx b/packages/app/src/components/home/Homepage.tsx new file mode 100644 index 0000000..b3df627 --- /dev/null +++ b/packages/app/src/components/home/Homepage.tsx @@ -0,0 +1,337 @@ +import React from 'react'; +import { Content, Page } from '@backstage/core-components'; +import { HomePageSearchBar } from '@backstage/plugin-search'; +import { SearchContextProvider } from '@backstage/plugin-search-react'; +import { useApi, configApiRef } from '@backstage/core-plugin-api'; +import { + HomePageStarredEntities, +} from '@backstage/plugin-home'; + +const getBasePath = () => { + if (typeof window !== 'undefined') { + const baseTag = document.querySelector('base'); + if (baseTag?.href) { + try { + const base = new URL(baseTag.href); + return base.pathname.replace(/\/$/, ''); + } catch { + // fallback + } + } + } + return ''; +}; + +const basePath = getBasePath(); + +const getDomainUrl = () => { + if (typeof window !== 'undefined') { + return `${window.location.protocol}//${window.location.host}`; + } + return 'http://localhost:3000'; +}; + +const domainUrl = getDomainUrl(); + +/* ------------------------------------------------------------------ */ +/* Styles */ +/* ------------------------------------------------------------------ */ + +const waveSvg = `url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='1368' height='400' fill='none'%3e%3cmask id='a' width='1368' height='401' x='0' y='0' maskUnits='userSpaceOnUse'%3e%3cpath fill='url(%23paint0_linear)' d='M437 116C223 116 112 0 112 0h1256v400c-82 0-225-21-282-109-112-175-436-175-649-175z'/%3e%3cpath fill='url(%23paint1_linear)' d='M1368 400V282C891-29 788 40 711 161 608 324 121 372 0 361v39h1368z'/%3e%3cpath fill='url(%23paint2_linear)' d='M1368 244v156H0V94c92-24 198-46 375 0l135 41c176 51 195 109 858 109z'/%3e%3cpath fill='url(%23paint3_linear)' d='M1252 400h116c-14-7-35-14-116-16-663-14-837-128-1013-258l-85-61C98 28 46 8 0 0v400h1252z'/%3e%3c/mask%3e%3cg mask='url(%23a)'%3e%3cpath fill='white' d='M-172-98h1671v601H-172z'/%3e%3c/g%3e%3cdefs%3e%3clinearGradient id='paint0_linear' x1='602' x2='1093.5' y1='-960.5' y2='272' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint1_linear' x1='482' x2='480' y1='1058.5' y2='70.5' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint2_linear' x1='424' x2='446.1' y1='-587.5' y2='274.6' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint3_linear' x1='587' x2='349' y1='-1120.5' y2='341' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e")`; + +const heroStyle: React.CSSProperties = { + width: 'calc(100% - 56px)', + margin: '24px auto 0', + padding: '40px 24px 32px', + background: 'linear-gradient(135deg, #003D7A 0%, #00568C 50%, #1A8DFF 100%)', + backgroundImage: `${waveSvg}, linear-gradient(135deg, #003D7A 0%, #00568C 50%, #1A8DFF 100%)`, + backgroundSize: 'cover, cover', + backgroundPosition: 'center', + borderRadius: 16, + textAlign: 'center', + color: '#fff', + boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', + overflow: 'hidden', + minHeight: 135, +}; + +const heroTitleStyle: React.CSSProperties = { + margin: 0, + fontSize: '2.25rem', + fontWeight: 700, + letterSpacing: '-0.5px', + lineHeight: 1.2, +}; + +const heroSubtitleStyle: React.CSSProperties = { + margin: '12px 0 0', + fontSize: '1.1rem', + fontWeight: 400, + opacity: 0.85, +}; + +const searchWrapperStyle: React.CSSProperties = { + maxWidth: 700, + width: '100%', + margin: '-28px auto 0', + padding: '0 24px', + position: 'relative', + zIndex: 1, +}; + +const searchCardStyle: React.CSSProperties = { + background: 'var(--backstage-color-background-paper, #fff)', + borderRadius: 16, + boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', + padding: '10px 8px', +}; + +const searchBarInnerStyle: React.CSSProperties = { + display: 'flex', + width: '100%', + border: 'none', + outline: 'none', + background: 'transparent', + borderRadius: 12, +}; + +const columnsStyle: React.CSSProperties = { + display: 'grid', + gridTemplateColumns: '1fr 1fr', + gap: 24, + width: '100%', + maxWidth: 1200, + margin: '36px auto 0', + padding: '0 24px', + alignItems: 'start', +}; + +const cardStyle: React.CSSProperties = { + background: 'var(--backstage-color-background-paper, #f8f9fb)', + borderRadius: 16, + boxShadow: '0 4px 20px rgba(0,0,0,0.08), 0 1.5px 6px rgba(0,0,0,0.04), inset 0 1px 0 rgba(255,255,255,0.6)', + border: '1px solid rgba(0,0,0,0.04)', + overflow: 'hidden', +}; + +const cardHeaderStyle: React.CSSProperties = { + display: 'flex', + alignItems: 'center', + gap: 8, + padding: '18px 20px 12px', + fontSize: '1rem', + fontWeight: 600, + color: 'inherit', +}; + +const quickLinksGridStyle: React.CSSProperties = { + display: 'grid', + gridTemplateColumns: 'repeat(auto-fill, minmax(120px, 1fr))', + gap: 14, + padding: '8px 20px 20px', + maxHeight: 400, + overflowY: 'auto', +}; + +const toolCardBase: React.CSSProperties = { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + gap: 8, + padding: '20px 8px', + borderRadius: 12, + background: 'rgba(25, 118, 210, 0.04)', + cursor: 'pointer', + textDecoration: 'none', + color: 'var(--backstage-color-text-primary, #333)', + transition: 'all 0.2s ease', + border: '1px solid transparent', +}; + +const toolCardLabelStyle: React.CSSProperties = { + fontSize: 13, + fontWeight: 500, + textAlign: 'center', + lineHeight: 1.3, +}; + +/* ------------------------------------------------------------------ */ +/* ToolCard component */ +/* ------------------------------------------------------------------ */ + +interface ToolCardProps { + url: string; + label: string; + iconSrc?: string; + iconAlt?: string; + isCatalog?: boolean; +} + +const ToolCard = ({ url, label, iconSrc, iconAlt, isCatalog }: ToolCardProps) => { + const [hovered, setHovered] = React.useState(false); + + const style: React.CSSProperties = { + ...toolCardBase, + ...(hovered + ? { + transform: 'translateY(-3px) scale(1.03)', + boxShadow: '0 6px 20px rgba(0,0,0,0.10)', + background: 'rgba(25, 118, 210, 0.08)', + borderColor: 'rgba(25, 118, 210, 0.15)', + } + : {}), + }; + + const iconElement = isCatalog ? ( + + + + ) : ( + {iconAlt + ); + + const isExternal = + url.startsWith('http://') || url.startsWith('https://'); + + return ( + setHovered(true)} + onMouseLeave={() => setHovered(false)} + > + {iconElement} + {label} + + ); +}; + +/* ------------------------------------------------------------------ */ +/* Star SVG icon */ +/* ------------------------------------------------------------------ */ + +const StarIcon = () => ( + + + +); + +const LinkIcon = () => ( + + + +); + +/* ------------------------------------------------------------------ */ +/* Homepage */ +/* ------------------------------------------------------------------ */ + +export const Homepage = () => { + const config = useApi(configApiRef); + + const tools: ToolCardProps[] = (() => { + try { + const links = config.getOptionalConfigArray('homepage.quickLinks'); + if (links && links.length > 0) { + return links.map(link => ({ + url: link.getString('url'), + label: link.getString('label'), + iconSrc: link.getOptionalString('iconUrl'), + iconAlt: link.getOptionalString('label'), + isCatalog: link.getOptionalString('icon') === 'catalog', + })); + } + } catch (e) { + // fall through to defaults + } + + const getGitLabUrl = () => { + try { + const gitlabIntegrations = config.getOptionalConfigArray('integrations.gitlab'); + if (gitlabIntegrations && gitlabIntegrations.length > 0) { + const baseUrl = gitlabIntegrations[0].getOptionalString('baseUrl'); + if (baseUrl) return baseUrl; + } + } catch { /* fallback */ } + return 'https://gitlab.com'; + }; + + return [ + { url: '/catalog', label: 'Catalog', isCatalog: true }, + { url: getGitLabUrl(), label: 'GitLab', iconSrc: `${basePath}/img/gitlab.png`, iconAlt: 'GitLab' }, + { url: `${domainUrl}/argocd`, label: 'ArgoCD', iconSrc: `${basePath}/img/argocd.png`, iconAlt: 'ArgoCD' }, + { url: `${domainUrl}/argo-workflows`, label: 'Argo Workflows', iconSrc: `${basePath}/img/argo-workflows.png`, iconAlt: 'Argo Workflows' }, + { url: domainUrl, label: 'Kargo', iconSrc: `${basePath}/img/kargo.png`, iconAlt: 'Kargo' }, + { url: `${domainUrl}/keycloak`, label: 'Keycloak', iconSrc: `${basePath}/img/keycloak.png`, iconAlt: 'Keycloak' }, + ]; + })(); + + return ( + + + + {/* Hero */} +
+

Internal Developer Platform

+

+ Discover, manage, and deploy your services +

+
+ + {/* Elevated search bar */} +
+
+ +
+
+ + {/* Two-column layout */} +
+ {/* Starred entities */} +
+
+ + Starred Entities +
+
+ +
+
+ + {/* Quick links */} +
+
+ + Quick Links +
+
+ {tools.map((tool) => ( + + ))} +
+
+
+
+
+
+ ); +}; diff --git a/packages/app/src/components/kubernetes/KroNavigationHelper.tsx b/packages/app/src/components/kubernetes/KroNavigationHelper.tsx new file mode 100644 index 0000000..cf66017 --- /dev/null +++ b/packages/app/src/components/kubernetes/KroNavigationHelper.tsx @@ -0,0 +1,230 @@ +import React from 'react'; +import { useEntity } from '@backstage/plugin-catalog-react'; +import { useRouteRef } from '@backstage/core-plugin-api'; +import { entityRouteRef } from '@backstage/plugin-catalog-react'; +import { Entity } from '@backstage/catalog-model'; + +interface RelatedResource { + name: string; + kind: string; + namespace?: string; + entityRef?: string; + isKroResource: boolean; +} + +const chipStyle: React.CSSProperties = { + display: 'inline-block', + padding: '2px 10px', + borderRadius: '16px', + fontSize: '0.8125rem', + lineHeight: '1.6', + border: '1px solid', +}; + +const btnStyle: React.CSSProperties = { + padding: '4px 12px', + borderRadius: '4px', + border: '1px solid rgba(144,202,249,0.5)', + background: 'transparent', + color: '#90caf9', + cursor: 'pointer', + fontSize: '0.8125rem', +}; + +/** + * Navigation helper component that provides seamless navigation + * between Kubernetes and Kro views. + */ +export const KroNavigationHelper: React.FC = () => { + const { entity } = useEntity(); + const catalogEntityRoute = useRouteRef(entityRouteRef); + + const getRelatedResources = (): RelatedResource[] => { + const resources: RelatedResource[] = []; + + const resourceGroupRef = + entity.metadata.annotations?.['kro.run/resource-group']; + if (resourceGroupRef) { + resources.push({ + name: resourceGroupRef, + kind: 'ResourceGroup', + entityRef: resourceGroupRef, + isKroResource: true, + }); + } + + const managedResources = + entity.metadata.annotations?.['kro.run/managed-resources']; + if (managedResources) { + try { + const parsed = JSON.parse(managedResources); + if (Array.isArray(parsed)) { + parsed.forEach((resource: any) => { + resources.push({ + name: resource.name || 'Unknown', + kind: resource.kind || 'Unknown', + namespace: resource.namespace, + isKroResource: false, + }); + }); + } + } catch { + // ignore parse errors + } + } + + if (entity.relations) { + entity.relations.forEach(relation => { + if (relation.type === 'dependsOn' || relation.type === 'partOf') { + const targetRef = + typeof relation.targetRef === 'string' + ? relation.targetRef + : `${(relation.targetRef as any).kind}/${(relation.targetRef as any).namespace}/${(relation.targetRef as any).name}`; + const isKro = targetRef.includes('kro-resource-group'); + resources.push({ + name: targetRef.split('/').pop() || targetRef, + kind: targetRef.split('/')[0] || 'Component', + entityRef: targetRef, + isKroResource: isKro, + }); + } + }); + } + + return resources; + }; + + const relatedResources = getRelatedResources(); + const isKroResourceGroup = entity.spec?.type === 'kro-resource-group'; + + const navigateToEntity = (entityRef: string) => { + const parts = entityRef.split('/'); + const [kind, namespace, name] = + parts.length >= 3 ? parts : ['component', 'default', parts[0]]; + return catalogEntityRoute({ + kind: kind.toLowerCase(), + namespace: namespace || 'default', + name, + }); + }; + + if (relatedResources.length === 0 && !isKroResourceGroup) { + return null; + } + + return ( +
+

Resource Relationships

+ +
+ {isKroResourceGroup && ( + + Kro ResourceGroup + + )} + {relatedResources.some(r => !r.isKroResource) && ( + + Manages {relatedResources.filter(r => !r.isKroResource).length} Resources + + )} +
+ + {relatedResources.length > 0 && ( +
+

+ Related Resources +

+
+ {relatedResources.map((resource, index) => ( +
+ {resource.name} + + {resource.kind} + + {resource.entityRef && ( + + View + + )} +
+ ))} +
+
+ )} + +
+ {isKroResourceGroup && ( + + )} +
+
+ ); +}; + +/** + * Helper function to determine if navigation helper should be shown. + */ +export const shouldShowKroNavigation = (entity: Entity): boolean => { + return ( + entity.spec?.type === 'kro-resource-group' || + Boolean(entity.metadata.annotations?.['kro.run/resource-group']) || + Boolean(entity.metadata.annotations?.['kro.run/managed-resources']) || + Boolean( + entity.relations?.some( + r => + (r.type === 'dependsOn' || r.type === 'partOf') && + (typeof r.targetRef === 'string' + ? r.targetRef + : `${(r.targetRef as any).kind}` + ).includes('kro-resource-group'), + ), + ) + ); +}; diff --git a/packages/app/src/components/kubernetes/KroResourceFilter.tsx b/packages/app/src/components/kubernetes/KroResourceFilter.tsx new file mode 100644 index 0000000..1556fd7 --- /dev/null +++ b/packages/app/src/components/kubernetes/KroResourceFilter.tsx @@ -0,0 +1,159 @@ +import React from 'react'; + +interface KroResourceFilterProps { + selectedResourceTypes: string[]; + onResourceTypeChange: (resourceTypes: string[]) => void; + availableResourceTypes: string[]; +} + +const styles = { + container: { + padding: 8, + } as React.CSSProperties, + select: { + minWidth: 200, + padding: '8px 12px', + borderRadius: 4, + border: '1px solid rgba(0,0,0,0.23)', + fontSize: '0.875rem', + backgroundColor: 'var(--backstage-color-background-paper, #fff)', + } as React.CSSProperties, + chipContainer: { + display: 'flex', + flexWrap: 'wrap' as const, + gap: 4, + marginTop: 8, + } as React.CSSProperties, + chip: { + display: 'inline-flex', + alignItems: 'center', + gap: 4, + padding: '2px 8px', + borderRadius: 16, + fontSize: '0.75rem', + border: '1px solid rgba(0,0,0,0.23)', + backgroundColor: 'transparent', + } as React.CSSProperties, + kroChip: { + backgroundColor: 'var(--backstage-color-primary-light, #90caf9)', + color: '#fff', + borderColor: 'transparent', + } as React.CSSProperties, + deleteButton: { + background: 'none', + border: 'none', + cursor: 'pointer', + padding: 0, + fontSize: '0.875rem', + lineHeight: 1, + color: 'inherit', + } as React.CSSProperties, +}; + +/** + * Enhanced resource filter that includes Kro ResourceGroups + * alongside standard Kubernetes resources + */ +export const KroResourceFilter: React.FC = ({ + selectedResourceTypes, + onResourceTypeChange, + availableResourceTypes, +}) => { + const kroResourceTypes = availableResourceTypes.filter(type => + type.includes('kro.run') || type.includes('ResourceGroup') + ); + + const standardResourceTypes = availableResourceTypes.filter(type => + !type.includes('kro.run') && !type.includes('ResourceGroup') + ); + + const isKroResource = (resourceType: string): boolean => { + return resourceType.includes('kro.run') || resourceType.includes('ResourceGroup'); + }; + + const handleSelectChange = (event: React.ChangeEvent) => { + const value = event.target.value; + if (value && !selectedResourceTypes.includes(value)) { + onResourceTypeChange([...selectedResourceTypes, value]); + } + }; + + const handleChipDelete = (resourceType: string) => { + onResourceTypeChange(selectedResourceTypes.filter(type => type !== resourceType)); + }; + + return ( +
+ + + + {selectedResourceTypes.length > 0 && ( +
+ {selectedResourceTypes.map(value => ( + + {value} + + + ))} +
+ )} +
+ ); +}; + +/** + * Default resource types that should be included for Kro integration + */ +export const DEFAULT_KRO_RESOURCE_TYPES = [ + 'kro.run/v1alpha1/ResourceGraphDefinition', + 'kro.run/v1alpha1/CICDPipeline', + 'kro.run/v1alpha1/EksCluster', + 'kro.run/v1alpha1/EksclusterWithVpc', + 'kro.run/v1alpha1/Vpc', +]; + +/** + * Helper function to get all available resource types including Kro resources + */ +export const getAllResourceTypesWithKro = (standardTypes: string[]): string[] => { + return [...DEFAULT_KRO_RESOURCE_TYPES, ...standardTypes]; +}; diff --git a/packages/app/src/components/kubernetes/KubernetesContentWithKro.tsx b/packages/app/src/components/kubernetes/KubernetesContentWithKro.tsx new file mode 100644 index 0000000..44eabb9 --- /dev/null +++ b/packages/app/src/components/kubernetes/KubernetesContentWithKro.tsx @@ -0,0 +1,88 @@ +import React from 'react'; +import { EntityKubernetesContent } from '@backstage/plugin-kubernetes'; +import { useEntity } from '@backstage/plugin-catalog-react'; +import { + IfKroResourceGraphAvailable, + KroResourceGraph, + KroOverviewCard, + IfKroOverviewAvailable, +} from '@terasky/backstage-plugin-kro-resources-frontend'; + +const stack: React.CSSProperties = { + display: 'flex', + flexDirection: 'column', + gap: '24px', +}; + +const chip: React.CSSProperties = { + display: 'inline-block', + padding: '2px 10px', + borderRadius: '16px', + fontSize: '0.8125rem', + lineHeight: '1.6', + border: '1px solid', +}; + +/** + * Enhanced Kubernetes content that integrates Kro ResourceGroups + * with standard Kubernetes resources for a unified view. + */ +export const KubernetesContentWithKro = () => { + const { entity } = useEntity(); + + const isKroResourceGroup = entity.spec?.type === 'kro-resource-group'; + const hasKroAnnotations = Boolean( + entity.metadata.annotations?.['kro.run/resource-group'] || + entity.metadata.annotations?.['kro.run/managed-by'], + ); + + return ( +
+ {(isKroResourceGroup || hasKroAnnotations) && ( + <> +
+

Kro Integration

+
+ {isKroResourceGroup && ( + + Kro ResourceGroup + + )} + {hasKroAnnotations && !isKroResourceGroup && ( + + Managed by Kro + + )} + {entity.metadata.annotations?.['kro.run/resource-group'] && ( + + ResourceGroup:{' '} + {entity.metadata.annotations['kro.run/resource-group']} + + )} +
+
+ + {isKroResourceGroup && ( + + + + )} + + {isKroResourceGroup && ( + + + + )} + + )} + + +
+ ); +}; diff --git a/packages/app/src/components/logos/LogoFull.tsx b/packages/app/src/components/logos/LogoFull.tsx new file mode 100644 index 0000000..694853d --- /dev/null +++ b/packages/app/src/components/logos/LogoFull.tsx @@ -0,0 +1,47 @@ +import React from 'react'; +import { useTheme } from '@mui/material/styles'; + +export const LogoFull = () => { + const theme = useTheme(); + const isLight = theme.palette.mode === 'light'; + + // In light theme the sidebar is dark blue (#00568C), so use white/light + // In dark theme the sidebar is very dark (#0D1117), so use original cyan/blue + const wave = isLight ? '#FFFFFF' : '#00adee'; + const detail = isLight ? 'rgba(255,255,255,0.7)' : '#00568c'; + const text = isLight ? '#FFFFFF' : '#00adee'; + + return ( + + {/* Wave/globe */} + + + {/* Boat structure */} + + + + + {/* Water lines */} + + + + + + + + + + + {/* C */} + + {/* N */} + + {/* O - outer and inner paths using fill-rule evenodd to create the hole */} + + {/* E */} + + + + + ); +}; diff --git a/packages/app/src/components/logos/LogoIcon.tsx b/packages/app/src/components/logos/LogoIcon.tsx new file mode 100644 index 0000000..7d3974a --- /dev/null +++ b/packages/app/src/components/logos/LogoIcon.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { useTheme } from '@mui/material/styles'; + +/** Collapsed sidebar icon — just the boat, no "CNOE" text */ +export const LogoIcon = () => { + const theme = useTheme(); + const isLight = theme.palette.mode === 'light'; + + const wave = isLight ? '#FFFFFF' : '#00adee'; + const detail = isLight ? 'rgba(255,255,255,0.7)' : '#00568c'; + + return ( + + {/* Wave/globe */} + + + {/* Boat structure */} + + + + + {/* Water lines */} + + + + + + + + + + + + ); +}; diff --git a/packages/app/src/components/logos/index.ts b/packages/app/src/components/logos/index.ts new file mode 100644 index 0000000..10ae25a --- /dev/null +++ b/packages/app/src/components/logos/index.ts @@ -0,0 +1,2 @@ +export { LogoFull } from './LogoFull'; +export { LogoIcon } from './LogoIcon'; diff --git a/packages/app/src/components/search/SearchPage.tsx b/packages/app/src/components/search/SearchPage.tsx index 1788dde..f890137 100644 --- a/packages/app/src/components/search/SearchPage.tsx +++ b/packages/app/src/components/search/SearchPage.tsx @@ -1,13 +1,10 @@ import React from 'react'; -import { makeStyles, Theme, Grid, Paper } from '@material-ui/core'; - import { CatalogSearchResultListItem } from '@backstage/plugin-catalog'; import { catalogApiRef, CATALOG_FILTER_EXISTS, } from '@backstage/plugin-catalog-react'; import { TechDocsSearchResultListItem } from '@backstage/plugin-techdocs'; - import { SearchType } from '@backstage/plugin-search'; import { SearchBar, @@ -20,102 +17,188 @@ import { CatalogIcon, Content, DocsIcon, - Header, Page, } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; +import { HeroHeader, contentWrapperStyle } from '../shared/HeroHeader'; +import FilterListIcon from '@mui/icons-material/FilterList'; +import CloseIcon from '@mui/icons-material/Close'; -const useStyles = makeStyles((theme: Theme) => ({ - bar: { - padding: theme.spacing(1, 0), - }, - filters: { - padding: theme.spacing(2), - marginTop: theme.spacing(2), - }, - filter: { - '& + &': { - marginTop: theme.spacing(2.5), - }, - }, -})); +const toolbarCardStyle: React.CSSProperties = { + background: 'rgba(255,255,255,0.03)', + borderRadius: 16, + boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', + padding: '12px 16px', + display: 'flex', + alignItems: 'center', + gap: 12, + marginBottom: 24, +}; -const SearchPage = () => { - const classes = useStyles(); +const tableCardStyle: React.CSSProperties = { + background: 'var(--backstage-color-background-paper, #fff)', + borderRadius: 16, + boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', + border: '1px solid rgba(0,0,0,0.06)', + overflow: 'hidden', + padding: '20px 24px', +}; + +const filterBtnBase: React.CSSProperties = { + display: 'flex', + alignItems: 'center', + gap: 6, + padding: '8px 16px', + borderRadius: 20, + border: '1px solid rgba(255,152,0,0.3)', + background: 'transparent', + cursor: 'pointer', + fontSize: 14, + fontWeight: 500, + color: '#FF9800', + transition: 'all 0.2s ease', + position: 'relative' as const, +}; + +const filterBtnActiveStyle: React.CSSProperties = { + ...filterBtnBase, + background: 'rgba(255,152,0,0.08)', + borderColor: 'rgba(255,152,0,0.5)', +}; + +const dropdownStyle: React.CSSProperties = { + position: 'absolute', + top: 'calc(100% + 8px)', + right: 0, + width: 280, + background: 'var(--backstage-color-background-paper, #fff)', + borderRadius: 16, + boxShadow: '0 8px 32px rgba(0,0,0,0.14), 0 2px 8px rgba(0,0,0,0.06)', + border: '1px solid rgba(0,0,0,0.06)', + padding: '16px', + zIndex: 100, + display: 'flex', + flexDirection: 'column', + gap: 12, +}; + +const filterSectionStyle: React.CSSProperties = { + display: 'flex', + flexDirection: 'column', + gap: 4, +}; + +const filterLabelStyle: React.CSSProperties = { + fontSize: 11, + fontWeight: 600, + textTransform: 'uppercase', + letterSpacing: '0.5px', + color: 'var(--backstage-color-text-secondary, #666)', + padding: '0 4px', +}; + +const SearchFilterDropdown = () => { + const [open, setOpen] = React.useState(false); + const ref = React.useRef(null); const { types } = useSearch(); const catalogApi = useApi(catalogApiRef); + React.useEffect(() => { + const handleClickOutside = (e: MouseEvent) => { + if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false); + }; + if (open) document.addEventListener('mousedown', handleClickOutside); + return () => document.removeEventListener('mousedown', handleClickOutside); + }, [open]); + return ( - -
- - - - - - - - +
+ + {open && ( +
+
+ Filters + +
+
+ Result Type , - }, - { - value: 'techdocs', - name: 'Documentation', - icon: , - }, + { value: 'software-catalog', name: 'Software Catalog', icon: }, + { value: 'techdocs', name: 'Documentation', icon: }, ]} /> - - {types.includes('techdocs') && ( - { - // Return a list of entities which are documented. - const { items } = await catalogApi.getEntities({ - fields: ['metadata.name'], - filter: { - 'metadata.annotations.backstage.io/techdocs-ref': - CATALOG_FILTER_EXISTS, - }, - }); - - const names = items.map(entity => entity.metadata.name); - names.sort(); - return names; - }} - /> - )} +
+ {types.includes('techdocs') && ( +
+ Entity { + const { items } = await catalogApi.getEntities({ + fields: ['metadata.name'], + filter: { + 'metadata.annotations.backstage.io/techdocs-ref': CATALOG_FILTER_EXISTS, + }, + }); + const names = items.map(entity => entity.metadata.name); + names.sort(); + return names; + }} /> - - - - +
+ )} +
+ Kind + +
+
+ Lifecycle + +
+
+ )} +
+ ); +}; + +const SearchPage = () => { + return ( + + +
+ +
+
+ +
+ +
+
+
+
} /> } /> - - +
+
); diff --git a/packages/app/src/components/shared/HeroHeader.tsx b/packages/app/src/components/shared/HeroHeader.tsx new file mode 100644 index 0000000..438cad8 --- /dev/null +++ b/packages/app/src/components/shared/HeroHeader.tsx @@ -0,0 +1,29 @@ +import React from 'react'; + +const waveSvg = `url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='1368' height='400' fill='none'%3e%3cmask id='a' width='1368' height='401' x='0' y='0' maskUnits='userSpaceOnUse'%3e%3cpath fill='url(%23paint0_linear)' d='M437 116C223 116 112 0 112 0h1256v400c-82 0-225-21-282-109-112-175-436-175-649-175z'/%3e%3cpath fill='url(%23paint1_linear)' d='M1368 400V282C891-29 788 40 711 161 608 324 121 372 0 361v39h1368z'/%3e%3cpath fill='url(%23paint2_linear)' d='M1368 244v156H0V94c92-24 198-46 375 0l135 41c176 51 195 109 858 109z'/%3e%3cpath fill='url(%23paint3_linear)' d='M1252 400h116c-14-7-35-14-116-16-663-14-837-128-1013-258l-85-61C98 28 46 8 0 0v400h1252z'/%3e%3c/mask%3e%3cg mask='url(%23a)'%3e%3cpath fill='white' d='M-172-98h1671v601H-172z'/%3e%3c/g%3e%3cdefs%3e%3clinearGradient id='paint0_linear' x1='602' x2='1093.5' y1='-960.5' y2='272' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint1_linear' x1='482' x2='480' y1='1058.5' y2='70.5' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint2_linear' x1='424' x2='446.1' y1='-587.5' y2='274.6' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint3_linear' x1='587' x2='349' y1='-1120.5' y2='341' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e")`; + +const headerCardStyle: React.CSSProperties = { + background: `linear-gradient(135deg, #003D7A 0%, #00568C 50%, #1A8DFF 100%)`, + backgroundImage: `${waveSvg}, linear-gradient(135deg, #003D7A 0%, #00568C 50%, #1A8DFF 100%)`, + backgroundSize: 'cover, cover', + backgroundPosition: 'center', + borderRadius: 16, + padding: '40px 24px 32px', + textAlign: 'center' as const, + color: '#fff', + marginBottom: 24, + boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', + overflow: 'hidden', +}; + +export const HeroHeader = ({ title, subtitle }: { title: string; subtitle: string }) => ( +
+

{title}

+

{subtitle}

+
+); + +export const contentWrapperStyle: React.CSSProperties = { + width: '100%', + padding: '0 0.3vw 24px', +}; diff --git a/packages/app/src/index.tsx b/packages/app/src/index.tsx index d875c77..bc914b4 100644 --- a/packages/app/src/index.tsx +++ b/packages/app/src/index.tsx @@ -1,6 +1,429 @@ +import '@backstage/ui/css/styles.css'; import '@backstage/cli/asset-types'; import React from 'react'; import ReactDOM from 'react-dom/client'; + import App from './App'; -ReactDOM.createRoot(document.getElementById('root')!).render(); +const style = document.createElement('style'); +style.textContent = ` + *, *::before, *::after { + box-sizing: border-box; + } + html, body { + margin: 0; + padding: 0; + height: 100%; + width: 100%; + overflow-x: hidden; + } + html { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + } + #root { + height: 100%; + width: 100%; + max-width: 100vw; + overflow-x: hidden; + } + main { + max-width: 100%; + overflow-x: hidden; + } + + /* Scrollbar */ + ::-webkit-scrollbar { width: 8px; height: 8px; } + ::-webkit-scrollbar-track { background: transparent; } + ::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.15); border-radius: 4px; } + ::-webkit-scrollbar-thumb:hover { background: rgba(0,0,0,0.25); } + + /* Selection & Focus */ + ::selection { background: rgba(0,86,140,0.2); color: inherit; } + :focus-visible { outline: 2px solid #00568C; outline-offset: 2px; border-radius: 4px; } + + /* Base transitions */ + a { transition: color 0.15s ease; } + button { transition: all 0.15s ease; } + table { border-collapse: separate; border-spacing: 0; } + + /* ===== SIDEBAR POLISH ===== */ + nav[aria-label="sidebar nav"] a[class*="SidebarItem"] { + border-radius: 8px !important; + margin: 2px 8px !important; + transition: all 0.2s ease !important; + } + nav[aria-label="sidebar nav"] a[class*="SidebarItem"]:hover { + background: rgba(255,255,255,0.1) !important; + } + nav[aria-label="sidebar nav"] hr { + opacity: 0.12; + margin: 8px 16px; + } + + /* ===== CARD HOVER EFFECTS ===== */ + [class*="MuiCard-root"], + [class*="BackstageInfoCard"] { + transition: box-shadow 0.25s ease, transform 0.25s ease !important; + } + [class*="MuiCard-root"]:hover, + [class*="BackstageInfoCard"]:hover { + box-shadow: 0 8px 24px rgba(0,0,0,0.10), 0 2px 8px rgba(0,0,0,0.06) !important; + transform: translateY(-2px); + } + + /* InfoCard header subtle gradient */ + [class*="BackstageInfoCard"] [class*="header"] { + border-bottom: 1px solid rgba(0,0,0,0.06); + } + + /* ===== TABLE STYLING ===== */ + table thead th, + [class*="MuiTableCell-head"] { + font-weight: 700 !important; + text-transform: uppercase; + font-size: 11px !important; + letter-spacing: 0.5px; + opacity: 0.7; + } + table tbody tr, + [class*="MuiTableRow-root"] { + transition: background-color 0.15s ease; + } + table tbody tr:hover, + [class*="MuiTableRow-root"]:hover { + background-color: rgba(0,86,140,0.04) !important; + } + table tbody tr:nth-of-type(even), + [class*="MuiTableRow-root"]:nth-of-type(even) { + background-color: rgba(0,86,140,0.015); + } + + /* ===== TAB BAR POLISH ===== */ + [role="tablist"] { + border-bottom: 2px solid rgba(0,0,0,0.06); + } + [role="tab"] { + font-weight: 500 !important; + text-transform: none !important; + letter-spacing: 0.3px; + transition: color 0.2s ease, background-color 0.2s ease !important; + border-radius: 8px 8px 0 0; + min-height: 42px !important; + } + [role="tab"]:hover { + background-color: rgba(0,86,140,0.04); + } + [role="tab"][aria-selected="true"] { + font-weight: 600 !important; + color: #FF9800 !important; + } + /* Orange tab indicator matching sidebar accent */ + [role="tablist"] [class*="MuiTabs-indicator"], + [role="tablist"] .MuiTabs-indicator, + [class*="PrivateTabIndicator"], + [class*="MuiTabs-indicator"] { + background-color: #FF9800 !important; + } + + /* ===== BACKSTAGE HEADER — match API page headerCardStyle ===== */ + main > header { + background: linear-gradient(135deg, #003D7A 0%, #00568C 50%, #1A8DFF 100%) !important; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='1368' height='400' fill='none'%3e%3cmask id='a' width='1368' height='401' x='0' y='0' maskUnits='userSpaceOnUse'%3e%3cpath fill='url(%23paint0_linear)' d='M437 116C223 116 112 0 112 0h1256v400c-82 0-225-21-282-109-112-175-436-175-649-175z'/%3e%3cpath fill='url(%23paint1_linear)' d='M1368 400V282C891-29 788 40 711 161 608 324 121 372 0 361v39h1368z'/%3e%3cpath fill='url(%23paint2_linear)' d='M1368 244v156H0V94c92-24 198-46 375 0l135 41c176 51 195 109 858 109z'/%3e%3cpath fill='url(%23paint3_linear)' d='M1252 400h116c-14-7-35-14-116-16-663-14-837-128-1013-258l-85-61C98 28 46 8 0 0v400h1252z'/%3e%3c/mask%3e%3cg mask='url(%23a)'%3e%3cpath fill='white' d='M-172-98h1671v601H-172z'/%3e%3c/g%3e%3cdefs%3e%3clinearGradient id='paint0_linear' x1='602' x2='1093.5' y1='-960.5' y2='272' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint1_linear' x1='482' x2='480' y1='1058.5' y2='70.5' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint2_linear' x1='424' x2='446.1' y1='-587.5' y2='274.6' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint3_linear' x1='587' x2='349' y1='-1120.5' y2='341' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e"), linear-gradient(135deg, #003D7A 0%, #00568C 50%, #1A8DFF 100%) !important; + background-size: cover, cover !important; + background-position: center !important; + border-radius: 16px !important; + box-shadow: 0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06) !important; + margin: 24px auto 24px auto !important; + padding: 40px 24px 32px !important; + text-align: center !important; + overflow: hidden !important; + min-height: 135px !important; + max-height: 135px !important; + display: block !important; + width: calc(100% - 56px) !important; + } + /* Title + subtitle container */ + main > header > div:first-child { + display: flex !important; + flex-direction: column !important; + align-items: center !important; + justify-content: center !important; + width: 100% !important; + } + main > header h1, + main > header h2, + main > header h3, + main > header h4, + main > header span, + main > header [class*="title"], + main > header [class*="subtitle"] { + text-align: center !important; + width: 100% !important; + } + /* Hide the actions/kebab menu container */ + main > header > div:last-child:not(:first-child) { + display: none !important; + } + + /* ===== ENTITY PAGE CARD SHADOWS ===== */ + article [class*="MuiPaper-root"], + [class*="BackstageContent"] [class*="MuiPaper-root"] { + border-radius: 16px !important; + box-shadow: 0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06) !important; + } + /* Don't apply to nested papers inside cards (dropdowns, popovers) */ + [class*="MuiPaper-root"] [class*="MuiPaper-root"] { + border-radius: 4px !important; + box-shadow: none !important; + } + + /* ===== TABLE CARDS ===== */ + /* Wrap tables in shadow/rounded style — use descendant selectors to reach deeply nested papers */ + [class*="BackstageContent"] [class*="BackstageTable-root"] > [class*="MuiPaper-root"] { + border-radius: 16px !important; + box-shadow: 0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06) !important; + overflow: hidden; + } + + /* ===== ORANGE ACCENT BUTTONS ===== */ + [class*="BackstageContentHeader"] button, + [class*="BackstageContentHeader"] a[class*="MuiButton"], + button[class*="MuiButton-containedPrimary"], + a[class*="MuiButton-containedPrimary"] { + background: linear-gradient(180deg, #FFB74D 0%, #FF9800 100%) !important; + background-image: linear-gradient(180deg, #FFB74D 0%, #FF9800 100%) !important; + color: #fff !important; + border: none !important; + } + button[class*="MuiButton-containedPrimary"]:hover, + a[class*="MuiButton-containedPrimary"]:hover { + background: linear-gradient(180deg, #FF9800 0%, #F57C00 100%) !important; + background-image: linear-gradient(180deg, #FF9800 0%, #F57C00 100%) !important; + box-shadow: 0 4px 12px rgba(255,152,0,0.3) !important; + } + + /* Filter dropdown button accent */ + button[aria-label="Toggle filters"] { + border-color: #FF9800 !important; + color: #FF9800 !important; + } + + /* ===== OUTLINED BUTTONS — match Filters button style (orange outline, pill shape, subtle gradient) ===== */ + button[class*="MuiButton-outlined"], + a[class*="MuiButton-outlined"] { + color: #FF9800 !important; + border: 1px solid rgba(255,152,0,0.35) !important; + border-radius: 20px !important; + padding: 8px 16px !important; + font-size: 14px !important; + font-weight: 500 !important; + text-transform: none !important; + transition: all 0.2s ease !important; + background: linear-gradient(180deg, rgba(255,152,0,0.04) 0%, rgba(255,152,0,0.01) 100%) !important; + box-shadow: 0 1px 3px rgba(255,152,0,0.08), 0 1px 2px rgba(0,0,0,0.04) !important; + } + button[class*="MuiButton-outlined"]:hover, + a[class*="MuiButton-outlined"]:hover { + background: linear-gradient(180deg, rgba(255,152,0,0.12) 0%, rgba(255,152,0,0.06) 100%) !important; + border-color: rgba(255,152,0,0.6) !important; + box-shadow: 0 3px 8px rgba(255,152,0,0.15), 0 1px 3px rgba(0,0,0,0.06) !important; + transform: translateY(-1px); + } + + /* ===== OWNERSHIP / ENTITY TAGS — stand out with accent color ===== */ + [class*="MuiChip-root"] { + transition: all 0.15s ease !important; + font-weight: 500 !important; + background: linear-gradient(135deg, rgba(0,86,140,0.08) 0%, rgba(26,141,255,0.06) 100%) !important; + color: #00568C !important; + border: 1px solid rgba(0,86,140,0.15) !important; + box-shadow: 0 1px 3px rgba(0,86,140,0.08) !important; + } + [class*="MuiChip-root"]:hover { + background: linear-gradient(135deg, rgba(0,86,140,0.14) 0%, rgba(26,141,255,0.10) 100%) !important; + box-shadow: 0 2px 6px rgba(0,86,140,0.12) !important; + transform: translateY(-1px); + } + /* Ownership links in template cards */ + [class*="MuiCardActions"] a, + [class*="MuiCardActions"] span[class*="MuiTypography"] { + color: #00568C !important; + font-weight: 500 !important; + } + + /* ===== CONTENT HEADER — transparent background ===== */ + [class*="BackstageContentHeader-container"] { + background: transparent !important; + border-radius: 16px !important; + box-shadow: none !important; + padding: 12px 16px !important; + margin-bottom: 24px !important; + display: flex; + align-items: center; + } + + /* ===== FILTER SIDEBARS ===== */ + /* Hide all filter sidebars — catalog uses empty filters, docs/create hidden via CSS */ + [class*="CatalogFilterLayout-filters"], + article > [class*="MuiGrid-container"] > [class*="MuiGrid-grid-lg-2"] { + display: none !important; + } + /* Make content area take full width */ + [class*="CatalogFilterLayout-content"], + article > [class*="MuiGrid-container"] > [class*="MuiGrid-grid-lg-10"] { + flex: 1 !important; + max-width: 100% !important; + flex-basis: 100% !important; + } + + /* ===== DARK MODE OVERRIDES (detected via JS class on html) ===== */ + .backstage-dark ::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.15); } + .backstage-dark ::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,0.25); } + .backstage-dark ::selection { background: rgba(77,166,255,0.25); } + .backstage-dark :focus-visible { outline-color: #4DA6FF; } + .backstage-dark [class*="MuiCard-root"]:hover, + .backstage-dark [class*="BackstageInfoCard"]:hover { + box-shadow: 0 8px 24px rgba(0,0,0,0.3), 0 2px 8px rgba(0,0,0,0.2) !important; + } + .backstage-dark [class*="BackstageInfoCard"] [class*="header"] { + border-bottom-color: rgba(255,255,255,0.06); + } + .backstage-dark table tbody tr:hover, + .backstage-dark [class*="MuiTableRow-root"]:hover { + background-color: rgba(77,166,255,0.06) !important; + } + .backstage-dark table tbody tr:nth-of-type(even), + .backstage-dark [class*="MuiTableRow-root"]:nth-of-type(even) { + background-color: rgba(255,255,255,0.015); + } + .backstage-dark [role="tablist"] { border-bottom-color: rgba(255,255,255,0.06); } + .backstage-dark [role="tab"]:hover { background-color: rgba(77,166,255,0.06); } + .backstage-dark [role="tab"][aria-selected="true"] { + color: #FFB74D !important; + } + .backstage-dark [role="tablist"] [class*="MuiTabs-indicator"], + .backstage-dark [class*="PrivateTabIndicator"], + .backstage-dark [class*="MuiTabs-indicator"] { + background-color: #FFB74D !important; + } + /* Dark mode header — deeper blue with subtle wave */ + .backstage-dark main > header { + background: linear-gradient(135deg, #0D1B2A 0%, #1B3A5C 50%, #2E6BA6 100%) !important; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='1368' height='400' fill='none'%3e%3cmask id='a' width='1368' height='401' x='0' y='0' maskUnits='userSpaceOnUse'%3e%3cpath fill='url(%23paint0_linear)' d='M437 116C223 116 112 0 112 0h1256v400c-82 0-225-21-282-109-112-175-436-175-649-175z'/%3e%3cpath fill='url(%23paint1_linear)' d='M1368 400V282C891-29 788 40 711 161 608 324 121 372 0 361v39h1368z'/%3e%3cpath fill='url(%23paint2_linear)' d='M1368 244v156H0V94c92-24 198-46 375 0l135 41c176 51 195 109 858 109z'/%3e%3cpath fill='url(%23paint3_linear)' d='M1252 400h116c-14-7-35-14-116-16-663-14-837-128-1013-258l-85-61C98 28 46 8 0 0v400h1252z'/%3e%3c/mask%3e%3cg mask='url(%23a)'%3e%3cpath fill='rgba(255,255,255,0.08)' d='M-172-98h1671v601H-172z'/%3e%3c/g%3e%3cdefs%3e%3clinearGradient id='paint0_linear' x1='602' x2='1093.5' y1='-960.5' y2='272' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint1_linear' x1='482' x2='480' y1='1058.5' y2='70.5' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint2_linear' x1='424' x2='446.1' y1='-587.5' y2='274.6' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint3_linear' x1='587' x2='349' y1='-1120.5' y2='341' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e"), linear-gradient(135deg, #0D1B2A 0%, #1B3A5C 50%, #2E6BA6 100%) !important; + box-shadow: 0 4px 24px rgba(0,0,0,0.3), 0 1.5px 6px rgba(0,0,0,0.15) !important; + } + /* Orange accent buttons in dark mode */ + .backstage-dark button[class*="MuiButton-containedPrimary"], + .backstage-dark a[class*="MuiButton-containedPrimary"] { + background: linear-gradient(180deg, #FFB74D 0%, #FF9800 100%) !important; + background-image: linear-gradient(180deg, #FFB74D 0%, #FF9800 100%) !important; + color: #fff !important; + } + .backstage-dark button[class*="MuiButton-containedPrimary"]:hover, + .backstage-dark a[class*="MuiButton-containedPrimary"]:hover { + background: linear-gradient(180deg, #FF9800 0%, #F57C00 100%) !important; + background-image: linear-gradient(180deg, #FF9800 0%, #F57C00 100%) !important; + } + /* Outlined buttons in dark mode */ + .backstage-dark button[class*="MuiButton-outlined"], + .backstage-dark a[class*="MuiButton-outlined"] { + color: #FFB74D !important; + border-color: rgba(255,183,77,0.35) !important; + background: linear-gradient(180deg, rgba(255,183,77,0.06) 0%, rgba(255,183,77,0.02) 100%) !important; + box-shadow: 0 1px 3px rgba(255,183,77,0.1), 0 1px 2px rgba(0,0,0,0.1) !important; + } + .backstage-dark button[class*="MuiButton-outlined"]:hover, + .backstage-dark a[class*="MuiButton-outlined"]:hover { + background: linear-gradient(180deg, rgba(255,183,77,0.14) 0%, rgba(255,183,77,0.06) 100%) !important; + border-color: rgba(255,183,77,0.6) !important; + box-shadow: 0 3px 8px rgba(255,183,77,0.18), 0 1px 3px rgba(0,0,0,0.12) !important; + } + .backstage-dark button[aria-label="Toggle filters"] { + color: #FFB74D !important; + border-color: rgba(255,183,77,0.35) !important; + } + /* Chips/tags in dark mode */ + .backstage-dark [class*="MuiChip-root"] { + background: linear-gradient(135deg, rgba(77,166,255,0.12) 0%, rgba(77,166,255,0.06) 100%) !important; + color: #4DA6FF !important; + border: 1px solid rgba(77,166,255,0.2) !important; + box-shadow: 0 1px 3px rgba(77,166,255,0.1) !important; + } + .backstage-dark [class*="MuiChip-root"]:hover { + background: linear-gradient(135deg, rgba(77,166,255,0.18) 0%, rgba(77,166,255,0.10) 100%) !important; + box-shadow: 0 2px 6px rgba(77,166,255,0.15) !important; + } + /* Ownership links in dark mode */ + .backstage-dark [class*="MuiCardActions"] a, + .backstage-dark [class*="MuiCardActions"] span[class*="MuiTypography"] { + color: #4DA6FF !important; + } + /* Homepage dark mode overrides */ + .backstage-dark .cnoe-hero-header { + background: linear-gradient(135deg, #0D1B2A 0%, #1B3A5C 50%, #2E6BA6 100%) !important; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='1368' height='400' fill='none'%3e%3cmask id='a' width='1368' height='401' x='0' y='0' maskUnits='userSpaceOnUse'%3e%3cpath fill='url(%23paint0_linear)' d='M437 116C223 116 112 0 112 0h1256v400c-82 0-225-21-282-109-112-175-436-175-649-175z'/%3e%3cpath fill='url(%23paint1_linear)' d='M1368 400V282C891-29 788 40 711 161 608 324 121 372 0 361v39h1368z'/%3e%3cpath fill='url(%23paint2_linear)' d='M1368 244v156H0V94c92-24 198-46 375 0l135 41c176 51 195 109 858 109z'/%3e%3cpath fill='url(%23paint3_linear)' d='M1252 400h116c-14-7-35-14-116-16-663-14-837-128-1013-258l-85-61C98 28 46 8 0 0v400h1252z'/%3e%3c/mask%3e%3cg mask='url(%23a)'%3e%3cpath fill='rgba(255,255,255,0.08)' d='M-172-98h1671v601H-172z'/%3e%3c/g%3e%3cdefs%3e%3clinearGradient id='paint0_linear' x1='602' x2='1093.5' y1='-960.5' y2='272' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint1_linear' x1='482' x2='480' y1='1058.5' y2='70.5' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint2_linear' x1='424' x2='446.1' y1='-587.5' y2='274.6' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint3_linear' x1='587' x2='349' y1='-1120.5' y2='341' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e"), linear-gradient(135deg, #0D1B2A 0%, #1B3A5C 50%, #2E6BA6 100%) !important; + box-shadow: 0 4px 24px rgba(0,0,0,0.3), 0 1.5px 6px rgba(0,0,0,0.15) !important; + } + /* Homepage cards, search bar, and tool cards in dark mode */ + .backstage-dark .cnoe-toolbar-card, + .backstage-dark .cnoe-table-card, + .backstage-dark .cnoe-card { + background: #1E1E1E !important; + border-color: rgba(255,255,255,0.08) !important; + box-shadow: 0 4px 20px rgba(0,0,0,0.25), 0 1.5px 6px rgba(0,0,0,0.15) !important; + } + .backstage-dark .cnoe-card a[style*="rgba(25, 118, 210"] { + background: rgba(77,166,255,0.06) !important; + border-color: rgba(77,166,255,0.12) !important; + color: #B0BEC5 !important; + } + /* Filter dropdown in dark mode */ + .backstage-dark div[style*="background-paper, #fff"] { + background: #1E1E1E !important; + border-color: rgba(255,255,255,0.08) !important; + } + + /* Consistent page content padding */ + [class*="BackstageContent-root"] { + padding: 0 0.3vw 24px !important; + } +`; +document.head.appendChild(style); + +// Detect Backstage dark mode and toggle a CSS class for dark overrides +const detectDarkMode = () => { + const theme = localStorage.getItem('theme'); + if (theme) { + document.documentElement.classList.toggle('backstage-dark', theme.includes('dark')); + return; + } + const bg = window.getComputedStyle(document.body).backgroundColor; + const match = bg.match(/\d+/g); + if (match) { + const brightness = (parseInt(match[0]) + parseInt(match[1]) + parseInt(match[2])) / 3; + document.documentElement.classList.toggle('backstage-dark', brightness < 128); + } +}; +const observer = new MutationObserver(detectDarkMode); +observer.observe(document.body, { attributes: true, attributeFilter: ['style', 'class'] }); +observer.observe(document.documentElement, { childList: true, subtree: true }); +window.addEventListener('storage', detectDarkMode); +setInterval(detectDarkMode, 500); +detectDarkMode(); + +async function startApp() { + if ( + process.env.MOCK_MODE === 'true' || + new URLSearchParams(window.location.search).has('mock') + ) { + const { worker } = await import('./mocks/browser'); + await worker.start({ onUnhandledRequest: 'bypass' }); + console.log('[MSW] Mock service worker started'); + } + + ReactDOM.createRoot(document.getElementById('root')!).render(); +} + +startApp(); diff --git a/packages/app/src/mocks/browser.ts b/packages/app/src/mocks/browser.ts new file mode 100644 index 0000000..750e031 --- /dev/null +++ b/packages/app/src/mocks/browser.ts @@ -0,0 +1,4 @@ +import { setupWorker } from 'msw'; +import { handlers } from './handlers'; + +export const worker = setupWorker(...handlers); diff --git a/packages/app/src/mocks/fixtures/argo-workflow-templates.json b/packages/app/src/mocks/fixtures/argo-workflow-templates.json new file mode 100644 index 0000000..d37896a --- /dev/null +++ b/packages/app/src/mocks/fixtures/argo-workflow-templates.json @@ -0,0 +1,15 @@ +{ + "apiVersion": "argoproj.io/v1alpha1", + "kind": "WorkflowTemplateList", + "metadata": {}, + "items": [ + { + "metadata": { "name": "ci-build-template", "namespace": "default" }, + "spec": { "entrypoint": "build-and-test" } + }, + { + "metadata": { "name": "deploy-template", "namespace": "default" }, + "spec": { "entrypoint": "deploy-to-env" } + } + ] +} diff --git a/packages/app/src/mocks/fixtures/argo-workflows.json b/packages/app/src/mocks/fixtures/argo-workflows.json new file mode 100644 index 0000000..67991b0 --- /dev/null +++ b/packages/app/src/mocks/fixtures/argo-workflows.json @@ -0,0 +1,22 @@ +{ + "apiVersion": "argoproj.io/v1alpha1", + "kind": "WorkflowList", + "metadata": {}, + "items": [ + { + "metadata": { "name": "ci-build-pipeline-abc12", "namespace": "default" }, + "spec": { "entrypoint": "build-and-test" }, + "status": { "phase": "Running", "progress": "2/5", "startedAt": "2026-04-15T10:00:00Z" } + }, + { + "metadata": { "name": "deploy-staging-def34", "namespace": "default" }, + "spec": { "entrypoint": "deploy" }, + "status": { "phase": "Succeeded", "progress": "3/3", "startedAt": "2026-04-15T08:00:00Z", "finishedAt": "2026-04-15T08:15:00Z" } + }, + { + "metadata": { "name": "data-pipeline-ghi56", "namespace": "default" }, + "spec": { "entrypoint": "etl-pipeline" }, + "status": { "phase": "Failed", "progress": "1/4", "startedAt": "2026-04-15T06:00:00Z", "finishedAt": "2026-04-15T06:30:00Z" } + } + ] +} diff --git a/packages/app/src/mocks/fixtures/spark-applications.json b/packages/app/src/mocks/fixtures/spark-applications.json new file mode 100644 index 0000000..bbb24e8 --- /dev/null +++ b/packages/app/src/mocks/fixtures/spark-applications.json @@ -0,0 +1,27 @@ +{ + "apiVersion": "sparkoperator.k8s.io/v1beta2", + "kind": "SparkApplicationList", + "items": [ + { + "apiVersion": "sparkoperator.k8s.io/v1beta2", + "kind": "SparkApplication", + "metadata": { "name": "spark-etl-job", "namespace": "default", "creationTimestamp": "2026-04-15T10:00:00Z" }, + "spec": { "type": "Python", "mode": "cluster", "image": "spark:3.5.0", "sparkVersion": "3.5.0", "mainApplicationFile": "local:///opt/spark/examples/src/main/python/pi.py", "driver": { "cores": 1, "memory": "512m", "podName": "spark-etl-job-driver" }, "executor": { "cores": 1, "instances": 2, "memory": "512m" } }, + "status": { "applicationState": { "state": "RUNNING" }, "driverInfo": { "podName": "spark-etl-job-driver", "webUIPort": 4040 }, "executorState": { "spark-etl-job-exec-1": "RUNNING", "spark-etl-job-exec-2": "RUNNING" } } + }, + { + "apiVersion": "sparkoperator.k8s.io/v1beta2", + "kind": "SparkApplication", + "metadata": { "name": "spark-analytics", "namespace": "default", "creationTimestamp": "2026-04-15T08:00:00Z" }, + "spec": { "type": "Scala", "mode": "cluster", "image": "spark:3.5.0", "sparkVersion": "3.5.0", "mainClass": "org.example.Analytics", "driver": { "cores": 2, "memory": "1g", "podName": "spark-analytics-driver" }, "executor": { "cores": 2, "instances": 4, "memory": "2g" } }, + "status": { "applicationState": { "state": "COMPLETED" }, "driverInfo": { "podName": "spark-analytics-driver" }, "terminationTime": "2026-04-15T09:30:00Z" } + }, + { + "apiVersion": "sparkoperator.k8s.io/v1beta2", + "kind": "SparkApplication", + "metadata": { "name": "spark-ml-training", "namespace": "default", "creationTimestamp": "2026-04-15T07:00:00Z" }, + "spec": { "type": "Python", "mode": "cluster", "image": "spark:3.5.0", "sparkVersion": "3.5.0", "mainApplicationFile": "local:///opt/spark/ml/train.py", "driver": { "cores": 2, "memory": "2g", "podName": "spark-ml-training-driver" }, "executor": { "cores": 4, "instances": 8, "memory": "4g" } }, + "status": { "applicationState": { "state": "FAILED", "errorMessage": "OutOfMemoryError: Java heap space" }, "driverInfo": { "podName": "spark-ml-training-driver" }, "terminationTime": "2026-04-15T07:45:00Z" } + } + ] +} diff --git a/packages/app/src/mocks/fixtures/spark-logs.txt b/packages/app/src/mocks/fixtures/spark-logs.txt new file mode 100644 index 0000000..ee2c0ca --- /dev/null +++ b/packages/app/src/mocks/fixtures/spark-logs.txt @@ -0,0 +1,7 @@ +2026-04-15 10:00:01 INFO SparkContext: Running Spark version 3.5.0 +2026-04-15 10:00:02 INFO SparkContext: Submitted application: spark-etl-job +2026-04-15 10:00:03 INFO SecurityManager: Changing view acls to: spark +2026-04-15 10:00:05 INFO Utils: Successfully started service 'sparkDriver' on port 7078 +2026-04-15 10:00:10 INFO SparkContext: Added JAR local:///opt/spark/examples/jars/spark-examples.jar +2026-04-15 10:00:15 INFO DAGScheduler: Job 0 finished: reduce at SparkPi.scala:38, took 5.123 s +2026-04-15 10:00:16 INFO SparkContext: Starting job: Pi is roughly 3.14159 diff --git a/packages/app/src/mocks/fixtures/terraform-file-list.json b/packages/app/src/mocks/fixtures/terraform-file-list.json new file mode 100644 index 0000000..5cc8ae0 --- /dev/null +++ b/packages/app/src/mocks/fixtures/terraform-file-list.json @@ -0,0 +1 @@ +[{ "Key": "terraform/platform/terraform.tfstate", "TFStateContents": null }] diff --git a/packages/app/src/mocks/fixtures/terraform-state.json b/packages/app/src/mocks/fixtures/terraform-state.json new file mode 100644 index 0000000..3e5477b --- /dev/null +++ b/packages/app/src/mocks/fixtures/terraform-state.json @@ -0,0 +1,41 @@ +{ + "version": 4, + "terraform_version": "1.5.0", + "serial": 42, + "outputs": [ + { "value": "vpc-0abc123def456", "type": "string" }, + { "value": "subnet-0def789abc012", "type": "string" } + ], + "resources": [ + { + "mode": "managed", + "type": "aws_vpc", + "name": "main", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [{ + "attributes": { "id": "vpc-0abc123def456", "cidr_block": "10.0.0.0/16", "name": "cnoe-platform-vpc", "enable_dns_support": true, "enable_dns_hostnames": true }, + "dependencies": [] + }] + }, + { + "mode": "managed", + "type": "aws_subnet", + "name": "public", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [{ + "attributes": { "id": "subnet-0def789abc012", "vpc_id": "vpc-0abc123def456", "cidr_block": "10.0.1.0/24", "availability_zone": "us-west-2a", "name": "cnoe-public-subnet" }, + "dependencies": ["managed.aws_vpc.main"] + }] + }, + { + "mode": "managed", + "type": "aws_security_group", + "name": "allow_tls", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [{ + "attributes": { "id": "sg-0ghi345jkl678", "vpc_id": "vpc-0abc123def456", "name": "allow-tls", "description": "Allow TLS inbound traffic" }, + "dependencies": ["managed.aws_vpc.main"] + }] + } + ] +} diff --git a/packages/app/src/mocks/handlers.ts b/packages/app/src/mocks/handlers.ts new file mode 100644 index 0000000..d811b53 --- /dev/null +++ b/packages/app/src/mocks/handlers.ts @@ -0,0 +1 @@ +export { handlers } from './handlers/index'; diff --git a/packages/app/src/mocks/handlers/index.ts b/packages/app/src/mocks/handlers/index.ts new file mode 100644 index 0000000..6f43f02 --- /dev/null +++ b/packages/app/src/mocks/handlers/index.ts @@ -0,0 +1,4 @@ +import { kubernetesHandlers } from './kubernetes'; +import { terraformHandlers } from './terraform'; + +export const handlers = [...kubernetesHandlers, ...terraformHandlers]; diff --git a/packages/app/src/mocks/handlers/kubernetes.ts b/packages/app/src/mocks/handlers/kubernetes.ts new file mode 100644 index 0000000..2b70478 --- /dev/null +++ b/packages/app/src/mocks/handlers/kubernetes.ts @@ -0,0 +1,96 @@ +import { rest } from 'msw'; +import sparkApplications from '../fixtures/spark-applications.json'; +import argoWorkflows from '../fixtures/argo-workflows.json'; +import argoWorkflowTemplates from '../fixtures/argo-workflow-templates.json'; + +// Spark logs inline — the fixture is a .txt file which can't be JSON-imported +const SPARK_LOGS = `2026-04-15 10:00:01 INFO SparkContext: Running Spark version 3.5.0 +2026-04-15 10:00:02 INFO SparkContext: Submitted application: spark-etl-job +2026-04-15 10:00:05 INFO Utils: Successfully started service 'sparkDriver' on port 7078 +2026-04-15 10:00:15 INFO DAGScheduler: Job 0 finished: reduce at SparkPi.scala:38, took 5.123 s`; + +// --------------------------------------------------------------------------- +// Kubernetes proxy handlers +// +// KubernetesBackendClient.proxy() builds the URL as: +// `${discoveryApi.getBaseUrl("kubernetes")}/proxy${options.path}` +// +// So all k8s proxy requests are GETs to /api/kubernetes/proxy/. +// --------------------------------------------------------------------------- + +export const kubernetesHandlers = [ + // --- Apache Spark (sparkoperator CRDs) --- + + // List spark applications: + // /api/kubernetes/proxy/apis/sparkoperator.k8s.io/v1beta2/namespaces/{ns}/sparkapplications + rest.get('*/api/kubernetes/proxy/apis/sparkoperator.k8s.io/*/namespaces/*/sparkapplications', (_req, res, ctx) => { + return res(ctx.json(sparkApplications)); + }), + + // Single spark application: + // /api/kubernetes/proxy/apis/sparkoperator.k8s.io/v1beta2/namespaces/{ns}/sparkapplications/{name} + rest.get('*/api/kubernetes/proxy/apis/sparkoperator.k8s.io/*/namespaces/*/sparkapplications/*', (_req, res, ctx) => { + // Return the first item from the list as a single resource + const items = (sparkApplications as any).items; + if (items && items.length > 0) { + return res(ctx.json(items[0])); + } + return res(ctx.json(sparkApplications)); + }), + + // Pod logs: + // /api/kubernetes/proxy/api/v1/namespaces/{ns}/pods/{pod}/log + rest.get('*/api/kubernetes/proxy/api/v1/namespaces/*/pods/*/log', (_req, res, ctx) => { + return res(ctx.text(SPARK_LOGS)); + }), + + // Pod details (for getContainers): + // /api/kubernetes/proxy/api/v1/namespaces/{ns}/pods/{pod} + rest.get('*/api/kubernetes/proxy/api/v1/namespaces/*/pods/*', (_req, res, ctx) => { + return res( + ctx.json({ + metadata: { name: 'spark-etl-job-driver' }, + spec: { + containers: [{ name: 'spark-kubernetes-driver' }], + }, + }), + ); + }), + + // --- Argo Workflows (via kubernetes proxy) --- + + // List workflows through k8s proxy: + // /api/kubernetes/proxy/apis/argoproj.io/v1alpha1/namespaces/{ns}/workflows + // /api/kubernetes/proxy/apis/argoproj.io/v1alpha1/workflows (all namespaces) + rest.get('*/api/kubernetes/proxy/apis/argoproj.io/*/namespaces/*/workflows', (_req, res, ctx) => { + return res(ctx.json(argoWorkflows)); + }), + rest.get('*/api/kubernetes/proxy/apis/argoproj.io/*/workflows', (_req, res, ctx) => { + return res(ctx.json(argoWorkflows)); + }), + + // --- Argo Workflows (via backstage backend proxy) --- + // + // ArgoWorkflows.fetchFromPath() builds: + // `${discoveryApi.getBaseUrl("proxy")}/argo-workflows/api${path}` + // where path is e.g. /api/v1/workflows/{ns} + + // Workflows through backend proxy + rest.get('*/api/proxy/argo-workflows/api/api/v1/workflows/*', (_req, res, ctx) => { + return res(ctx.json(argoWorkflows)); + }), + + // Workflow templates through backend proxy + rest.get('*/api/proxy/argo-workflows/api/api/v1/workflow-templates/*', (_req, res, ctx) => { + return res(ctx.json(argoWorkflowTemplates)); + }), + + // --- Kubernetes clusters endpoint --- + rest.get('*/api/kubernetes/clusters', (_req, res, ctx) => { + return res( + ctx.json({ + items: [{ name: 'local-cluster', authProvider: 'serviceAccount' }], + }), + ); + }), +]; diff --git a/packages/app/src/mocks/handlers/terraform.ts b/packages/app/src/mocks/handlers/terraform.ts new file mode 100644 index 0000000..d74a297 --- /dev/null +++ b/packages/app/src/mocks/handlers/terraform.ts @@ -0,0 +1,48 @@ +import { rest } from 'msw'; +import terraformState from '../fixtures/terraform-state.json'; +import terraformFileList from '../fixtures/terraform-file-list.json'; + +// --------------------------------------------------------------------------- +// Terraform handlers +// +// The Terraform client uses two patterns: +// 1. Backend routes via fetchURL(): POST to /api/terraform/ +// 2. K8s secrets via kubernetesApi.proxy(): GET to /api/kubernetes/proxy/api/v1/namespaces/{ns}/secrets/{name} +// --------------------------------------------------------------------------- + +export const terraformHandlers = [ + // deflate — POST /api/terraform/deflate + rest.post('*/api/terraform/deflate', (_req, res, ctx) => { + return res(ctx.json(terraformState)); + }), + + // S3 file list — POST /api/terraform/getFileList + rest.post('*/api/terraform/getFileList', (_req, res, ctx) => { + return res(ctx.json(terraformFileList)); + }), + + // Local file list — POST /api/terraform/getLocalFileList + rest.post('*/api/terraform/getLocalFileList', (_req, res, ctx) => { + return res(ctx.json(terraformFileList)); + }), + + // TF state file — POST /api/terraform/getTFStateFile + rest.post('*/api/terraform/getTFStateFile', (_req, res, ctx) => { + return res(ctx.json(terraformState)); + }), + + // K8s secret for terraform state (secret-based state storage) + // Terraform.getSecret() calls kubernetesApi.proxy() with path: + // /api/v1/namespaces/{ns}/secrets/{secretName} + // which becomes GET /api/kubernetes/proxy/api/v1/namespaces/{ns}/secrets/{name} + rest.get('*/api/kubernetes/proxy/api/v1/namespaces/*/secrets/*', (_req, res, ctx) => { + return res( + ctx.json({ + metadata: { name: 'terraform-state' }, + data: { + tfstate: btoa(JSON.stringify(terraformState)), + }, + }), + ); + }), +]; diff --git a/packages/app/src/setupTests.ts b/packages/app/src/setupTests.ts deleted file mode 100644 index 7b0828b..0000000 --- a/packages/app/src/setupTests.ts +++ /dev/null @@ -1 +0,0 @@ -import '@testing-library/jest-dom'; diff --git a/packages/app/src/theme.ts b/packages/app/src/theme.ts new file mode 100644 index 0000000..c9043ef --- /dev/null +++ b/packages/app/src/theme.ts @@ -0,0 +1,481 @@ +import React from 'react'; +import { + createUnifiedTheme, + UnifiedThemeProvider, + defaultTypography, + palettes, + genPageTheme, + shapes, +} from '@backstage/theme'; +import type { AppTheme } from '@backstage/core-plugin-api'; + +const fontFamily = + '"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif'; + +const cnoeTypography = { + ...defaultTypography, + fontFamily, +}; + +// All page types use the same CNOE blue gradient +const cnoePageThemeLight = { + home: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave }), + documentation: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave2 }), + tool: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.round }), + service: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave }), + website: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave }), + library: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave }), + other: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave }), + app: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave }), + apis: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave }), + component: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave }), + resource: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave }), + system: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave }), + domain: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave }), + group: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave }), + user: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave }), + template: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave }), + card: genPageTheme({ colors: ['#003D7A', '#1A8DFF'], shape: shapes.wave }), +}; + +const cnoePageThemeDark = { + home: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave }), + documentation: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave2 }), + tool: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.round }), + service: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave }), + website: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave }), + library: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave }), + other: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave }), + app: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave }), + apis: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave }), + component: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave }), + resource: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave }), + system: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave }), + domain: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave }), + group: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave }), + user: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave }), + template: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave }), + card: genPageTheme({ colors: ['#0D1117', '#003D68'], shape: shapes.wave }), +}; + +// Shadow tokens +const shadows = { + card: '0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.06)', + cardHover: '0 10px 25px rgba(0,0,0,0.1), 0 6px 10px rgba(0,0,0,0.08)', + elevated: '0 20px 40px rgba(0,0,0,0.12)', + cardHoverDark: '0 10px 25px rgba(0,0,0,0.25), 0 6px 10px rgba(0,0,0,0.2)', + elevatedDark: '0 20px 40px rgba(0,0,0,0.3)', +}; + +// Option B: Vibrant — Light theme +const lightTheme = createUnifiedTheme({ + palette: { + ...palettes.light, + primary: { main: '#00568C' }, + secondary: { main: '#FF9800' }, + background: { default: '#F5F7FA', paper: '#FFFFFF' }, + text: { primary: '#212121', secondary: '#757575' }, + divider: '#EEEEEE', + navigation: { + background: '#00568C', + indicator: '#FF9800', + color: 'rgba(255,255,255,0.5)', + selectedColor: '#FFFFFF', + navItem: { hoverBackground: 'rgba(255,255,255,0.15)' }, + }, + }, + components: { + MuiCard: { + styleOverrides: { + root: { + borderRadius: '12px', + border: '1px solid #EEEEEE', + boxShadow: shadows.card, + transition: 'box-shadow 0.2s ease, transform 0.2s ease', + '&:hover': { + boxShadow: shadows.cardHover, + transform: 'translateY(-2px)', + }, + }, + }, + }, + MuiButton: { + styleOverrides: { + root: { + borderRadius: '8px', + textTransform: 'none', + fontWeight: 600, + transition: 'all 0.2s ease', + }, + containedPrimary: { + backgroundColor: '#00568C', + backgroundImage: 'linear-gradient(180deg, #006AA8 0%, #00568C 100%)', + '&:hover': { + backgroundColor: '#004070', + backgroundImage: 'linear-gradient(180deg, #00568C 0%, #004070 100%)', + boxShadow: '0 4px 12px rgba(0,86,140,0.3)', + }, + }, + containedSecondary: { + backgroundColor: '#FF9800', + color: '#fff', + '&:hover': { + backgroundColor: '#F57C00', + boxShadow: '0 4px 12px rgba(255,152,0,0.3)', + }, + }, + }, + }, + MuiChip: { + styleOverrides: { + root: { + borderRadius: '6px', + fontWeight: 500, + fontSize: '12px', + borderLeft: '3px solid transparent', + }, + colorPrimary: { + backgroundColor: '#E6F2FF', + color: '#00568C', + borderLeftColor: '#00568C', + }, + colorSecondary: { + backgroundColor: '#FFF3E0', + color: '#F57C00', + borderLeftColor: '#F57C00', + }, + }, + }, + MuiTab: { + styleOverrides: { + root: { + textTransform: 'none', + fontWeight: 500, + fontSize: '13px', + letterSpacing: '0.5px', + transition: 'color 0.2s ease', + }, + }, + }, + MuiTableRow: { + styleOverrides: { + root: { + '&:nth-of-type(even)': { + backgroundColor: 'rgba(0,86,140,0.02)', + }, + '&:hover': { + backgroundColor: 'rgba(0,86,140,0.05)', + }, + }, + }, + }, + MuiTableHead: { + styleOverrides: { + root: { + '& .MuiTableCell-head': { + fontWeight: 700, + backgroundColor: 'rgba(0,86,140,0.04)', + }, + }, + }, + }, + MuiInputBase: { + styleOverrides: { + root: { + borderRadius: '50px', + '&.Mui-focused': { + boxShadow: '0 0 0 3px rgba(0,86,140,0.15)', + }, + }, + }, + }, + MuiPaper: { + styleOverrides: { + root: { + borderRadius: '12px', + border: '1px solid #EEEEEE', + boxShadow: shadows.card, + transition: 'box-shadow 0.2s ease', + }, + elevation0: { border: 'none', boxShadow: 'none' }, + }, + }, + MuiLink: { + styleOverrides: { + root: { + transition: 'color 0.15s ease', + }, + }, + }, + MuiIconButton: { + styleOverrides: { + root: { + transition: 'background-color 0.15s ease', + }, + }, + }, + BackstageHeader: { + styleOverrides: { + header: { + boxShadow: '0 2px 8px rgba(0,0,0,0.1)', + }, + }, + }, + BackstageHeaderLabel: { + styleOverrides: { + root: { + fontSize: '14px', + }, + }, + }, + BackstageInfoCard: { + styleOverrides: { + header: { + borderBottom: '1px solid #EEEEEE', + }, + }, + }, + BackstageSidebarItem: { + styleOverrides: { + root: { + borderRadius: '8px', + transition: 'background-color 0.2s ease', + }, + }, + }, + BackstagePage: { + styleOverrides: { + root: { backgroundColor: '#F5F7FA' }, + }, + }, + BackstageContent: { + styleOverrides: { + root: { backgroundColor: '#F5F7FA' }, + }, + }, + }, + defaultPageTheme: 'home', + pageTheme: cnoePageThemeLight, + typography: cnoeTypography, +}); + +// Option B: Vibrant — Dark theme +const darkTheme = createUnifiedTheme({ + palette: { + ...palettes.dark, + primary: { main: '#4DA6FF' }, + secondary: { main: '#FFB74D' }, + background: { default: '#0D1117', paper: '#161B22' }, + text: { primary: '#E6E6E6', secondary: '#8B949E' }, + divider: '#30363D', + navigation: { + background: '#0D1117', + indicator: '#FFB74D', + color: '#6B778C', + selectedColor: '#4DA6FF', + navItem: { hoverBackground: 'rgba(77,166,255,0.1)' }, + }, + }, + components: { + MuiCssBaseline: { + styleOverrides: { + body: { backgroundColor: '#0D1117' }, + }, + }, + MuiCard: { + styleOverrides: { + root: { + borderRadius: '12px', + border: '1px solid #30363D', + backgroundColor: '#161B22', + boxShadow: shadows.card, + transition: 'box-shadow 0.2s ease, transform 0.2s ease', + '&:hover': { + boxShadow: shadows.cardHoverDark, + transform: 'translateY(-2px)', + }, + }, + }, + }, + MuiButton: { + styleOverrides: { + root: { + borderRadius: '8px', + textTransform: 'none', + fontWeight: 600, + transition: 'all 0.2s ease', + }, + containedPrimary: { + backgroundColor: '#4DA6FF', + backgroundImage: 'linear-gradient(180deg, #5DB3FF 0%, #4DA6FF 100%)', + color: '#0D1117', + '&:hover': { + backgroundColor: '#3A8FE0', + backgroundImage: 'linear-gradient(180deg, #4DA6FF 0%, #3A8FE0 100%)', + boxShadow: '0 4px 12px rgba(77,166,255,0.3)', + }, + }, + containedSecondary: { + backgroundColor: '#FFB74D', + color: '#212121', + '&:hover': { + backgroundColor: '#FFA726', + boxShadow: '0 4px 12px rgba(255,183,77,0.3)', + }, + }, + }, + }, + MuiChip: { + styleOverrides: { + root: { + borderRadius: '6px', + fontWeight: 500, + fontSize: '12px', + borderLeft: '3px solid transparent', + }, + colorPrimary: { + backgroundColor: 'rgba(77,166,255,0.15)', + color: '#4DA6FF', + borderLeftColor: '#4DA6FF', + }, + colorSecondary: { + backgroundColor: 'rgba(255,152,0,0.15)', + color: '#FFB74D', + borderLeftColor: '#FFB74D', + }, + }, + }, + MuiTab: { + styleOverrides: { + root: { + textTransform: 'none', + fontWeight: 500, + fontSize: '13px', + letterSpacing: '0.5px', + transition: 'color 0.2s ease', + }, + }, + }, + MuiTableRow: { + styleOverrides: { + root: { + '&:nth-of-type(even)': { + backgroundColor: 'rgba(255,255,255,0.02)', + }, + '&:hover': { + backgroundColor: 'rgba(255,255,255,0.05)', + }, + }, + }, + }, + MuiTableHead: { + styleOverrides: { + root: { + '& .MuiTableCell-head': { + fontWeight: 700, + backgroundColor: 'rgba(255,255,255,0.04)', + }, + }, + }, + }, + MuiInputBase: { + styleOverrides: { + root: { + borderRadius: '50px', + backgroundColor: '#161B22', + border: '1px solid #30363D', + color: '#C9D1D9', + '&.Mui-focused': { + boxShadow: '0 0 0 3px rgba(77,166,255,0.2)', + }, + }, + }, + }, + MuiPaper: { + styleOverrides: { + root: { + backgroundColor: '#161B22', + backgroundImage: 'none', + borderRadius: '12px', + border: '1px solid #30363D', + boxShadow: shadows.card, + transition: 'box-shadow 0.2s ease', + }, + elevation0: { border: 'none', boxShadow: 'none' }, + }, + }, + MuiLink: { + styleOverrides: { + root: { + transition: 'color 0.15s ease', + }, + }, + }, + MuiIconButton: { + styleOverrides: { + root: { + transition: 'background-color 0.15s ease', + }, + }, + }, + BackstageHeader: { + styleOverrides: { + header: { + boxShadow: '0 2px 8px rgba(0,0,0,0.25)', + }, + }, + }, + BackstageHeaderLabel: { + styleOverrides: { + root: { + fontSize: '14px', + }, + }, + }, + BackstageInfoCard: { + styleOverrides: { + header: { + borderBottom: '1px solid #30363D', + }, + }, + }, + BackstageSidebarItem: { + styleOverrides: { + root: { + borderRadius: '8px', + transition: 'background-color 0.2s ease', + }, + }, + }, + BackstagePage: { + styleOverrides: { + root: { backgroundColor: '#0D1117' }, + }, + }, + BackstageContent: { + styleOverrides: { + root: { backgroundColor: '#0D1117' }, + }, + }, + }, + defaultPageTheme: 'home', + pageTheme: cnoePageThemeDark, + typography: cnoeTypography, +}); + +// AppTheme exports for legacy createApp from @backstage/app-defaults +export const cnoeVibrantLightAppTheme: AppTheme = { + id: 'cnoe-light', + title: 'CNOE Light', + variant: 'light', + Provider: ({ children }) => + React.createElement(UnifiedThemeProvider, { theme: lightTheme, children }), +}; + +export const cnoeVibrantDarkAppTheme: AppTheme = { + id: 'cnoe-dark', + title: 'CNOE Dark', + variant: 'dark', + Provider: ({ children }) => + React.createElement(UnifiedThemeProvider, { theme: darkTheme, children }), +}; diff --git a/packages/app/tsconfig.json b/packages/app/tsconfig.json new file mode 100644 index 0000000..ffebe71 --- /dev/null +++ b/packages/app/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@backstage/cli/config/tsconfig.json", + "include": ["src"], + "exclude": ["node_modules"], + "compilerOptions": { + "outDir": "dist-types", + "rootDir": "src" + } +} diff --git a/packages/backend/.eslintrc.js b/packages/backend/.eslintrc.js deleted file mode 100644 index e2a53a6..0000000 --- a/packages/backend/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/backend/Dockerfile b/packages/backend/Dockerfile deleted file mode 100644 index 18548e9..0000000 --- a/packages/backend/Dockerfile +++ /dev/null @@ -1,52 +0,0 @@ -# This dockerfile builds an image for the backend package. -# It should be executed with the root of the repo as docker context. -# -# Before building this image, be sure to have run the following commands in the repo root: -# -# yarn install -# yarn tsc -# yarn build:backend -# -# Once the commands have been run, you can build the image using `yarn build-image` - -FROM node:18-bookworm-slim - -# Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend. -RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ - --mount=type=cache,target=/var/lib/apt,sharing=locked \ - apt-get update && \ - apt-get install -y --no-install-recommends python3 g++ build-essential && \ - yarn config set python /usr/bin/python3 - -# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image, -# in which case you should also move better-sqlite3 to "devDependencies" in package.json. -RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ - --mount=type=cache,target=/var/lib/apt,sharing=locked \ - apt-get update && \ - apt-get install -y --no-install-recommends libsqlite3-dev - -# From here on we use the least-privileged `node` user to run the backend. -USER node - -# This should create the app dir as `node`. -# If it is instead created as `root` then the `tar` command below will fail: `can't create directory 'packages/': Permission denied`. -# If this occurs, then ensure BuildKit is enabled (`DOCKER_BUILDKIT=1`) so the app dir is correctly created as `node`. -WORKDIR /app - -# This switches many Node.js dependencies to production mode. -ENV NODE_ENV production - -# Copy repo skeleton first, to avoid unnecessary docker cache invalidation. -# The skeleton contains the package.json of each package in the monorepo, -# and along with yarn.lock and the root package.json, that's enough to run yarn install. -COPY --chown=node:node yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./ -RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz - -RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \ - yarn install --frozen-lockfile --production --network-timeout 300000 - -# Then copy the rest of the backend bundle, along with any other files we might want. -COPY --chown=node:node packages/backend/dist/bundle.tar.gz app-config*.yaml ./ -RUN tar xzf bundle.tar.gz && rm bundle.tar.gz - -CMD ["node", "packages/backend", "--config", "app-config.yaml", "--config", "app-config.production.yaml"] diff --git a/packages/backend/README.md b/packages/backend/README.md deleted file mode 100644 index 3607b0a..0000000 --- a/packages/backend/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# example-backend - -This package is an EXAMPLE of a Backstage backend. - -The main purpose of this package is to provide a test bed for Backstage plugins -that have a backend part. Feel free to experiment locally or within your fork by -adding dependencies and routes to this backend, to try things out. - -Our goal is to eventually amend the create-app flow of the CLI, such that a -production ready version of a backend skeleton is made alongside the frontend -app. Until then, feel free to experiment here! - -## Development - -To run the example backend, first go to the project root and run - -```bash -yarn install -``` - -You should only need to do this once. - -After that, go to the `packages/backend` directory and run - -```bash -yarn start -``` - -If you want to override any configuration locally, for example adding any secrets, -you can do so in `app-config.local.yaml`. - -The backend starts up on port 7007 per default. - -## Populating The Catalog - -If you want to use the catalog functionality, you need to add so called -locations to the backend. These are places where the backend can find some -entity descriptor data to consume and serve. For more information, see -[Software Catalog Overview - Adding Components to the Catalog](https://backstage.io/docs/features/software-catalog/#adding-components-to-the-catalog). - -To get started quickly, this template already includes some statically configured example locations -in `app-config.yaml` under `catalog.locations`. You can remove and replace these locations as you -like, and also override them for local development in `app-config.local.yaml`. - -## Authentication - -We chose [Passport](http://www.passportjs.org/) as authentication platform due -to its comprehensive set of supported authentication -[strategies](http://www.passportjs.org/packages/). - -Read more about the -[auth-backend](https://github.com/backstage/backstage/blob/master/plugins/auth-backend/README.md) -and -[how to add a new provider](https://github.com/backstage/backstage/blob/master/docs/auth/add-auth-provider.md) - -## Documentation - -- [Backstage Readme](https://github.com/backstage/backstage/blob/master/README.md) -- [Backstage Documentation](https://backstage.io/docs) diff --git a/packages/backend/package.json b/packages/backend/package.json index 85a58b7..00bd3bb 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -12,63 +12,59 @@ "build": "backstage-cli package build", "lint": "backstage-cli package lint", "test": "backstage-cli package test", - "clean": "backstage-cli package clean", - "build-image": "docker build ../.. -f Dockerfile --tag backstage" + "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.23.2", - "@backstage/backend-defaults": "^0.4.0", - "@backstage/backend-plugin-api": "^0.7.0", - "@backstage/backend-tasks": "^0.5.26", - "@backstage/catalog-client": "^1.6.5", - "@backstage/catalog-model": "^1.5.0", - "@backstage/config": "^1.2.0", - "@backstage/errors": "^1.2.4", - "@backstage/integration": "^1.12.0", - "@backstage/plugin-app-backend": "^0.3.70", - "@backstage/plugin-auth-backend": "^0.22.8", - "@backstage/plugin-auth-backend-module-guest-provider": "^0.1.7", - "@backstage/plugin-auth-backend-module-oidc-provider": "^0.2.2", - "@backstage/plugin-auth-node": "^0.4.16", - "@backstage/plugin-catalog-backend": "^1.23.2", - "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "^0.1.19", - "@backstage/plugin-kubernetes-backend": "^0.18.2", - "@backstage/plugin-permission-common": "^0.8.0", - "@backstage/plugin-permission-node": "^0.8.0", - "@backstage/plugin-proxy-backend": "^0.5.2", - "@backstage/plugin-scaffolder-backend": "^1.22.11", - "@backstage/plugin-scaffolder-backend-module-gitea": "^0.1.11", - "@backstage/plugin-scaffolder-backend-module-github": "^0.4.0", - "@backstage/plugin-scaffolder-node": "^0.4.7", - "@backstage/plugin-search-backend": "^1.5.13", - "@backstage/plugin-search-backend-module-catalog": "^0.1.27", - "@backstage/plugin-search-backend-module-pg": "^0.5.31", - "@backstage/plugin-search-backend-module-techdocs": "^0.1.26", - "@backstage/plugin-search-backend-node": "^1.2.26", - "@backstage/plugin-techdocs-backend": "^1.10.8", - "@backstage/types": "^1.1.1", + "@backstage/backend-defaults": "^0.16.0", + "@backstage/backend-plugin-api": "^1.8.0", + "@backstage/catalog-model": "^1.7.7", + "@backstage/config": "^1.3.6", + "@backstage/errors": "^1.2.7", + "@backstage/integration": "^2.0.0", + "@backstage/types": "^1.2.2", + "@backstage/plugin-app-backend": "^0.5.12", + "@backstage/plugin-auth-backend": "^0.27.3", + "@backstage/plugin-auth-backend-module-guest-provider": "^0.2.17", + "@backstage/plugin-auth-backend-module-oidc-provider": "^0.4.14", + "@backstage/plugin-auth-node": "^0.6.14", + "@backstage/plugin-catalog-backend": "^3.5.0", + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "^0.2.18", + "@backstage/plugin-catalog-backend-module-gitlab": "^0.8.0", + "@backstage/plugin-kubernetes-backend": "^0.21.2", + "@backstage/plugin-permission-backend": "^0.7.10", + "@backstage/plugin-permission-backend-module-allow-all-policy": "^0.2.17", + "@backstage/plugin-permission-common": "^0.9.0", + "@backstage/plugin-permission-node": "^0.10.1", + "@backstage/plugin-proxy-backend": "^0.6.11", + "@backstage/plugin-scaffolder-backend": "^3.3.0", + "@backstage/plugin-scaffolder-backend-module-github": "^0.9.7", + "@backstage/plugin-scaffolder-node": "^0.13.1", + "@backstage/plugin-search-backend": "^2.1.0", + "@backstage/plugin-search-backend-module-catalog": "^0.3.13", + "@backstage/plugin-search-backend-module-techdocs": "^0.4.12", + "@backstage/plugin-techdocs-backend": "^2.1.6", "@internal/backstage-plugin-terraform-backend": "^0.1.0", "@kubernetes/client-node": "~0.20.0", - "@roadiehq/backstage-plugin-argo-cd-backend": "3.0.2", - "@roadiehq/scaffolder-backend-module-http-request": "^4.3.5", - "@roadiehq/scaffolder-backend-module-utils": "^1.17.0", + "@roadiehq/backstage-plugin-argo-cd-backend": "^4.7.1", + "@roadiehq/scaffolder-backend-argocd": "^1.7.1", + "@roadiehq/scaffolder-backend-module-http-request": "^5.6.0", + "@roadiehq/scaffolder-backend-module-utils": "^4.1.2", + "@terasky/backstage-plugin-kro-resources-backend": "^0.2.1", + "@terasky/backstage-plugin-kubernetes-ingestor": "^2.2.0", "app": "link:../app", - "better-sqlite3": "^9.0.0", - "dockerode": "^3.3.1", + "better-sqlite3": "^11.0.0", "express": "^4.17.1", "express-promise-router": "^4.1.0", "fs-extra": "~11.2.0", - "node-gyp": "^9.0.0", - "pg": "^8.11.3", - "winston": "^3.2.1" + "js-yaml": "^4.1.0", + "node-gyp": "^10.0.0", + "yaml": "^2.3.0" }, "devDependencies": { - "@backstage/cli": "^0.26.10", - "@types/dockerode": "^3.3.0", + "@backstage/cli": "^0.36.0", + "@backstage/backend-test-utils": "^1.11.1", "@types/express": "^4.17.6", - "@types/express-serve-static-core": "^4.17.5", - "@types/fs-extra": "^11.0.4", - "@types/luxon": "^2.0.4" + "@types/fs-extra": "^11.0.4" }, "files": [ "dist" diff --git a/packages/backend/src/index.test.ts b/packages/backend/src/index.test.ts deleted file mode 100644 index 7814b8c..0000000 --- a/packages/backend/src/index.test.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { PluginEnvironment } from './types'; - -describe('test', () => { - it('unbreaks the test runner', () => { - const unbreaker = {} as PluginEnvironment; - expect(unbreaker).toBeTruthy(); - }); -}); diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 7517332..2ecad28 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -1,40 +1,86 @@ import { createBackend } from '@backstage/backend-defaults'; import { authModuleKeycloakOIDCProvider } from './plugins/auth'; -import { cnoeScaffolderActions } from './plugins/scaffolder'; -import { legacyPlugin } from '@backstage/backend-common'; +import { cnoeScaffolderActions } from './modules/scaffolder'; const backend = createBackend(); -// core plugins -backend.add(import('@backstage/plugin-app-backend/alpha')); -backend.add(import('@backstage/plugin-catalog-backend/alpha')); -backend.add(import('@backstage/plugin-proxy-backend/alpha')); -backend.add(import('@backstage/plugin-techdocs-backend/alpha')); -// auth plugins -backend.add(import('@backstage/plugin-auth-backend')); -backend.add(import('@backstage/plugin-auth-backend-module-guest-provider')); -// scaffolder plugins -backend.add(import('@backstage/plugin-scaffolder-backend/alpha')); +// Detect if running inside a Kubernetes cluster +const isInCluster = require('fs').existsSync('/var/run/secrets/kubernetes.io/serviceaccount/token'); +const k8sEnabled = process.env.K8S_CLUSTER_URL || isInCluster; + +// Core plugins +backend.add(import('@backstage/plugin-app-backend')); +if (process.env.MOCK_MODE === 'true') { + backend.add(import('./plugins/mock-proxy')); +} else { + backend.add(import('@backstage/plugin-proxy-backend')); +} +backend.add(import('@backstage/plugin-techdocs-backend')); + +// Scaffolder +backend.add(import('@backstage/plugin-scaffolder-backend')); backend.add( import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'), ); -backend.add(import('@backstage/plugin-scaffolder-backend-module-github')); -// search plugins -backend.add(import('@backstage/plugin-search-backend/alpha')); -backend.add(import('@backstage/plugin-search-backend-module-catalog/alpha')); -backend.add(import('@backstage/plugin-search-backend-module-techdocs/alpha')); -// other @backstage plugins -backend.add(import('@backstage/plugin-kubernetes-backend/alpha')); -// non-core plugins -// roadie plugins -backend.add(import('@roadiehq/scaffolder-backend-module-utils/new-backend')); -backend.add(legacyPlugin('argocd', import('./plugins/argocd'))); + +// Scaffolder modules that require external services — skip if not configured +if (process.env.GITHUB_TOKEN) { + backend.add(import('@backstage/plugin-scaffolder-backend-module-github')); +} + +// CNOE custom scaffolder actions (gitea publish, argocd, k8s-apply, sanitize, verify) +backend.add(cnoeScaffolderActions); + +// Roadie scaffolder modules +backend.add(import('@roadiehq/scaffolder-backend-module-utils')); +backend.add(import('@roadiehq/scaffolder-backend-module-http-request')); +if (k8sEnabled) { + backend.add(import('@roadiehq/scaffolder-backend-argocd')); +} + +// Auth +backend.add(import('@backstage/plugin-auth-backend')); +backend.add(import('@backstage/plugin-auth-backend-module-guest-provider')); + +// Catalog +backend.add(import('@backstage/plugin-catalog-backend')); + +// Add GitLab integration for catalog processing +if (process.env.GIT_HOSTNAME) { + backend.add(import('@backstage/plugin-catalog-backend-module-gitlab')); +} + +// Permission +backend.add(import('@backstage/plugin-permission-backend')); backend.add( - import('@roadiehq/scaffolder-backend-module-http-request/new-backend'), + import('@backstage/plugin-permission-backend-module-allow-all-policy'), ); -// cnoe plugins -backend.add(authModuleKeycloakOIDCProvider); -backend.add(cnoeScaffolderActions); -backend.add(import('@internal/backstage-plugin-terraform-backend')); + +// Search +backend.add(import('@backstage/plugin-search-backend')); +backend.add(import('@backstage/plugin-search-backend-module-catalog')); +backend.add(import('@backstage/plugin-search-backend-module-techdocs/alpha')); + +// Kubernetes +if (process.env.MOCK_MODE === 'true') { + backend.add(import('./plugins/mock-kubernetes')); +} else if (k8sEnabled) { + backend.add(import('@backstage/plugin-kubernetes-backend')); + backend.add(import('@terasky/backstage-plugin-kubernetes-ingestor')); + backend.add(import('@terasky/backstage-plugin-kro-resources-backend')); +} + +// Keycloak OIDC auth +if (process.env.KEYCLOAK_URL) { + backend.add(authModuleKeycloakOIDCProvider); +} + +// Terraform backend +if (process.env.MOCK_MODE !== 'true') { + backend.add(import('@internal/backstage-plugin-terraform-backend')); +} else { + backend.add(import('./plugins/mock-terraform')); + backend.add(import('./plugins/mock-argocd')); +} backend.start(); diff --git a/packages/backend/src/mocks/fixtures/argo-workflow-templates.json b/packages/backend/src/mocks/fixtures/argo-workflow-templates.json new file mode 100644 index 0000000..d37896a --- /dev/null +++ b/packages/backend/src/mocks/fixtures/argo-workflow-templates.json @@ -0,0 +1,15 @@ +{ + "apiVersion": "argoproj.io/v1alpha1", + "kind": "WorkflowTemplateList", + "metadata": {}, + "items": [ + { + "metadata": { "name": "ci-build-template", "namespace": "default" }, + "spec": { "entrypoint": "build-and-test" } + }, + { + "metadata": { "name": "deploy-template", "namespace": "default" }, + "spec": { "entrypoint": "deploy-to-env" } + } + ] +} diff --git a/packages/backend/src/mocks/fixtures/argo-workflows.json b/packages/backend/src/mocks/fixtures/argo-workflows.json new file mode 100644 index 0000000..67991b0 --- /dev/null +++ b/packages/backend/src/mocks/fixtures/argo-workflows.json @@ -0,0 +1,22 @@ +{ + "apiVersion": "argoproj.io/v1alpha1", + "kind": "WorkflowList", + "metadata": {}, + "items": [ + { + "metadata": { "name": "ci-build-pipeline-abc12", "namespace": "default" }, + "spec": { "entrypoint": "build-and-test" }, + "status": { "phase": "Running", "progress": "2/5", "startedAt": "2026-04-15T10:00:00Z" } + }, + { + "metadata": { "name": "deploy-staging-def34", "namespace": "default" }, + "spec": { "entrypoint": "deploy" }, + "status": { "phase": "Succeeded", "progress": "3/3", "startedAt": "2026-04-15T08:00:00Z", "finishedAt": "2026-04-15T08:15:00Z" } + }, + { + "metadata": { "name": "data-pipeline-ghi56", "namespace": "default" }, + "spec": { "entrypoint": "etl-pipeline" }, + "status": { "phase": "Failed", "progress": "1/4", "startedAt": "2026-04-15T06:00:00Z", "finishedAt": "2026-04-15T06:30:00Z" } + } + ] +} diff --git a/packages/backend/src/mocks/fixtures/argocd-applications.json b/packages/backend/src/mocks/fixtures/argocd-applications.json new file mode 100644 index 0000000..292d6c7 --- /dev/null +++ b/packages/backend/src/mocks/fixtures/argocd-applications.json @@ -0,0 +1,72 @@ +{ + "items": [ + { + "metadata": { + "name": "platform-api-service", + "namespace": "argocd", + "creationTimestamp": "2026-04-10T08:00:00Z" + }, + "spec": { + "project": "default", + "source": { + "repoURL": "https://github.com/cnoe-io/platform-api", + "path": "k8s", + "targetRevision": "main" + }, + "destination": { + "server": "https://kubernetes.default.svc", + "namespace": "default" + }, + "syncPolicy": { + "automated": { + "prune": true, + "selfHeal": true + } + } + }, + "status": { + "sync": { + "status": "Synced", + "revision": "a1b2c3d4e5f6" + }, + "health": { + "status": "Healthy" + }, + "operationState": { + "phase": "Succeeded", + "message": "successfully synced (all tasks run)", + "syncResult": { + "revision": "a1b2c3d4e5f6" + }, + "startedAt": "2026-04-15T10:00:00Z", + "finishedAt": "2026-04-15T10:01:30Z" + }, + "summary": { + "images": ["cnoe/platform-api:1.2.0"] + }, + "history": [ + { + "revision": "a1b2c3d4e5f6", + "deployedAt": "2026-04-15T10:01:30Z", + "id": 5, + "source": { + "repoURL": "https://github.com/cnoe-io/platform-api", + "path": "k8s", + "targetRevision": "main" + } + }, + { + "revision": "9f8e7d6c5b4a", + "deployedAt": "2026-04-14T14:30:00Z", + "id": 4, + "source": { + "repoURL": "https://github.com/cnoe-io/platform-api", + "path": "k8s", + "targetRevision": "main" + } + } + ] + } + } + ] +} diff --git a/packages/backend/src/mocks/fixtures/kubernetes-workloads.json b/packages/backend/src/mocks/fixtures/kubernetes-workloads.json new file mode 100644 index 0000000..6681a5c --- /dev/null +++ b/packages/backend/src/mocks/fixtures/kubernetes-workloads.json @@ -0,0 +1,214 @@ +{ + "items": [ + { + "cluster": { + "name": "local" + }, + "resources": [ + { + "type": "deployments", + "resources": [ + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "platform-api-service", + "namespace": "default", + "creationTimestamp": "2026-04-10T08:00:00Z", + "labels": { + "app": "platform-api-service", + "backstage.io/kubernetes-id": "platform-api-service" + } + }, + "spec": { + "replicas": 3, + "selector": { "matchLabels": { "app": "platform-api-service" } }, + "template": { + "metadata": { "labels": { "app": "platform-api-service" } }, + "spec": { + "containers": [ + { + "name": "api-server", + "image": "cnoe/platform-api:1.2.0", + "ports": [{ "containerPort": 8080 }], + "resources": { + "requests": { "cpu": "250m", "memory": "256Mi" }, + "limits": { "cpu": "500m", "memory": "512Mi" } + } + } + ] + } + } + }, + "status": { + "replicas": 3, + "readyReplicas": 3, + "availableReplicas": 3, + "updatedReplicas": 3, + "conditions": [ + { "type": "Available", "status": "True", "lastTransitionTime": "2026-04-10T08:05:00Z" }, + { "type": "Progressing", "status": "True", "lastTransitionTime": "2026-04-10T08:05:00Z" } + ] + } + } + ] + }, + { + "type": "replicaSets", + "resources": [ + { + "apiVersion": "apps/v1", + "kind": "ReplicaSet", + "metadata": { + "name": "platform-api-service-7d9f8b6c5", + "namespace": "default", + "creationTimestamp": "2026-04-10T08:00:00Z", + "labels": { "app": "platform-api-service" }, + "ownerReferences": [{ "apiVersion": "apps/v1", "kind": "Deployment", "name": "platform-api-service" }] + }, + "spec": { "replicas": 3 }, + "status": { "replicas": 3, "readyReplicas": 3, "availableReplicas": 3 } + } + ] + }, + { + "type": "pods", + "resources": [ + { + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "platform-api-service-7d9f8b6c5-abc12", + "namespace": "default", + "creationTimestamp": "2026-04-10T08:01:00Z", + "labels": { "app": "platform-api-service" }, + "ownerReferences": [{ "apiVersion": "apps/v1", "kind": "ReplicaSet", "name": "platform-api-service-7d9f8b6c5" }] + }, + "spec": { + "containers": [ + { "name": "api-server", "image": "cnoe/platform-api:1.2.0", "ports": [{ "containerPort": 8080 }] } + ] + }, + "status": { + "phase": "Running", + "conditions": [ + { "type": "Ready", "status": "True" }, + { "type": "ContainersReady", "status": "True" } + ], + "containerStatuses": [ + { "name": "api-server", "ready": true, "restartCount": 0, "state": { "running": { "startedAt": "2026-04-10T08:01:30Z" } }, "image": "cnoe/platform-api:1.2.0" } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "platform-api-service-7d9f8b6c5-def34", + "namespace": "default", + "creationTimestamp": "2026-04-10T08:01:00Z", + "labels": { "app": "platform-api-service" }, + "ownerReferences": [{ "apiVersion": "apps/v1", "kind": "ReplicaSet", "name": "platform-api-service-7d9f8b6c5" }] + }, + "spec": { + "containers": [ + { "name": "api-server", "image": "cnoe/platform-api:1.2.0", "ports": [{ "containerPort": 8080 }] } + ] + }, + "status": { + "phase": "Running", + "conditions": [ + { "type": "Ready", "status": "True" }, + { "type": "ContainersReady", "status": "True" } + ], + "containerStatuses": [ + { "name": "api-server", "ready": true, "restartCount": 0, "state": { "running": { "startedAt": "2026-04-10T08:01:30Z" } }, "image": "cnoe/platform-api:1.2.0" } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "platform-api-service-7d9f8b6c5-ghi56", + "namespace": "default", + "creationTimestamp": "2026-04-10T08:01:00Z", + "labels": { "app": "platform-api-service" }, + "ownerReferences": [{ "apiVersion": "apps/v1", "kind": "ReplicaSet", "name": "platform-api-service-7d9f8b6c5" }] + }, + "spec": { + "containers": [ + { "name": "api-server", "image": "cnoe/platform-api:1.2.0", "ports": [{ "containerPort": 8080 }] } + ] + }, + "status": { + "phase": "Running", + "conditions": [ + { "type": "Ready", "status": "True" }, + { "type": "ContainersReady", "status": "True" } + ], + "containerStatuses": [ + { "name": "api-server", "ready": true, "restartCount": 1, "state": { "running": { "startedAt": "2026-04-12T14:00:00Z" } }, "image": "cnoe/platform-api:1.2.0" } + ] + } + } + ] + }, + { + "type": "services", + "resources": [ + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "platform-api-service", + "namespace": "default", + "creationTimestamp": "2026-04-10T08:00:00Z", + "labels": { "app": "platform-api-service" } + }, + "spec": { + "type": "ClusterIP", + "selector": { "app": "platform-api-service" }, + "ports": [{ "port": 80, "targetPort": 8080, "protocol": "TCP" }] + } + } + ] + }, + { + "type": "configmaps", + "resources": [] + }, + { + "type": "horizontalPodAutoscalers", + "resources": [] + }, + { + "type": "ingresses", + "resources": [ + { + "apiVersion": "networking.k8s.io/v1", + "kind": "Ingress", + "metadata": { + "name": "platform-api-ingress", + "namespace": "default", + "creationTimestamp": "2026-04-10T08:00:00Z" + }, + "spec": { + "rules": [ + { + "host": "api.cnoe.example.com", + "http": { + "paths": [{ "path": "/", "pathType": "Prefix", "backend": { "service": { "name": "platform-api-service", "port": { "number": 80 } } } }] + } + } + ] + } + } + ] + } + ], + "podMetrics": [], + "errors": [] + } + ] +} diff --git a/packages/backend/src/mocks/fixtures/spark-applications.json b/packages/backend/src/mocks/fixtures/spark-applications.json new file mode 100644 index 0000000..bbb24e8 --- /dev/null +++ b/packages/backend/src/mocks/fixtures/spark-applications.json @@ -0,0 +1,27 @@ +{ + "apiVersion": "sparkoperator.k8s.io/v1beta2", + "kind": "SparkApplicationList", + "items": [ + { + "apiVersion": "sparkoperator.k8s.io/v1beta2", + "kind": "SparkApplication", + "metadata": { "name": "spark-etl-job", "namespace": "default", "creationTimestamp": "2026-04-15T10:00:00Z" }, + "spec": { "type": "Python", "mode": "cluster", "image": "spark:3.5.0", "sparkVersion": "3.5.0", "mainApplicationFile": "local:///opt/spark/examples/src/main/python/pi.py", "driver": { "cores": 1, "memory": "512m", "podName": "spark-etl-job-driver" }, "executor": { "cores": 1, "instances": 2, "memory": "512m" } }, + "status": { "applicationState": { "state": "RUNNING" }, "driverInfo": { "podName": "spark-etl-job-driver", "webUIPort": 4040 }, "executorState": { "spark-etl-job-exec-1": "RUNNING", "spark-etl-job-exec-2": "RUNNING" } } + }, + { + "apiVersion": "sparkoperator.k8s.io/v1beta2", + "kind": "SparkApplication", + "metadata": { "name": "spark-analytics", "namespace": "default", "creationTimestamp": "2026-04-15T08:00:00Z" }, + "spec": { "type": "Scala", "mode": "cluster", "image": "spark:3.5.0", "sparkVersion": "3.5.0", "mainClass": "org.example.Analytics", "driver": { "cores": 2, "memory": "1g", "podName": "spark-analytics-driver" }, "executor": { "cores": 2, "instances": 4, "memory": "2g" } }, + "status": { "applicationState": { "state": "COMPLETED" }, "driverInfo": { "podName": "spark-analytics-driver" }, "terminationTime": "2026-04-15T09:30:00Z" } + }, + { + "apiVersion": "sparkoperator.k8s.io/v1beta2", + "kind": "SparkApplication", + "metadata": { "name": "spark-ml-training", "namespace": "default", "creationTimestamp": "2026-04-15T07:00:00Z" }, + "spec": { "type": "Python", "mode": "cluster", "image": "spark:3.5.0", "sparkVersion": "3.5.0", "mainApplicationFile": "local:///opt/spark/ml/train.py", "driver": { "cores": 2, "memory": "2g", "podName": "spark-ml-training-driver" }, "executor": { "cores": 4, "instances": 8, "memory": "4g" } }, + "status": { "applicationState": { "state": "FAILED", "errorMessage": "OutOfMemoryError: Java heap space" }, "driverInfo": { "podName": "spark-ml-training-driver" }, "terminationTime": "2026-04-15T07:45:00Z" } + } + ] +} diff --git a/packages/backend/src/mocks/fixtures/spark-logs.txt b/packages/backend/src/mocks/fixtures/spark-logs.txt new file mode 100644 index 0000000..ee2c0ca --- /dev/null +++ b/packages/backend/src/mocks/fixtures/spark-logs.txt @@ -0,0 +1,7 @@ +2026-04-15 10:00:01 INFO SparkContext: Running Spark version 3.5.0 +2026-04-15 10:00:02 INFO SparkContext: Submitted application: spark-etl-job +2026-04-15 10:00:03 INFO SecurityManager: Changing view acls to: spark +2026-04-15 10:00:05 INFO Utils: Successfully started service 'sparkDriver' on port 7078 +2026-04-15 10:00:10 INFO SparkContext: Added JAR local:///opt/spark/examples/jars/spark-examples.jar +2026-04-15 10:00:15 INFO DAGScheduler: Job 0 finished: reduce at SparkPi.scala:38, took 5.123 s +2026-04-15 10:00:16 INFO SparkContext: Starting job: Pi is roughly 3.14159 diff --git a/packages/backend/src/mocks/fixtures/terraform-file-list.json b/packages/backend/src/mocks/fixtures/terraform-file-list.json new file mode 100644 index 0000000..5cc8ae0 --- /dev/null +++ b/packages/backend/src/mocks/fixtures/terraform-file-list.json @@ -0,0 +1 @@ +[{ "Key": "terraform/platform/terraform.tfstate", "TFStateContents": null }] diff --git a/packages/backend/src/mocks/fixtures/terraform-state.json b/packages/backend/src/mocks/fixtures/terraform-state.json new file mode 100644 index 0000000..3e5477b --- /dev/null +++ b/packages/backend/src/mocks/fixtures/terraform-state.json @@ -0,0 +1,41 @@ +{ + "version": 4, + "terraform_version": "1.5.0", + "serial": 42, + "outputs": [ + { "value": "vpc-0abc123def456", "type": "string" }, + { "value": "subnet-0def789abc012", "type": "string" } + ], + "resources": [ + { + "mode": "managed", + "type": "aws_vpc", + "name": "main", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [{ + "attributes": { "id": "vpc-0abc123def456", "cidr_block": "10.0.0.0/16", "name": "cnoe-platform-vpc", "enable_dns_support": true, "enable_dns_hostnames": true }, + "dependencies": [] + }] + }, + { + "mode": "managed", + "type": "aws_subnet", + "name": "public", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [{ + "attributes": { "id": "subnet-0def789abc012", "vpc_id": "vpc-0abc123def456", "cidr_block": "10.0.1.0/24", "availability_zone": "us-west-2a", "name": "cnoe-public-subnet" }, + "dependencies": ["managed.aws_vpc.main"] + }] + }, + { + "mode": "managed", + "type": "aws_security_group", + "name": "allow_tls", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [{ + "attributes": { "id": "sg-0ghi345jkl678", "vpc_id": "vpc-0abc123def456", "name": "allow-tls", "description": "Allow TLS inbound traffic" }, + "dependencies": ["managed.aws_vpc.main"] + }] + } + ] +} diff --git a/packages/backend/src/plugins/argocd.ts b/packages/backend/src/modules/actions/argocd.ts similarity index 75% rename from packages/backend/src/plugins/argocd.ts rename to packages/backend/src/modules/actions/argocd.ts index 611bf54..9e6d2ef 100644 --- a/packages/backend/src/plugins/argocd.ts +++ b/packages/backend/src/modules/actions/argocd.ts @@ -1,21 +1,13 @@ import { Config } from '@backstage/config'; import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; import { examples } from './gitea-actions'; -import { Logger } from 'winston'; - +import { LoggerService } from '@backstage/backend-plugin-api'; import { ArgoService } from '@roadiehq/backstage-plugin-argo-cd-backend'; -import { createRouter } from '@roadiehq/backstage-plugin-argo-cd-backend'; -import { PluginEnvironment } from '../types'; - -export default async function createPlugin({ - logger, - config, -}: PluginEnvironment) { - return await createRouter({ logger, config }); -} - -export function createArgoCDApp(options: { config: Config; logger: Logger }) { +export function createArgoCDApp(options: { + config: Config; + logger: LoggerService; +}) { const { config, logger } = options; return createTemplateAction<{ @@ -42,30 +34,22 @@ export function createArgoCDApp(options: { config: Config; logger: Logger }) { 'appNamespace', ], properties: { - repoUrl: { - title: 'Repository Location', - type: 'string', - }, + repoUrl: { title: 'Repository Location', type: 'string' }, projectName: { title: 'name of the project in argocd', type: 'string', }, - appName: { - title: 'application name in argocd', - type: 'string', - }, + appName: { title: 'application name in argocd', type: 'string' }, appNamespace: { - title: 'application name in argocd', + title: 'application namespace in argocd', type: 'string', }, argoInstance: { - title: 'backstage argocd instance name defined in app-config.yaml', - type: 'string', - }, - path: { - title: 'argocd spec path', + title: + 'backstage argocd instance name defined in app-config.yaml', type: 'string', }, + path: { title: 'argocd spec path', type: 'string' }, labelValue: { title: 'for argocd plugin to locate this app', type: 'string', @@ -94,7 +78,7 @@ export function createArgoCDApp(options: { config: Config; logger: Logger }) { argoUserName, argoPassword, config, - logger, + logger as any, ); const argocdConfig = config @@ -112,11 +96,14 @@ export function createArgoCDApp(options: { config: Config; logger: Logger }) { username: instance.getOptionalString('username'), password: instance.getOptionalString('password'), })); + const matchedArgoInstance = argocdConfig.find( argoHost => argoHost.name === argoInstance, ); if (!matchedArgoInstance) { - throw new Error(`Unable to find Argo instance named "${argoInstance}"`); + throw new Error( + `Unable to find Argo instance named "${argoInstance}"`, + ); } const token = matchedArgoInstance.token || @@ -125,7 +112,7 @@ export function createArgoCDApp(options: { config: Config; logger: Logger }) { await argoSvc.createArgoApplication({ baseUrl: matchedArgoInstance.url, argoToken: token, - appName: appName, + appName, projectName: projectName ? projectName : appName, namespace: appNamespace, sourceRepo: repoUrl, diff --git a/packages/backend/src/modules/actions/gitea-actions.ts b/packages/backend/src/modules/actions/gitea-actions.ts new file mode 100644 index 0000000..dec25ca --- /dev/null +++ b/packages/backend/src/modules/actions/gitea-actions.ts @@ -0,0 +1,309 @@ +import { InputError } from '@backstage/errors'; +import { Config } from '@backstage/config'; +import { + getGiteaRequestOptions, + GiteaIntegrationConfig, + ScmIntegrationRegistry, + ScmIntegrations, +} from '@backstage/integration'; +import { + createTemplateAction, + getRepoSourceDirectory, + initRepoAndPush, + TemplateExample, +} from '@backstage/plugin-scaffolder-node'; +import crypto from 'crypto'; +import yaml from 'yaml'; + +export const examples: TemplateExample[] = [ + { + description: + 'Initializes a Gitea repository using the content of the workspace and publish it to Gitea with default configuration.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitea', + name: 'Publish to Gitea', + input: { repoUrl: 'gitea.com?repo=repo&owner=owner' }, + }, + ], + }), + }, +]; + +const parseRepoUrl = ( + repoUrl: string, + integrations: ScmIntegrationRegistry, +): { + repo: string; + host: string; + owner?: string; + organization?: string; + workspace?: string; + project?: string; +} => { + let parsed; + try { + parsed = new URL(`https://${repoUrl}`); + } catch (error) { + throw new InputError( + `Invalid repo URL passed to publisher, got ${repoUrl}, ${error}`, + ); + } + const host = parsed.host; + const owner = parsed.searchParams.get('owner') ?? undefined; + const organization = parsed.searchParams.get('organization') ?? undefined; + const workspace = parsed.searchParams.get('workspace') ?? undefined; + const project = parsed.searchParams.get('project') ?? undefined; + + const type = integrations.byHost(host)?.type; + if (!type) { + throw new InputError( + `No matching integration configuration for host ${host}, please check your integrations config`, + ); + } + + const repo: string = parsed.searchParams.get('repo')!; + switch (type) { + case 'bitbucket': { + if (host === 'www.bitbucket.org') { + checkRequiredParams(parsed, 'workspace'); + } + checkRequiredParams(parsed, 'project', 'repo'); + break; + } + case 'gitlab': { + if (!project) { + checkRequiredParams(parsed, 'owner', 'repo'); + } + break; + } + case 'gitea': { + checkRequiredParams(parsed, 'repo'); + break; + } + case 'gerrit': { + checkRequiredParams(parsed, 'repo'); + break; + } + default: { + checkRequiredParams(parsed, 'repo', 'owner'); + break; + } + } + + return { host, owner, repo, organization, workspace, project }; +}; + +function checkRequiredParams(repoUrl: URL, ...params: string[]) { + for (let i = 0; i < params.length; i++) { + if (!repoUrl.searchParams.get(params[i])) { + throw new InputError( + `Invalid repo URL passed to publisher: ${repoUrl.toString()}, missing ${params[i]}`, + ); + } + } +} + +const checkGiteaOrg = async ( + config: GiteaIntegrationConfig, + options: { owner: string }, +): Promise => { + const { owner } = options; + let response: Response; + const getOptions: RequestInit = { + method: 'GET', + headers: { + ...getGiteaRequestOptions(config).headers, + 'Content-Type': 'application/json', + }, + }; + try { + response = await fetch(`${config.baseUrl}/api/v1/orgs/${owner}`, getOptions); + } catch (e) { + throw new Error(`Unable to get the Organization: ${owner}, ${e}`); + } + if (response.status !== 200) { + throw new Error( + `Organization ${owner} do not exist. Please create it first !`, + ); + } +}; + +const createGiteaProject = async ( + config: GiteaIntegrationConfig, + options: { projectName: string; owner?: string; description: string }, +): Promise => { + const { projectName, description, owner } = options; + let response: Response; + const postOptions: RequestInit = { + method: 'POST', + body: JSON.stringify({ name: projectName, description }), + headers: { + ...getGiteaRequestOptions(config).headers, + 'Content-Type': 'application/json', + }, + }; + + const url = owner + ? `${config.baseUrl}/api/v1/orgs/${owner}/repos` + : `${config.baseUrl}/api/v1/user/repos`; + + try { + response = await fetch(url, postOptions); + } catch (e) { + throw new Error(`Unable to create repository, ${e}`); + } + if (response.status !== 201) { + throw new Error( + `Unable to create repository, ${response.status} ${response.statusText}, ${await response.text()}`, + ); + } +}; + +const generateCommitMessage = ( + config: Config, + commitSubject?: string, +): string => { + const changeId = crypto.randomBytes(20).toString('hex'); + return `${ + config.getOptionalString('scaffolder.defaultCommitMessage') || commitSubject + }\n\nChange-Id: I${changeId}`; +}; + +export function createPublishGiteaAction(options: { + integrations: ScmIntegrations; + config: Config; +}) { + const { integrations, config } = options; + + return createTemplateAction<{ + repoUrl: string; + description: string; + defaultBranch?: string; + gitCommitMessage?: string; + gitAuthorName?: string; + gitAuthorEmail?: string; + sourcePath?: string; + }>({ + id: 'publish:gitea', + description: + 'Initializes a git repository using the content of the workspace, and publishes it to Gitea.', + examples, + schema: { + input: { + type: 'object', + required: ['repoUrl'], + properties: { + repoUrl: { title: 'Repository Location', type: 'string' }, + description: { title: 'Repository Description', type: 'string' }, + defaultBranch: { + title: 'Default Branch', + type: 'string', + description: `Sets the default branch on the repository. The default value is 'main'`, + }, + gitCommitMessage: { + title: 'Git Commit Message', + type: 'string', + description: `Sets the commit message on the repository. The default value is 'initial commit'`, + }, + gitAuthorName: { + title: 'Default Author Name', + type: 'string', + description: `Sets the default author name for the commit. The default value is 'Scaffolder'`, + }, + gitAuthorEmail: { + title: 'Default Author Email', + type: 'string', + description: `Sets the default author email for the commit.`, + }, + sourcePath: { + title: 'Source Path', + type: 'string', + description: `Path within the workspace that will be used as the repository root.`, + }, + }, + }, + output: { + type: 'object', + properties: { + remoteUrl: { + title: 'A URL to the repository with the provider', + type: 'string', + }, + repoContentsUrl: { + title: 'A URL to the root of the repository', + type: 'string', + }, + commitHash: { + title: 'The git commit hash of the initial commit', + type: 'string', + }, + }, + }, + }, + async handler(ctx) { + const { + repoUrl, + description, + defaultBranch = 'main', + gitAuthorName, + gitAuthorEmail, + gitCommitMessage = 'initial commit', + sourcePath, + } = ctx.input; + const { repo, host, owner } = parseRepoUrl(repoUrl, integrations); + const integrationConfig = integrations.gitea.byHost(host); + if (!integrationConfig) { + throw new InputError( + `No matching integration configuration for host ${host}, please check your integrations config`, + ); + } + const { username, password } = integrationConfig.config; + if (!username || !password) { + throw new Error(`Credentials for the gitea ${host} required.`); + } + + if (owner && owner !== username) { + await checkGiteaOrg(integrationConfig.config, { owner }); + } + + await createGiteaProject(integrationConfig.config, { + description, + owner, + projectName: repo, + }); + + const auth = { username, password }; + const gitAuthorInfo = { + name: + gitAuthorName ?? + config.getOptionalString('scaffolder.defaultAuthor.name'), + email: + gitAuthorEmail ?? + config.getOptionalString('scaffolder.defaultAuthor.email'), + }; + const repoOwner = owner ? owner : username; + const remoteUrl = `${integrationConfig.config.baseUrl}/${repoOwner}/${repo}.git`; + const commitResult = await initRepoAndPush({ + dir: getRepoSourceDirectory(ctx.workspacePath, sourcePath), + remoteUrl, + auth, + defaultBranch, + logger: ctx.logger, + commitMessage: generateCommitMessage(config, gitCommitMessage), + gitAuthorInfo, + }); + + const operationTimeLimit = 5000; + const sleep = (ms: number) => new Promise(r => setTimeout(r, ms)); + await sleep(operationTimeLimit); + + const repoContentsUrl = `${integrationConfig.config.baseUrl}/${repoOwner}/${repo}/src/branch/${defaultBranch}/`; + ctx.output('remoteUrl', remoteUrl); + ctx.output('commitHash', commitResult?.commitHash); + ctx.output('repoContentsUrl', repoContentsUrl); + }, + }); +} diff --git a/packages/backend/src/plugins/k8s-apply.ts b/packages/backend/src/modules/actions/k8s-apply.ts similarity index 79% rename from packages/backend/src/plugins/k8s-apply.ts rename to packages/backend/src/modules/actions/k8s-apply.ts index 2e108a2..3095e35 100644 --- a/packages/backend/src/plugins/k8s-apply.ts +++ b/packages/backend/src/modules/actions/k8s-apply.ts @@ -5,7 +5,7 @@ import { import { dumpYaml } from '@kubernetes/client-node'; import yaml from 'js-yaml'; import { Config } from '@backstage/config'; -import { resolveSafeChildPath } from '@backstage/backend-common'; +import { resolveSafeChildPath } from '@backstage/backend-plugin-api'; import fs from 'fs-extra'; interface Cluster { @@ -19,16 +19,11 @@ interface Cluster { } interface Context { name: string; - context: { - cluster: string; - user: string; - }; + context: { cluster: string; user: string }; } interface User { name: string; - user: { - token?: string; - }; + user: { token?: string }; } interface ConfFile { apiVersion: string; @@ -38,6 +33,7 @@ interface ConfFile { clusters: Cluster[]; users: User[]; } + export const createKubernetesApply = (config: Config) => { return createTemplateAction<{ manifestString?: string; @@ -55,14 +51,12 @@ export const createKubernetesApply = (config: Config) => { manifestString: { type: 'string', title: 'Manifest', - description: - 'The manifest to apply in the cluster. Must be a string', + description: 'The manifest to apply in the cluster. Must be a string', }, manifestObject: { type: 'object', title: 'Manifest', - description: - 'The manifest to apply in the cluster. Must be an object', + description: 'The manifest to apply in the cluster. Must be an object', }, manifestPath: { type: 'string', @@ -84,8 +78,7 @@ export const createKubernetesApply = (config: Config) => { output: { type: 'object', title: 'Returned object', - description: - 'The object returned by Kubernetes by performing this operation', + description: 'The object returned by Kubernetes by performing this operation', }, }, async handler(ctx) { @@ -104,17 +97,15 @@ export const createKubernetesApply = (config: Config) => { mode: '600', }); } else { - const filePath = resolveSafeChildPath( + manifestPath = resolveSafeChildPath( ctx.workspacePath, ctx.input.manifestPath!, ); - manifestPath = filePath; } const fileContent = fs.readFileSync(manifestPath, 'utf8'); const objList: any[] = yaml.loadAll(fileContent); if (ctx.input.clusterName) { - // Supports SA token authentication only const targetCluster = getClusterConfig(ctx.input.clusterName!, config); const confFile: ConfFile = { apiVersion: 'v1', @@ -156,8 +147,7 @@ export const createKubernetesApply = (config: Config) => { 'utf8', ).toString('base64'); } - confFile.clusters[0].cluster['certificate-authority-data'] = - caDataRaw; + confFile.clusters[0].cluster['certificate-authority-data'] = caDataRaw; if ( targetCluster.getOptionalString('caFile') && !( @@ -176,21 +166,12 @@ export const createKubernetesApply = (config: Config) => { encoding: 'utf8', mode: '600', }); - await executeShellCommand({ - command: 'cat', - args: [confFilePath], - logStream: ctx.logStream, - }); - await executeShellCommand({ - command: 'cat', - args: [manifestPath], - logStream: ctx.logStream, - }); + let counter = 1; for (const obj of objList) { - let manifestFilePath = resolveSafeChildPath( + const manifestFilePath = resolveSafeChildPath( ctx.workspacePath, - 'to-be-applied-' + counter.toString() + '.yaml', + `to-be-applied-${counter}.yaml`, ); fs.writeFileSync(manifestFilePath, yaml.dump(obj), { encoding: 'utf8', @@ -199,25 +180,13 @@ export const createKubernetesApply = (config: Config) => { if (obj.metadata.generateName !== undefined) { await executeShellCommand({ command: 'kubectl', - args: [ - '--kubeconfig', - confFilePath, - 'create', - '-f', - manifestFilePath, - ], + args: ['--kubeconfig', confFilePath, 'create', '-f', manifestFilePath], logStream: ctx.logStream, }); } else { await executeShellCommand({ command: 'kubectl', - args: [ - '--kubeconfig', - confFilePath, - 'apply', - '-f', - manifestFilePath, - ], + args: ['--kubeconfig', confFilePath, 'apply', '-f', manifestFilePath], logStream: ctx.logStream, }); } @@ -230,13 +199,10 @@ export const createKubernetesApply = (config: Config) => { }); }; -// Finds the first cluster that matches the given name. function getClusterConfig(name: string, config: Config): Config { const clusterConfigs = config .getConfigArray('kubernetes.clusterLocatorMethods') - .filter((val: Config) => { - return val.getString('type') === 'config'; - }); + .filter((val: Config) => val.getString('type') === 'config'); const clusters = new Array(); clusterConfigs.filter((conf: Config) => { @@ -252,4 +218,4 @@ function getClusterConfig(name: string, config: Config): Config { throw new Error(`Cluster with name ${name} not found`); } return clusters[0]; -} \ No newline at end of file +} diff --git a/packages/backend/src/plugins/sanitize.ts b/packages/backend/src/modules/actions/sanitize.ts similarity index 94% rename from packages/backend/src/plugins/sanitize.ts rename to packages/backend/src/modules/actions/sanitize.ts index cb13f13..d8c9df5 100644 --- a/packages/backend/src/plugins/sanitize.ts +++ b/packages/backend/src/modules/actions/sanitize.ts @@ -1,7 +1,6 @@ import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; import yaml from 'js-yaml'; -// Add type annotations to fix TS2742 type SanitizeResourceInput = { document: string; }; @@ -42,14 +41,11 @@ export const createSanitizeResource = () => { }); }; -// Remove empty elements from an object function removeEmptyObjects(obj: any): any { if (typeof obj !== 'object' || obj === null) { return obj; } - const newObj: any = Array.isArray(obj) ? [] : {}; - for (const key in obj) { const value = obj[key]; const newValue = removeEmptyObjects(value); @@ -63,6 +59,5 @@ function removeEmptyObjects(obj: any): any { newObj[key] = newValue; } } - return newObj; } diff --git a/packages/backend/src/plugins/verify.ts b/packages/backend/src/modules/actions/verify.ts similarity index 87% rename from packages/backend/src/plugins/verify.ts rename to packages/backend/src/modules/actions/verify.ts index ae7f56b..fe0d49b 100644 --- a/packages/backend/src/plugins/verify.ts +++ b/packages/backend/src/modules/actions/verify.ts @@ -11,7 +11,7 @@ class ConsoleLogStream extends Writable { } _write(chunk: any, _: any, callback: any) { - this.data += chunk.toString(); // Convert the chunk to a string and append it to this.data + this.data += chunk.toString(); console.log(this.data); callback(); } @@ -29,9 +29,7 @@ export const createVerifyDependency = () => { properties: { verifiers: { type: 'array', - items: { - type: 'string', - }, + items: { type: 'string' }, title: 'verifiers', description: 'The list of verifiers', }, @@ -40,7 +38,6 @@ export const createVerifyDependency = () => { }, async handler(ctx) { const verifiers = ctx.input.verifiers; - if (verifiers === null || verifiers.length === 0) { ctx.logger.error('no verifier was supplied for the object'); return; @@ -48,7 +45,6 @@ export const createVerifyDependency = () => { const baseCommand = 'cnoe'; const baseArguments = ['k8s', 'verify']; - verifiers.forEach((verifier: string) => baseArguments.push('--config', verifier), ); @@ -57,11 +53,11 @@ export const createVerifyDependency = () => { await executeShellCommand({ command: baseCommand, args: baseArguments, - logStream: logStream, + logStream, }) .then(() => ctx.logger.info('verification succeeded')) .catch(error => { - ctx.logger.error(error); + ctx.logger.error(String(error)); throw new Error(logStream.data); }); }, diff --git a/packages/backend/src/plugins/scaffolder.ts b/packages/backend/src/modules/scaffolder.ts similarity index 54% rename from packages/backend/src/plugins/scaffolder.ts rename to packages/backend/src/modules/scaffolder.ts index 0b6fb2f..cd83d25 100644 --- a/packages/backend/src/plugins/scaffolder.ts +++ b/packages/backend/src/modules/scaffolder.ts @@ -1,16 +1,14 @@ import { ScmIntegrations } from '@backstage/integration'; -import { createPublishGiteaAction } from './gitea-actions'; - import { coreServices, createBackendModule, } from '@backstage/backend-plugin-api'; -import { scaffolderActionsExtensionPoint } from '@backstage/plugin-scaffolder-node/alpha'; -import { createArgoCDApp } from './argocd'; -import { getRootLogger } from '@backstage/backend-common'; -import { createKubernetesApply } from './k8s-apply'; -import { createSanitizeResource } from './sanitize'; -import { createVerifyDependency } from './verify'; +import { scaffolderActionsExtensionPoint } from '@backstage/plugin-scaffolder-node'; +import { createPublishGiteaAction } from './actions/gitea-actions'; +import { createArgoCDApp } from './actions/argocd'; +import { createKubernetesApply } from './actions/k8s-apply'; +import { createSanitizeResource } from './actions/sanitize'; +import { createVerifyDependency } from './actions/verify'; export const cnoeScaffolderActions = createBackendModule({ pluginId: 'scaffolder', @@ -20,20 +18,14 @@ export const cnoeScaffolderActions = createBackendModule({ deps: { scaffolder: scaffolderActionsExtensionPoint, config: coreServices.rootConfig, + logger: coreServices.logger, }, - async init({ scaffolder, config }) { + async init({ scaffolder, config, logger }) { const integrations = ScmIntegrations.fromConfig(config); - const logger = getRootLogger(); scaffolder.addActions( - createPublishGiteaAction({ - integrations, - config, - }), - createArgoCDApp({ - config, - logger, - }), + createPublishGiteaAction({ integrations, config }), + createArgoCDApp({ config, logger }), createKubernetesApply(config), createSanitizeResource(), createVerifyDependency(), diff --git a/packages/backend/src/plugins/catalog-kro-module.ts b/packages/backend/src/plugins/catalog-kro-module.ts new file mode 100644 index 0000000..57e5d52 --- /dev/null +++ b/packages/backend/src/plugins/catalog-kro-module.ts @@ -0,0 +1,30 @@ +import { createBackendModule } from '@backstage/backend-plugin-api'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; +import { coreServices } from '@backstage/backend-plugin-api'; +import { KroResourceGroupProcessor } from './catalog-processors/kro-resource-group-processor'; + +/** + * Catalog module for Kro ResourceGroup integration + * Registers the ResourceGroup processor and configures catalog rules + */ +export const catalogKroModule = createBackendModule({ + pluginId: 'catalog', + moduleId: 'kro-resource-groups', + register(reg) { + reg.registerInit({ + deps: { + catalog: catalogProcessingExtensionPoint, + config: coreServices.rootConfig, + logger: coreServices.logger, + }, + async init({ catalog, config, logger }) { + // Register the ResourceGroup processor + catalog.addProcessor( + new KroResourceGroupProcessor(config, logger), + ); + + logger.info('Kro ResourceGroup catalog processor registered successfully'); + }, + }); + }, +}); \ No newline at end of file diff --git a/packages/backend/src/plugins/catalog-processors/kro-resource-group-processor.ts b/packages/backend/src/plugins/catalog-processors/kro-resource-group-processor.ts new file mode 100644 index 0000000..b0846b7 --- /dev/null +++ b/packages/backend/src/plugins/catalog-processors/kro-resource-group-processor.ts @@ -0,0 +1,312 @@ +import { Config } from '@backstage/config'; +import { Entity } from '@backstage/catalog-model'; +import { + CatalogProcessor, + CatalogProcessorEmit, + LocationSpec, + processingResult, +} from '@backstage/plugin-catalog-node'; + +export class KroResourceGroupProcessor implements CatalogProcessor { + private kubernetesClient: any; + + constructor( + private config: Config, + private logger: any, + ) { + this.initializeKubernetesClient(); + } + + private initializeKubernetesClient() { + // Initialize Kubernetes client based on configuration + // This would be implemented with actual Kubernetes client + } + + getProcessorName(): string { + return 'KroResourceGroupProcessor'; + } + + async readLocation( + location: LocationSpec, + _optional: boolean, + emit: CatalogProcessorEmit, + ): Promise { + if (location.type === 'kro-resource-graph-definitions') { + await this.processResourceGraphDefinitions(location.target, emit); + return true; + } + + if (location.type === 'kro-resource-groups') { + await this.processResourceGroups(location.target, emit); + return true; + } + + return false; + } + + private async processResourceGraphDefinitions( + cluster: string, + emit: CatalogProcessorEmit, + ): Promise { + try { + this.logger.info('Processing ResourceGraphDefinitions', { cluster }); + + const rgds = await this.kubernetesClient.listResourceGraphDefinitions(cluster); + + for (const rgd of rgds) { + try { + const entity = this.transformResourceGraphDefinitionToEntity(rgd, cluster); + if (entity) { + emit(processingResult.entity({ + type: 'kro-resource-graph-definitions', + target: cluster, + }, entity)); + } + } catch (error) { + this.logger.warn('Skipping malformed ResourceGraphDefinition', { + name: rgd.metadata?.name, + namespace: rgd.metadata?.namespace, + error: (error as Error).message, + }); + } + } + } catch (error) { + if ((error as Error).message.includes('Unauthorized')) { + this.logger.error('Authentication failed for cluster', { + cluster, + errorType: 'AUTHENTICATION_FAILED', + error: (error as Error).message, + }); + } else { + this.logger.error('Failed to fetch ResourceGraphDefinitions', { + cluster, + error: (error as Error).message, + }); + } + } + } + + private async processResourceGroups( + cluster: string, + emit: CatalogProcessorEmit, + ): Promise { + try { + this.logger.info('Processing ResourceGroups', { cluster }); + + const resourceGroups = await this.kubernetesClient.listResourceGroups(cluster); + + for (const rg of resourceGroups) { + try { + const entity = this.transformResourceGroupToEntity(rg, cluster); + if (entity) { + emit(processingResult.entity({ + type: 'kro-resource-groups', + target: cluster, + }, entity)); + } + } catch (error) { + this.logger.warn('Skipping malformed ResourceGroup', { + name: rg.metadata?.name, + namespace: rg.metadata?.namespace, + error: (error as Error).message, + }); + } + } + } catch (error) { + this.logger.error('Failed to fetch ResourceGroups', { + cluster, + error: (error as Error).message, + }); + } + } + + private transformResourceGraphDefinitionToEntity(rgd: any, cluster: string): Entity | null { + if (!rgd.metadata?.name) { + throw new Error('ResourceGraphDefinition missing required name'); + } + + const name = rgd.metadata.name; + const namespace = rgd.metadata.namespace || 'default'; + const labels = rgd.metadata.labels || {}; + const annotations = rgd.metadata.annotations || {}; + + // Determine lifecycle from labels or default to production + const lifecycle = labels['backstage.io/lifecycle'] || 'production'; + + // Determine owner from annotations or default to platform-team + const owner = annotations['backstage.io/owner'] || 'platform-team'; + + const entity: Entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name, + namespace, + annotations: { + 'backstage.io/kubernetes-id': name, + 'kro.run/resource-graph-definition': name, + 'backstage.io/source-location': `kro:${cluster}/${namespace}/${name}`, + ...annotations, + }, + labels: { + 'backstage.io/kubernetes-cluster': cluster, + 'kro.run/version': 'v1alpha1', + ...labels, + }, + title: annotations['kro.run/display-name'] || name, + description: annotations['kro.run/description'], + }, + spec: { + type: 'kro-resource-group', + lifecycle, + owner, + system: annotations['backstage.io/system'], + }, + }; + + // Add status if available + if (rgd.status) { + (entity as any).status = { + phase: this.extractPhase(rgd.status), + conditions: rgd.status.conditions || [], + }; + + // Add status annotation for failed resources + if ((entity as any).status.phase === 'Failed') { + entity.metadata.annotations!['backstage.io/status'] = 'Failed'; + } + } + + return entity; + } + + private transformResourceGroupToEntity(rg: any, cluster: string): Entity | null { + if (!rg.metadata?.name) { + throw new Error('ResourceGroup missing required name'); + } + + const name = rg.metadata.name; + const namespace = rg.metadata.namespace || 'default'; + const labels = rg.metadata.labels || {}; + const annotations = rg.metadata.annotations || {}; + + // Determine lifecycle from labels or namespace + let lifecycle = labels['backstage.io/lifecycle'] || 'production'; + if (namespace.startsWith('dev-') || namespace === 'development') { + lifecycle = 'development'; + } else if (namespace.startsWith('staging') || namespace === 'staging') { + lifecycle = 'staging'; + } + + // Determine owner from annotations + const owner = annotations['backstage.io/owner'] || + annotations['kro.run/created-by'] || + 'platform-team'; + + const entity: Entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name, + namespace, + annotations: { + 'backstage.io/kubernetes-id': name, + 'kro.run/resource-group': name, + 'backstage.io/source-location': `kro:${cluster}/${namespace}/${name}`, + ...annotations, + }, + labels: { + 'backstage.io/kubernetes-cluster': cluster, + 'kro.run/version': 'v1alpha1', + ...labels, + }, + title: annotations['kro.run/display-name'] || name, + description: annotations['kro.run/description'], + }, + spec: { + type: 'kro-resource-group', + lifecycle, + owner, + system: annotations['backstage.io/system'], + }, + }; + + // Add relationships + const relations = []; + + // Relationship to ResourceGraphDefinition + const rgdName = labels['kro.run/resource-graph-definition']; + if (rgdName) { + relations.push({ + type: 'ownedBy', + targetRef: `component:${namespace}/${rgdName}`, + }); + } + + // Relationships to managed resources + if (rg.status?.managedResources) { + for (const resource of rg.status.managedResources) { + const resourceNamespace = resource.namespace || namespace; + relations.push({ + type: 'dependsOn', + targetRef: `resource:${resourceNamespace}/${resource.name}`, + }); + } + } + + if (relations.length > 0) { + entity.relations = relations; + } + + // Add status if available + if (rg.status) { + (entity as any).status = { + phase: this.extractPhase(rg.status), + conditions: rg.status.conditions || [], + }; + + // Add status annotation for failed resources + if ((entity as any).status.phase === 'Failed') { + entity.metadata.annotations!['backstage.io/status'] = 'Failed'; + } + } + + return entity; + } + + private extractPhase(status: any): string { + if (status.phase) { + return status.phase; + } + + // Determine phase from conditions + const readyCondition = status.conditions?.find((c: any) => c.type === 'Ready'); + if (readyCondition) { + if (readyCondition.status === 'True') { + return 'Ready'; + } else if (readyCondition.reason === 'Failed' || readyCondition.status === 'False') { + return 'Failed'; + } else { + return 'Pending'; + } + } + + return 'Unknown'; + } +} + +// Helper function to create location for ResourceGraphDefinitions +export function createResourceGraphDefinitionLocation(cluster: string): LocationSpec { + return { + type: 'kro-resource-graph-definitions', + target: cluster, + }; +} + +// Helper function to create location for ResourceGroups +export function createResourceGroupLocation(cluster: string): LocationSpec { + return { + type: 'kro-resource-groups', + target: cluster, + }; +} \ No newline at end of file diff --git a/packages/backend/src/plugins/gitea-actions.ts b/packages/backend/src/plugins/gitea-actions.ts deleted file mode 100644 index 0780299..0000000 --- a/packages/backend/src/plugins/gitea-actions.ts +++ /dev/null @@ -1,600 +0,0 @@ -import { InputError } from '@backstage/errors'; -import { Config } from '@backstage/config'; -import { - getGiteaRequestOptions, - GiteaIntegrationConfig, - ScmIntegrationRegistry, - ScmIntegrations, -} from '@backstage/integration'; -import { - createTemplateAction, - getRepoSourceDirectory, - initRepoAndPush, - TemplateExample, -} from '@backstage/plugin-scaffolder-node'; -import crypto from 'crypto'; -import yaml from 'yaml'; - -export const examples: TemplateExample[] = [ - { - description: - 'Initializes a Gitea repository using the content of the workspace and publish it to Gitea with default configuration.', - example: yaml.stringify({ - steps: [ - { - id: 'publish', - action: 'publish:gitea', - name: 'Publish to Gitea', - input: { - repoUrl: 'gitea.com?repo=repo&owner=owner', - }, - }, - ], - }), - }, - { - description: 'Initializes a Gitea repository with a description.', - example: yaml.stringify({ - steps: [ - { - id: 'publish', - action: 'publish:gitea', - name: 'Publish to Gitea', - input: { - repoUrl: 'gitea.com?repo=repo&owner=owner', - description: 'Initialize a gitea repository', - }, - }, - ], - }), - }, - { - description: - 'Initializes a Gitea repository with a default Branch, if not set defaults to main', - example: yaml.stringify({ - steps: [ - { - id: 'publish', - action: 'publish:gitea', - name: 'Publish to Gitea', - input: { - repoUrl: 'gitea.com?repo=repo&owner=owner', - defaultBranch: 'main', - }, - }, - ], - }), - }, - { - description: - 'Initializes a Gitea repository with an initial commit message, if not set defaults to initial commit', - example: yaml.stringify({ - steps: [ - { - id: 'publish', - action: 'publish:gitea', - name: 'Publish to Gitea', - input: { - repoUrl: 'gitea.com?repo=repo&owner=owner', - gitCommitMessage: 'Initial Commit Message', - }, - }, - ], - }), - }, - { - description: - 'Initializes a Gitea repository with a repo Author Name, if not set defaults to Scaffolder', - example: yaml.stringify({ - steps: [ - { - id: 'publish', - action: 'publish:gitea', - name: 'Publish to Gitea', - input: { - repoUrl: 'gitea.com?repo=repo&owner=owner', - gitAuthorName: 'John Doe', - }, - }, - ], - }), - }, - { - description: 'Initializes a Gitea repository with a repo Author Email', - example: yaml.stringify({ - steps: [ - { - id: 'publish', - action: 'publish:gitea', - name: 'Publish to Gitea', - input: { - repoUrl: 'gitea.com?repo=repo&owner=owner', - gitAuthorEmail: 'johndoe@email.com', - }, - }, - ], - }), - }, - { - description: - 'Path within the workspace that will be used as the repository root. If omitted, the entire workspace will be published as the repository', - example: yaml.stringify({ - steps: [ - { - id: 'publish', - action: 'publish:gitea', - name: 'Publish to Gitea', - input: { - repoUrl: 'gitea.com?repo=repo&owner=owner', - sourcePath: 'repository/', - }, - }, - ], - }), - }, - { - description: 'Initializes a Gitea repository with all properties being set', - example: yaml.stringify({ - steps: [ - { - id: 'publish', - action: 'publish:gitea', - name: 'Publish to Gitea', - input: { - repoUrl: 'gitea.com?repo=repo&owner=owner', - description: 'Initialize a gitea repository', - defaultBranch: 'staging', - gitCommitMessage: 'Initial Commit Message', - gitAuthorName: 'John Doe', - gitAuthorEmail: 'johndoe@email.com', - sourcePath: 'repository/', - }, - }, - ], - }), - }, -]; - -const parseRepoUrl = ( - repoUrl: string, - integrations: ScmIntegrationRegistry, -): { - repo: string; - host: string; - owner?: string; - organization?: string; - workspace?: string; - project?: string; -} => { - let parsed; - try { - parsed = new URL(`https://${repoUrl}`); - } catch (error) { - throw new InputError( - `Invalid repo URL passed to publisher, got ${repoUrl}, ${error}`, - ); - } - const host = parsed.host; - const owner = parsed.searchParams.get('owner') ?? undefined; - const organization = parsed.searchParams.get('organization') ?? undefined; - const workspace = parsed.searchParams.get('workspace') ?? undefined; - const project = parsed.searchParams.get('project') ?? undefined; - - const type = integrations.byHost(host)?.type; - - if (!type) { - throw new InputError( - `No matching integration configuration for host ${host}, please check your integrations config`, - ); - } - - const repo: string = parsed.searchParams.get('repo')!; - switch (type) { - case 'bitbucket': { - if (host === 'www.bitbucket.org') { - checkRequiredParams(parsed, 'workspace'); - } - checkRequiredParams(parsed, 'project', 'repo'); - break; - } - case 'gitlab': { - // project is the projectID, and if defined, owner and repo won't be needed. - if (!project) { - checkRequiredParams(parsed, 'owner', 'repo'); - } - break; - } - case 'gitea': { - checkRequiredParams(parsed, 'repo'); - break; - } - case 'gerrit': { - checkRequiredParams(parsed, 'repo'); - break; - } - default: { - checkRequiredParams(parsed, 'repo', 'owner'); - break; - } - } - - return { host, owner, repo, organization, workspace, project }; -}; - -function checkRequiredParams(repoUrl: URL, ...params: string[]) { - for (let i = 0; i < params.length; i++) { - if (!repoUrl.searchParams.get(params[i])) { - throw new InputError( - `Invalid repo URL passed to publisher: ${repoUrl.toString()}, missing ${ - params[i] - }`, - ); - } - } -} -// const checkGiteaContentUrl = async ( -// config: GiteaIntegrationConfig, -// options: { -// owner?: string; -// repo: string; -// defaultBranch?: string; -// }, -// ): Promise => { -// const { owner, repo, defaultBranch } = options; -// let response: Response; -// const getOptions: RequestInit = { -// method: 'GET', -// }; -// -// try { -// response = await fetch( -// `${config.baseUrl}/${owner}/${repo}/src/branch/${defaultBranch}`, -// getOptions, -// ); -// } catch (e) { -// throw new Error( -// `Unable to get the repository: ${owner}/${repo} metadata , ${e}`, -// ); -// } -// return response; -// }; - -const checkGiteaOrg = async ( - config: GiteaIntegrationConfig, - options: { - owner: string; - }, -): Promise => { - const { owner } = options; - let response: Response; - // check first if the org = owner exists - const getOptions: RequestInit = { - method: 'GET', - headers: { - ...getGiteaRequestOptions(config).headers, - 'Content-Type': 'application/json', - }, - }; - try { - response = await fetch( - `${config.baseUrl}/api/v1/orgs/${owner}`, - getOptions, - ); - } catch (e) { - throw new Error(`Unable to get the Organization: ${owner}, ${e}`); - } - if (response.status !== 200) { - throw new Error( - `Organization ${owner} do not exist. Please create it first !`, - ); - } -}; - -const createGiteaProject = async ( - config: GiteaIntegrationConfig, - options: { - projectName: string; - owner?: string; - description: string; - }, -): Promise => { - const { projectName, description, owner } = options; - - /* - Several options exist to create a repository using either the user or organisation - User: https://gitea.com/api/swagger#/user/createCurrentUserRepo - Api: URL/api/v1/user/repos - Remark: The user is the username defined part of the backstage integration config for the gitea URL ! - - Org: https://gitea.com/api/swagger#/organization/createOrgRepo - Api: URL/api/v1/orgs/${org_owner}/repos - This is the default scenario that we support currently - */ - let response: Response; - - const postOptions: RequestInit = { - method: 'POST', - body: JSON.stringify({ - name: projectName, - description, - }), - headers: { - ...getGiteaRequestOptions(config).headers, - 'Content-Type': 'application/json', - }, - }; - if (owner) { - try { - response = await fetch( - `${config.baseUrl}/api/v1/orgs/${owner}/repos`, - postOptions, - ); - } catch (e) { - throw new Error(`Unable to create repository, ${e}`); - } - if (response.status !== 201) { - throw new Error( - `Unable to create repository, ${response.status} ${ - response.statusText - }, ${await response.text()}`, - ); - } - } else { - try { - response = await fetch( - `${config.baseUrl}/api/v1/user/repos`, - postOptions, - ); - } catch (e) { - throw new Error(`Unable to create repository, ${e}`); - } - if (response.status !== 201) { - throw new Error( - `Unable to create repository, ${response.status} ${ - response.statusText - }, ${await response.text()}`, - ); - } - } -}; - -const generateCommitMessage = ( - config: Config, - commitSubject?: string, -): string => { - const changeId = crypto.randomBytes(20).toString('hex'); - const msg = `${ - config.getOptionalString('scaffolder.defaultCommitMessage') || commitSubject - }\n\nChange-Id: I${changeId}`; - return msg; -}; - -// async function checkDurationLimit(fn: () => void, timeLimit: number): Promise { -// -// const startTime = process.hrtime(); -// -// // Call the function -// await fn(); -// -// const endTime = process.hrtime(startTime); -// const durationInMs = endTime[0] * 1000 + endTime[1] / 1e6; -// -// // Check if the duration exceeds the time limit -// return durationInMs <= timeLimit; -// } -// -// async function checkAvailabilityGiteaRepository( -// integrationConfig: GiteaIntegrationConfig, -// options: { -// owner?: string; -// repo: string; -// defaultBranch: string; -// ctx: ActionContext; -// }, -// ) { -// const { owner, repo, defaultBranch, ctx } = options; -// const sleep = (ms: number | undefined) => new Promise(r => setTimeout(r, ms)); -// let response: Response; -// -// const p = new Promise((resolve, reject) => { -// setTimeout(async () => { -// response = await checkGiteaContentUrl(integrationConfig, { -// owner, -// repo, -// defaultBranch, -// }); -// -// while (response.status !== 200) { -// if (ctx.signal?.aborted) return; -// await sleep(1000); -// response = await checkGiteaContentUrl(integrationConfig, { -// owner, -// repo, -// defaultBranch, -// }); -// } -// resolve() -// }, -// 5000 -// ) -// }) -// return p -// -// } - -/** - * Creates a new action that initializes a git repository using the content of the workspace. - * and publishes it to a Gitea instance. - * @public - */ -export function createPublishGiteaAction(options: { - integrations: ScmIntegrations; - config: Config; -}) { - const { integrations, config } = options; - - return createTemplateAction<{ - repoUrl: string; - description: string; - defaultBranch?: string; - gitCommitMessage?: string; - gitAuthorName?: string; - gitAuthorEmail?: string; - sourcePath?: string; - }>({ - id: 'publish:gitea', - description: - 'Initializes a git repository using the content of the workspace, and publishes it to Gitea.', - examples, - schema: { - input: { - type: 'object', - required: ['repoUrl'], - properties: { - repoUrl: { - title: 'Repository Location', - type: 'string', - }, - description: { - title: 'Repository Description', - type: 'string', - }, - defaultBranch: { - title: 'Default Branch', - type: 'string', - description: `Sets the default branch on the repository. The default value is 'main'`, - }, - gitCommitMessage: { - title: 'Git Commit Message', - type: 'string', - description: `Sets the commit message on the repository. The default value is 'initial commit'`, - }, - gitAuthorName: { - title: 'Default Author Name', - type: 'string', - description: `Sets the default author name for the commit. The default value is 'Scaffolder'`, - }, - gitAuthorEmail: { - title: 'Default Author Email', - type: 'string', - description: `Sets the default author email for the commit.`, - }, - sourcePath: { - title: 'Source Path', - type: 'string', - description: `Path within the workspace that will be used as the repository root. If omitted, the entire workspace will be published as the repository.`, - }, - }, - }, - output: { - type: 'object', - properties: { - remoteUrl: { - title: 'A URL to the repository with the provider', - type: 'string', - }, - repoContentsUrl: { - title: 'A URL to the root of the repository', - type: 'string', - }, - commitHash: { - title: 'The git commit hash of the initial commit', - type: 'string', - }, - }, - }, - }, - async handler(ctx) { - const { - repoUrl, - description, - defaultBranch = 'main', - gitAuthorName, - gitAuthorEmail, - gitCommitMessage = 'initial commit', - sourcePath, - } = ctx.input; - const { repo, host, owner } = parseRepoUrl(repoUrl, integrations); - const integrationConfig = integrations.gitea.byHost(host); - if (!integrationConfig) { - throw new InputError( - `No matching integration configuration for host ${host}, please check your integrations config`, - ); - } - const { username, password } = integrationConfig.config; - - if (!username || !password) { - throw new Error('Credentials for the gitea ${host} required.'); - } - - // check if the org exists within the gitea server - if (owner && owner !== username) { - await checkGiteaOrg(integrationConfig.config, { owner }); - } - - await createGiteaProject(integrationConfig.config, { - description, - owner: owner, - projectName: repo, - }); - - const auth = { - username: username, - password: password, - }; - const gitAuthorInfo = { - name: gitAuthorName - ? gitAuthorName - : config.getOptionalString('scaffolder.defaultAuthor.name'), - email: gitAuthorEmail - ? gitAuthorEmail - : config.getOptionalString('scaffolder.defaultAuthor.email'), - }; - // The owner to be used should be either the org name or user authenticated with the gitea server - const repoOwner = owner ? owner : username; - const remoteUrl = `${integrationConfig.config.baseUrl}/${repoOwner}/${repo}.git`; - const commitResult = await initRepoAndPush({ - dir: getRepoSourceDirectory(ctx.workspacePath, sourcePath), - remoteUrl, - auth, - defaultBranch, - logger: ctx.logger, - commitMessage: generateCommitMessage(config, gitCommitMessage), - gitAuthorInfo, - }); - - // Check if the gitea repo URL is available before to exit - const operationTimeLimit = 5000; // 20 seconds - const sleep = (ms: number | undefined) => - new Promise(r => setTimeout(r, ms)); - await sleep(operationTimeLimit); - // await checkAvailabilityGiteaRepository( - // integrationConfig.config, { - // repoOwner, - // repo, - // defaultBranch, - // ctx, - // } - // ) - // const checkDuration = await checkDurationLimit( - // async () => - // await checkAvailabilityGiteaRepository(integrationConfig.config, { - // repoOwner, - // repo, - // defaultBranch, - // ctx, - // }), - // operationTimeLimit, - // ); - // - // if (!checkDuration) { - // console.log('Operation exceeded the time limit.'); - // } - - const repoContentsUrl = `${integrationConfig.config.baseUrl}/${repoOwner}/${repo}/src/branch/${defaultBranch}/`; - ctx.output('remoteUrl', remoteUrl); - ctx.output('commitHash', commitResult?.commitHash); - ctx.output('repoContentsUrl', repoContentsUrl); - }, - }); -} diff --git a/packages/backend/src/plugins/kro-audit.ts b/packages/backend/src/plugins/kro-audit.ts new file mode 100644 index 0000000..384c66d --- /dev/null +++ b/packages/backend/src/plugins/kro-audit.ts @@ -0,0 +1,231 @@ +import { createBackendModule } from '@backstage/backend-plugin-api'; +import { coreServices } from '@backstage/backend-plugin-api'; + +/** + * Audit event types for ResourceGroup operations + */ +export enum KroAuditEventType { + RESOURCE_GROUP_VIEWED = 'resourcegroup.viewed', + RESOURCE_GROUP_CREATED = 'resourcegroup.created', + RESOURCE_GROUP_UPDATED = 'resourcegroup.updated', + RESOURCE_GROUP_DELETED = 'resourcegroup.deleted', + RESOURCE_GROUP_CREATION_FAILED = 'resourcegroup.creation.failed', + RESOURCE_GROUP_TEMPLATE_EXECUTED = 'resourcegroup.template.executed', + PERMISSION_DENIED = 'permission.denied', + AUTHENTICATION_FAILED = 'authentication.failed', + AUTHORIZATION_FAILED = 'authorization.failed', +} + +/** + * Audit event interface + */ +export interface KroAuditEvent { + eventType: KroAuditEventType; + timestamp: Date; + user: { + userEntityRef: string; + type: string; + }; + resource: { + type: string; + name: string; + namespace?: string; + cluster?: string; + }; + action: string; + result: 'success' | 'failure'; + details?: Record; + error?: string; + clientInfo?: { + userAgent?: string; + ipAddress?: string; + }; +} + +/** + * Kro audit logger for ResourceGroup operations + */ +export class KroAuditLogger { + constructor(private logger: any) { } + + /** + * Log ResourceGroup operation audit event + */ + logResourceGroupOperation( + eventType: KroAuditEventType, + user: any, + resource: { + type: string; + name: string; + namespace?: string; + cluster?: string; + }, + action: string, + result: 'success' | 'failure', + details?: Record, + error?: string + ): void { + const auditEvent: KroAuditEvent = { + eventType, + timestamp: new Date(), + user: { + userEntityRef: user.identity.userEntityRef, + type: user.identity.type, + }, + resource, + action, + result, + details, + error, + }; + + this.logger.info('Kro audit event', { + ...auditEvent, + component: 'kro-audit', + audit: true, + }); + } + + /** + * Log permission denied events + */ + logPermissionDenied( + user: any, + resource: { + type: string; + name?: string; + namespace?: string; + cluster?: string; + }, + action: string, + reason?: string + ): void { + this.logResourceGroupOperation( + KroAuditEventType.PERMISSION_DENIED, + user, + { + type: resource.type, + name: resource.name || 'unknown', + namespace: resource.namespace, + cluster: resource.cluster, + }, + action, + 'failure', + { reason }, + reason + ); + } + + /** + * Log authentication failures + */ + logAuthenticationFailure( + user: any, + resource: { + type: string; + name?: string; + namespace?: string; + cluster?: string; + }, + action: string, + error: string + ): void { + this.logResourceGroupOperation( + KroAuditEventType.AUTHENTICATION_FAILED, + user, + { + type: resource.type, + name: resource.name || 'unknown', + namespace: resource.namespace, + cluster: resource.cluster, + }, + action, + 'failure', + {}, + error + ); + } + + /** + * Log authorization failures + */ + logAuthorizationFailure( + user: any, + resource: { + type: string; + name?: string; + namespace?: string; + cluster?: string; + }, + action: string, + error: string + ): void { + this.logResourceGroupOperation( + KroAuditEventType.AUTHORIZATION_FAILED, + user, + { + type: resource.type, + name: resource.name || 'unknown', + namespace: resource.namespace, + cluster: resource.cluster, + }, + action, + 'failure', + {}, + error + ); + } + + /** + * Log successful ResourceGroup operations + */ + logResourceGroupSuccess( + eventType: KroAuditEventType, + user: any, + resource: { + type: string; + name: string; + namespace?: string; + cluster?: string; + }, + action: string, + details?: Record + ): void { + this.logResourceGroupOperation( + eventType, + user, + resource, + action, + 'success', + details + ); + } +} + +/** + * Kro audit backend module + */ +export const kroAuditModule = createBackendModule({ + pluginId: 'kro', + moduleId: 'audit-logging', + register(reg) { + reg.registerInit({ + deps: { + config: coreServices.rootConfig, + logger: coreServices.logger, + }, + async init({ logger }) { + logger.info('Initializing Kro audit logging module'); + + // Create audit logger instance + // Initialize audit logger + new KroAuditLogger(logger); + + // Register audit logger as a service (in a real implementation) + // This would be made available to other parts of the application + + logger.info('Kro audit logging module initialized successfully'); + }, + }); + }, +}); \ No newline at end of file diff --git a/packages/backend/src/plugins/kro-entity-transformer.ts b/packages/backend/src/plugins/kro-entity-transformer.ts new file mode 100644 index 0000000..5a1377c --- /dev/null +++ b/packages/backend/src/plugins/kro-entity-transformer.ts @@ -0,0 +1,246 @@ +import { Entity } from '@backstage/catalog-model'; +import { LoggerService } from '@backstage/backend-plugin-api'; + +/** + * Entity transformer for Kro ResourceGroups + * Transforms Kubernetes ResourceGroup resources into Backstage catalog entities + */ +export class KroEntityTransformer { + constructor(private readonly logger: LoggerService) { } + + /** + * Transform a Kubernetes ResourceGroup into a Backstage catalog entity + */ + transformResourceGroup(kubernetesResource: any, clusterName: string): Entity | null { + try { + const { metadata, status } = kubernetesResource; + + if (!metadata?.name) { + this.logger.warn('ResourceGroup missing required metadata.name, skipping transformation'); + return null; + } + + // Create Backstage entity from ResourceGroup + const entity: Entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: this.sanitizeEntityName(metadata.name), + namespace: metadata.namespace || 'default', + title: metadata.name, + description: this.generateDescription(kubernetesResource), + annotations: { + 'backstage.io/kubernetes-id': `${clusterName}:${metadata.namespace || 'default'}:${metadata.name}`, + 'backstage.io/kubernetes-cluster': clusterName, + 'kro.run/resource-group': 'true', + 'kro.run/definition': JSON.stringify(kubernetesResource), + 'backstage.io/source-location': this.generateSourceLocation(metadata), + }, + labels: { + 'backstage.io/kubernetes-cluster': clusterName, + 'kro.run/type': 'resource-group', + 'kro.run/version': kubernetesResource.apiVersion?.split('/')[1] || 'v1alpha1', + ...this.extractLabels(metadata.labels), + }, + }, + spec: { + type: 'kro-resource-group', + lifecycle: this.determineLifecycle(metadata.labels), + owner: this.determineOwner(metadata.labels, metadata.annotations), + system: this.determineSystem(metadata.labels, metadata.annotations), + }, + }; + + // Add status information as annotations if available + if (status) { + entity.metadata.annotations = { + ...entity.metadata.annotations, + 'kro.run/status-phase': status.phase || 'Unknown', + 'kro.run/status-conditions': JSON.stringify(status.conditions || []), + }; + } + + this.logger.debug(`Transformed ResourceGroup ${metadata.name} into catalog entity`, { + resourceGroup: metadata.name, + namespace: metadata.namespace, + cluster: clusterName, + }); + + return entity; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + this.logger.error(`Failed to transform ResourceGroup into catalog entity`, { + error: errorMessage, + resourceName: kubernetesResource?.metadata?.name, + cluster: clusterName, + }); + return null; + } + } + + /** + * Transform a ResourceGraphDefinition into a Backstage catalog entity + */ + transformResourceGraphDefinition(kubernetesResource: any, clusterName: string): Entity | null { + try { + const { metadata } = kubernetesResource; + + if (!metadata?.name) { + this.logger.warn('ResourceGraphDefinition missing required metadata.name, skipping transformation'); + return null; + } + + // Create Backstage entity from ResourceGraphDefinition + const entity: Entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: this.sanitizeEntityName(`${metadata.name}-rgd`), + namespace: metadata.namespace || 'default', + title: `${metadata.name} Definition`, + description: this.generateRGDDescription(kubernetesResource), + annotations: { + 'backstage.io/kubernetes-id': `${clusterName}:${metadata.namespace || 'default'}:${metadata.name}`, + 'backstage.io/kubernetes-cluster': clusterName, + 'kro.run/resource-graph-definition': 'true', + 'kro.run/definition': JSON.stringify(kubernetesResource), + 'backstage.io/source-location': this.generateSourceLocation(metadata), + }, + labels: { + 'backstage.io/kubernetes-cluster': clusterName, + 'kro.run/type': 'resource-graph-definition', + 'kro.run/version': kubernetesResource.apiVersion?.split('/')[1] || 'v1alpha1', + ...this.extractLabels(metadata.labels), + }, + }, + spec: { + type: 'kro-resource-group', + lifecycle: this.determineLifecycle(metadata.labels), + owner: this.determineOwner(metadata.labels, metadata.annotations), + system: this.determineSystem(metadata.labels, metadata.annotations), + }, + }; + + this.logger.debug(`Transformed ResourceGraphDefinition ${metadata.name} into catalog entity`, { + resourceGraphDefinition: metadata.name, + namespace: metadata.namespace, + cluster: clusterName, + }); + + return entity; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + this.logger.error(`Failed to transform ResourceGraphDefinition into catalog entity`, { + error: errorMessage, + resourceName: kubernetesResource?.metadata?.name, + cluster: clusterName, + }); + return null; + } + } + + /** + * Sanitize entity name to comply with Backstage naming requirements + */ + private sanitizeEntityName(name: string): string { + // Convert to lowercase and replace invalid characters with hyphens + return name + .toLowerCase() + .replace(/[^a-z0-9\-_.]/g, '-') + .replace(/^[-_.]+|[-_.]+$/g, '') + .substring(0, 63); // Kubernetes name length limit + } + + /** + * Generate description for ResourceGroup entity + */ + private generateDescription(resource: any): string { + const kind = resource.spec?.schema?.kind || 'ResourceGroup'; + const namespace = resource.metadata?.namespace || 'default'; + + return `Kro ${kind} in namespace ${namespace}. This ResourceGroup manages composite Kubernetes resources.`; + } + + /** + * Generate description for ResourceGraphDefinition entity + */ + private generateRGDDescription(resource: any): string { + const kind = resource.spec?.schema?.kind || 'Unknown'; + const namespace = resource.metadata?.namespace || 'default'; + + return `Kro ResourceGraphDefinition for ${kind} in namespace ${namespace}. Defines the schema and resources for composite resource creation.`; + } + + /** + * Generate source location annotation + */ + private generateSourceLocation(metadata: any): string { + // Try to extract source location from annotations + const sourceRepo = metadata.annotations?.['kro.run/source-repo']; + const sourcePath = metadata.annotations?.['kro.run/source-path']; + + if (sourceRepo && sourcePath) { + return `url:${sourceRepo}/tree/main/${sourcePath}`; + } + + if (sourceRepo) { + return `url:${sourceRepo}`; + } + + // Default to Kro examples + return 'url:https://github.com/awslabs/kro/tree/main/examples'; + } + + /** + * Extract and sanitize labels + */ + private extractLabels(labels: Record = {}): Record { + const sanitizedLabels: Record = {}; + + for (const [key, value] of Object.entries(labels)) { + // Only include labels that are safe for Backstage + if (key.startsWith('app.kubernetes.io/') || + key.startsWith('kro.run/') || + key.startsWith('backstage.io/')) { + sanitizedLabels[key] = value; + } + } + + return sanitizedLabels; + } + + /** + * Determine lifecycle from labels or default to production + */ + private determineLifecycle(labels: Record = {}): string { + const lifecycle = labels['app.kubernetes.io/environment'] || + labels['kro.run/lifecycle'] || + labels['backstage.io/lifecycle']; + + if (lifecycle && ['experimental', 'production', 'deprecated'].includes(lifecycle)) { + return lifecycle; + } + + return 'production'; + } + + /** + * Determine owner from labels/annotations or default to platform-team + */ + private determineOwner(labels: Record = {}, annotations: Record = {}): string { + return labels['app.kubernetes.io/managed-by'] || + labels['kro.run/owner'] || + annotations['kro.run/owner'] || + 'platform-team'; + } + + /** + * Determine system from labels/annotations + */ + private determineSystem(labels: Record = {}, annotations: Record = {}): string | undefined { + return labels['app.kubernetes.io/part-of'] || + labels['kro.run/system'] || + annotations['kro.run/system'] || + 'platform-infrastructure'; + } +} \ No newline at end of file diff --git a/packages/backend/src/plugins/kro-error-handler.ts b/packages/backend/src/plugins/kro-error-handler.ts new file mode 100644 index 0000000..20586c6 --- /dev/null +++ b/packages/backend/src/plugins/kro-error-handler.ts @@ -0,0 +1,258 @@ +import { BackstageIdentityResponse } from '@backstage/plugin-auth-node'; +import { KroAuditLogger, KroAuditEventType } from './kro-audit'; + +/** + * Enhanced error handler for Kro plugin with proper authorization error messages + */ +export class KroErrorHandler { + constructor( + private logger: any, + private auditLogger: KroAuditLogger + ) { } + + /** + * Handle authentication errors with proper user messaging + */ + handleAuthenticationError( + error: Error, + user: BackstageIdentityResponse, + context: { + cluster?: string; + operation?: string; + resource?: string; + namespace?: string; + } + ): { message: string; userMessage: string; statusCode: number } { + const { cluster, operation, resource, namespace } = context; + + // Log audit event + this.auditLogger.logAuthenticationFailure( + user, + { + type: resource || 'unknown', + name: resource, + namespace, + cluster, + }, + operation || 'unknown', + error.message + ); + + // Enhanced error logging + this.logger.error(`Kubernetes authentication failed for user ${user.identity.userEntityRef}`, { + user: user.identity.userEntityRef, + cluster, + operation, + resource, + namespace, + error: error.message, + errorType: 'AUTHENTICATION_FAILED', + component: 'kro-error-handler' + }); + + // User-friendly error messages + let userMessage: string; + if (error.message.includes('Unauthorized') || error.message.includes('401')) { + userMessage = `Authentication failed when accessing Kubernetes cluster '${cluster}'. Your credentials may be invalid or expired. Please contact your platform administrator to verify your access.`; + } else if (error.message.includes('token')) { + userMessage = `Authentication token is invalid or expired for cluster '${cluster}'. Please refresh your session or contact your platform administrator.`; + } else { + userMessage = `Unable to authenticate with Kubernetes cluster '${cluster}'. Please verify your credentials and try again.`; + } + + return { + message: error.message, + userMessage, + statusCode: 401 + }; + } + + /** + * Handle authorization errors with proper user messaging and RBAC guidance + */ + handleAuthorizationError( + error: Error, + user: BackstageIdentityResponse, + context: { + cluster?: string; + operation?: string; + resource?: string; + namespace?: string; + requiredPermissions?: string[]; + } + ): { message: string; userMessage: string; statusCode: number; guidance?: string } { + const { cluster, operation, resource, namespace, requiredPermissions } = context; + + // Log audit event + this.auditLogger.logAuthorizationFailure( + user, + { + type: resource || 'unknown', + name: resource, + namespace, + cluster, + }, + operation || 'unknown', + error.message + ); + + // Enhanced error logging + this.logger.error(`Kubernetes authorization failed for user ${user.identity.userEntityRef}`, { + user: user.identity.userEntityRef, + cluster, + operation, + resource, + namespace, + requiredPermissions, + error: error.message, + errorType: 'AUTHORIZATION_FAILED', + component: 'kro-error-handler' + }); + + // Generate user-friendly error message with RBAC guidance + let userMessage: string; + let guidance: string; + + if (error.message.includes('Forbidden') || error.message.includes('403')) { + userMessage = `You don't have permission to ${operation} ${resource}${namespace ? ` in namespace '${namespace}'` : ''} on cluster '${cluster}'.`; + + if (requiredPermissions && requiredPermissions.length > 0) { + guidance = `Required permissions: ${requiredPermissions.join(', ')}. Please contact your platform administrator to request these permissions.`; + } else { + guidance = `Please contact your platform administrator to request the necessary permissions for this operation.`; + } + } else { + userMessage = `Access denied for ${operation} operation on ${resource}${namespace ? ` in namespace '${namespace}'` : ''}.`; + guidance = `Please verify your permissions and contact your platform administrator if you believe you should have access.`; + } + + return { + message: error.message, + userMessage, + statusCode: 403, + guidance + }; + } + + /** + * Handle ResourceGroup operation errors with context + */ + handleResourceGroupError( + error: Error, + user: BackstageIdentityResponse, + context: { + resourceGroup: string; + namespace?: string; + cluster?: string; + operation: string; + } + ): { message: string; userMessage: string; statusCode: number } { + const { resourceGroup, namespace, cluster, operation } = context; + + // Log audit event + this.auditLogger.logResourceGroupOperation( + this.getAuditEventType(operation), + user, + { + type: 'ResourceGroup', + name: resourceGroup, + namespace, + cluster, + }, + operation, + 'failure', + {}, + error.message + ); + + // Enhanced error logging + this.logger.error(`ResourceGroup operation failed`, { + user: user.identity.userEntityRef, + resourceGroup, + namespace, + cluster, + operation, + error: error.message, + stack: error.stack, + component: 'kro-error-handler' + }); + + // Generate user-friendly error message + let userMessage: string; + let statusCode: number = 500; + + if (error.message.includes('not found') || error.message.includes('404')) { + userMessage = `ResourceGroup '${resourceGroup}' not found${namespace ? ` in namespace '${namespace}'` : ''}.`; + statusCode = 404; + } else if (error.message.includes('already exists') || error.message.includes('409')) { + userMessage = `ResourceGroup '${resourceGroup}' already exists${namespace ? ` in namespace '${namespace}'` : ''}.`; + statusCode = 409; + } else if (error.message.includes('validation')) { + userMessage = `ResourceGroup '${resourceGroup}' validation failed. Please check the resource specification.`; + statusCode = 400; + } else { + userMessage = `Failed to ${operation} ResourceGroup '${resourceGroup}'. Please try again or contact support.`; + } + + return { + message: error.message, + userMessage, + statusCode + }; + } + + /** + * Map operation to audit event type + */ + private getAuditEventType(operation: string): KroAuditEventType { + switch (operation.toLowerCase()) { + case 'create': + return KroAuditEventType.RESOURCE_GROUP_CREATED; + case 'update': + return KroAuditEventType.RESOURCE_GROUP_UPDATED; + case 'delete': + return KroAuditEventType.RESOURCE_GROUP_DELETED; + case 'view': + case 'get': + return KroAuditEventType.RESOURCE_GROUP_VIEWED; + default: + return KroAuditEventType.RESOURCE_GROUP_VIEWED; + } + } + + /** + * Handle general Kubernetes connection errors + */ + handleConnectionError( + error: Error, + context: { + cluster?: string; + operation?: string; + } + ): { message: string; userMessage: string; statusCode: number } { + const { cluster, operation } = context; + + this.logger.error(`Kubernetes connection error`, { + cluster, + operation, + error: error.message, + errorType: 'CONNECTION_ERROR', + component: 'kro-error-handler' + }); + + let userMessage: string; + if (error.message.includes('ECONNREFUSED') || error.message.includes('ENOTFOUND')) { + userMessage = `Unable to connect to Kubernetes cluster '${cluster}'. The cluster may be unavailable or there may be network connectivity issues.`; + } else if (error.message.includes('timeout')) { + userMessage = `Connection to Kubernetes cluster '${cluster}' timed out. Please try again later.`; + } else { + userMessage = `Connection error when accessing Kubernetes cluster '${cluster}'. Please try again or contact support.`; + } + + return { + message: error.message, + userMessage, + statusCode: 503 + }; + } +} \ No newline at end of file diff --git a/packages/backend/src/plugins/kro-permissions.ts b/packages/backend/src/plugins/kro-permissions.ts new file mode 100644 index 0000000..b2509da --- /dev/null +++ b/packages/backend/src/plugins/kro-permissions.ts @@ -0,0 +1,360 @@ +import { createBackendModule } from '@backstage/backend-plugin-api'; +import { coreServices } from '@backstage/backend-plugin-api'; +import { AuthorizeResult, PolicyDecision } from '@backstage/plugin-permission-common'; +import { PermissionPolicy, PolicyQuery } from '@backstage/plugin-permission-node'; +import { BackstageIdentityResponse } from '@backstage/plugin-auth-node'; + +/** + * Kro-specific permissions for ResourceGroup operations + */ +export const kroPermissions = { + kroResourceGroupRead: { + name: 'kro.resourcegroup.read', + attributes: { + action: 'read', + resourceType: 'kro-resource-group', + }, + }, + kroResourceGroupCreate: { + name: 'kro.resourcegroup.create', + attributes: { + action: 'create', + resourceType: 'kro-resource-group', + }, + }, + kroResourceGroupUpdate: { + name: 'kro.resourcegroup.update', + attributes: { + action: 'update', + resourceType: 'kro-resource-group', + }, + }, + kroResourceGroupDelete: { + name: 'kro.resourcegroup.delete', + attributes: { + action: 'delete', + resourceType: 'kro-resource-group', + }, + }, +}; + +/** + * Kubernetes RBAC validator for Kro operations + */ +export class KroRBACValidator { + constructor( + private logger: any, + private kubernetesApi: any + ) { } + + /** + * Validate user permissions against Kubernetes RBAC for Kro operations + */ + async validateKubernetesPermissions( + user: BackstageIdentityResponse, + action: string, + resource: string, + namespace?: string, + cluster?: string + ): Promise<{ allowed: boolean; reason?: string }> { + try { + this.logger.info(`Validating Kubernetes RBAC permissions for user: ${user.identity.userEntityRef}`, { + user: user.identity.userEntityRef, + action, + resource, + namespace, + cluster, + component: 'kro-permissions' + }); + + // For service account authentication, we assume the service account has proper permissions + // In a real implementation, you would check the user's Kubernetes permissions + if ((user.identity as any).type === 'service') { + return { allowed: true }; + } + + // Simulate RBAC check - in a real implementation, this would call Kubernetes API + // to check if the user has the required permissions + const hasPermission = await this.checkKubernetesRBAC( + user.identity.userEntityRef, + action, + resource, + namespace, + cluster + ); + + if (!hasPermission) { + const reason = `User ${user.identity.userEntityRef} does not have permission to ${action} ${resource}${namespace ? ` in namespace ${namespace}` : ''}${cluster ? ` on cluster ${cluster}` : ''}`; + + this.logger.warn(`Kubernetes RBAC validation failed`, { + user: user.identity.userEntityRef, + action, + resource, + namespace, + cluster, + reason, + component: 'kro-permissions' + }); + + return { allowed: false, reason }; + } + + this.logger.info(`Kubernetes RBAC validation successful`, { + user: user.identity.userEntityRef, + action, + resource, + namespace, + cluster, + component: 'kro-permissions' + }); + + return { allowed: true }; + + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + + this.logger.error(`Error validating Kubernetes RBAC permissions`, { + user: user.identity.userEntityRef, + action, + resource, + namespace, + cluster, + error: errorMessage, + component: 'kro-permissions' + }); + + return { + allowed: false, + reason: `Permission validation failed: ${errorMessage}` + }; + } + } + + /** + * Check Kubernetes RBAC permissions using SubjectAccessReview + */ + private async checkKubernetesRBAC( + userRef: string, + action: string, + resource: string, + namespace?: string, + cluster?: string + ): Promise { + try { + // In a real implementation, this would create a SubjectAccessReview + // to check if the user has the required permissions + + // For now, we'll implement a basic permission check based on user groups + // This should be replaced with actual Kubernetes RBAC checks + + // Extract user information from userRef (format: user:default/username) + const userParts = userRef.split('/'); + const username = userParts[userParts.length - 1]; + + // Define permission mappings (this would typically come from Kubernetes RBAC) + const permissionMappings = { + 'kro.run/v1alpha1/resourcegraphdefinitions': { + 'get': ['kro-readers', 'kro-admins', 'platform-engineers'], + 'list': ['kro-readers', 'kro-admins', 'platform-engineers'], + 'create': ['kro-admins', 'platform-engineers'], + 'update': ['kro-admins', 'platform-engineers'], + 'delete': ['kro-admins', 'platform-engineers'], + }, + 'kro.run/v1alpha1/cicdpipelines': { + 'get': ['kro-readers', 'kro-admins', 'developers'], + 'list': ['kro-readers', 'kro-admins', 'developers'], + 'create': ['kro-admins', 'developers'], + 'update': ['kro-admins', 'developers'], + 'delete': ['kro-admins'], + }, + 'kro.run/v1alpha1/eksclusters': { + 'get': ['kro-readers', 'kro-admins', 'platform-engineers'], + 'list': ['kro-readers', 'kro-admins', 'platform-engineers'], + 'create': ['kro-admins', 'platform-engineers'], + 'update': ['kro-admins', 'platform-engineers'], + 'delete': ['kro-admins', 'platform-engineers'], + }, + }; + + // Get user groups (this would typically come from identity provider) + const userGroups = await this.getUserGroups(username); + + // Check if user has required permissions + const resourcePermissions = (permissionMappings as any)[resource]; + if (!resourcePermissions) { + // If resource is not in our mapping, deny by default + return false; + } + + const allowedGroups = resourcePermissions[action]; + if (!allowedGroups) { + // If action is not defined, deny by default + return false; + } + + // Check if user belongs to any of the allowed groups + const hasPermission = userGroups.some(group => allowedGroups.includes(group)); + + return hasPermission; + + } catch (error) { + this.logger.error(`Error checking Kubernetes RBAC`, { + userRef, + action, + resource, + namespace, + cluster, + error: error instanceof Error ? error.message : String(error), + component: 'kro-permissions' + }); + return false; + } + } + + /** + * Get user groups from identity provider + */ + private async getUserGroups(username: string): Promise { + // In a real implementation, this would fetch user groups from the identity provider + // For now, we'll return some default groups based on username patterns + + if (username.includes('admin')) { + return ['kro-admins', 'platform-engineers']; + } else if (username.includes('engineer')) { + return ['platform-engineers', 'kro-readers']; + } else if (username.includes('dev')) { + return ['developers', 'kro-readers']; + } else { + return ['kro-readers']; + } + } +} + +/** + * Kro permission policy that integrates with Kubernetes RBAC + */ +export class KroPermissionPolicy implements PermissionPolicy { + constructor( + private rbacValidator: KroRBACValidator, + private logger: any + ) { } + + async handle(request: PolicyQuery, user?: BackstageIdentityResponse): Promise { + try { + // Check if this is a Kro-related permission + if (!request.permission.name.startsWith('kro.')) { + return { result: AuthorizeResult.ALLOW }; + } + + if (!user) { + this.logger.warn(`Permission denied: No user context provided for ${request.permission.name}`); + return { result: AuthorizeResult.DENY }; + } + + // Extract action and resource from permission + const permissionParts = request.permission.name.split('.'); + const action = permissionParts[permissionParts.length - 1]; // read, create, update, delete + const resourceType = permissionParts[1]; // resourcegroup + + // Map to Kubernetes resource + let kubernetesResource: string; + switch (resourceType) { + case 'resourcegroup': + kubernetesResource = 'kro.run/v1alpha1/resourcegraphdefinitions'; + break; + default: + kubernetesResource = `kro.run/v1alpha1/${resourceType}s`; + } + + // Map Backstage actions to Kubernetes verbs + let kubernetesVerb: string; + switch (action) { + case 'read': + kubernetesVerb = 'get'; + break; + case 'create': + kubernetesVerb = 'create'; + break; + case 'update': + kubernetesVerb = 'update'; + break; + case 'delete': + kubernetesVerb = 'delete'; + break; + default: + kubernetesVerb = action; + } + + // Validate permissions against Kubernetes RBAC + const validation = await this.rbacValidator.validateKubernetesPermissions( + user, + kubernetesVerb, + kubernetesResource, + (request as any).resourceRef?.namespace, + (request as any).resourceRef?.cluster + ); + + if (validation.allowed) { + this.logger.info(`Permission granted for ${request.permission.name}`, { + user: user.identity.userEntityRef, + permission: request.permission.name, + component: 'kro-permissions' + }); + return { result: AuthorizeResult.ALLOW }; + } else { + this.logger.warn(`Permission denied for ${request.permission.name}`, { + user: user.identity.userEntityRef, + permission: request.permission.name, + reason: validation.reason, + component: 'kro-permissions' + }); + return { result: AuthorizeResult.DENY }; + } + + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + + this.logger.error(`Error evaluating permission policy`, { + permission: request.permission.name, + user: user?.identity.userEntityRef, + error: errorMessage, + component: 'kro-permissions' + }); + + // Deny by default on error + return { result: AuthorizeResult.DENY }; + } + } +} + +/** + * Kro permissions backend module + */ +export const kroPermissionsModule = createBackendModule({ + pluginId: 'permission', + moduleId: 'kro-permissions', + register(reg) { + reg.registerInit({ + deps: { + config: coreServices.rootConfig, + logger: coreServices.logger, + policy: coreServices.permissions, + }, + async init({ logger }) { + logger.info('Initializing Kro permissions module'); + + // Create RBAC validator + const rbacValidator = new KroRBACValidator(logger, null); // kubernetesApi would be injected here + + // Create and register permission policy + // Initialize kro policy + new KroPermissionPolicy(rbacValidator, logger); + + // Note: In a real implementation, you would register this policy with the permission system + // This is a simplified example showing the structure + + logger.info('Kro permissions module initialized successfully'); + }, + }); + }, +}); \ No newline at end of file diff --git a/packages/backend/src/plugins/kro-resource-group-service.ts b/packages/backend/src/plugins/kro-resource-group-service.ts new file mode 100644 index 0000000..2ba6821 --- /dev/null +++ b/packages/backend/src/plugins/kro-resource-group-service.ts @@ -0,0 +1,386 @@ +import { Config } from '@backstage/config'; +import { KroErrorHandler } from './kro-error-handler'; +import { KroAuditLogger, KroAuditEventType } from './kro-audit'; + +export interface ResourceGraphDefinitionInfo { + name: string; + kind: string; + schema: { + properties: Record; + required: string[]; + }; + description?: string; +} + +export interface ResourceGroupCreateRequest { + templateName: string; + name: string; + namespace: string; + cluster: string; + parameters: Record; +} + +export interface ResourceGroupUpdateRequest { + cluster: string; + namespace: string; + name: string; + spec: Record; +} + +export interface ResourceGroupInfo { + name: string; + namespace: string; + kind: string; + status: string; + spec: Record; + managedResources?: Array<{ + apiVersion: string; + kind: string; + name: string; + namespace?: string; + }>; +} + +export interface ResourceGroupListOptions { + namespace?: string; + labelSelector?: string; + fieldSelector?: string; +} + +export interface ResourceGroupStatusUpdate { + name: string; + namespace: string; + phase: string; + type: 'ADDED' | 'MODIFIED' | 'DELETED'; +} + +export interface ResourceGroupWatcher { + close(): void; +} + +export class KroResourceGroupService { + private kubernetesClient: any; + + constructor( + private logger: any, + private errorHandler: KroErrorHandler, + private auditLogger: KroAuditLogger, + ) { + // Initialize Kubernetes client + this.initializeKubernetesClient(); + } + + private initializeKubernetesClient() { + // This would be implemented with actual Kubernetes client initialization + // For now, it's mocked in tests + } + + async discoverResourceGraphDefinitions(cluster: string): Promise { + try { + this.logger.info('Discovering ResourceGraphDefinitions', { cluster }); + + const rgds = await this.kubernetesClient.listResourceGraphDefinitions(cluster); + + if (rgds.length === 0) { + this.logger.warn('No ResourceGraphDefinitions found', { cluster }); + return []; + } + + const definitions = rgds.map((rgd: any) => ({ + name: rgd.metadata.name, + kind: rgd.spec.schema.kind, + schema: { + properties: rgd.spec.schema.spec?.properties || {}, + required: rgd.spec.schema.spec?.required || [], + }, + description: rgd.metadata.annotations?.['kro.run/description'], + })); + + this.logger.info('Discovered ResourceGraphDefinitions', { + cluster, + count: definitions.length, + }); + + return definitions; + } catch (error) { + const connectionError = this.errorHandler.handleConnectionError(error as Error, { + cluster, + operation: 'discover-resource-graph-definitions', + }); + throw new Error(`Failed to discover ResourceGraphDefinitions: ${connectionError.message}`); + } + } + + async createResourceGroup(user: any, request: ResourceGroupCreateRequest): Promise { + try { + // Validate permissions first + if (this.rbacValidator) { + const permissionResult = await this.rbacValidator.validateKubernetesPermissions( + user, + 'create', + `kro.run/v1alpha1/${request.templateName.toLowerCase()}s`, + request.namespace, + request.cluster + ); + + if (!permissionResult.allowed) { + this.auditLogger.logPermissionDenied( + user, + { + type: 'ResourceGroup', + name: request.name, + namespace: request.namespace, + }, + 'create', + permissionResult.reason + ); + throw new Error('Permission denied: ' + permissionResult.reason); + } + } + + // Get ResourceGraphDefinition + const rgd = await this.kubernetesClient.getResourceGraphDefinition( + request.cluster, + 'default', // Assuming RGDs are in default namespace + request.templateName + ); + + // Validate parameters + this.validateParameters(request.parameters, rgd.spec.schema.spec); + + // Create ResourceGroup + const resourceGroup = { + apiVersion: 'kro.run/v1alpha1', + kind: rgd.spec.schema.kind, + metadata: { + name: request.name, + namespace: request.namespace, + labels: { + 'kro.run/resource-graph-definition': request.templateName, + }, + annotations: { + 'kro.run/created-by': user.identity.userEntityRef, + }, + }, + spec: request.parameters, + }; + + const created = await this.kubernetesClient.createResourceGroup(request.cluster, resourceGroup); + + const result: ResourceGroupInfo = { + name: created.metadata.name, + namespace: created.metadata.namespace, + kind: created.kind, + status: this.extractStatus(created.status), + spec: created.spec, + }; + + this.auditLogger.logResourceGroupOperation( + KroAuditEventType.RESOURCE_GROUP_CREATED, + user, + { + type: 'ResourceGroup', + name: request.name, + namespace: request.namespace, + cluster: request.cluster, + }, + 'create', + 'success', + { templateUsed: request.templateName } + ); + + return result; + } catch (error) { + this.auditLogger.logResourceGroupOperation( + KroAuditEventType.RESOURCE_GROUP_CREATION_FAILED, + user, + { + type: 'ResourceGroup', + name: request.name, + namespace: request.namespace, + cluster: request.cluster, + }, + 'create', + 'failure', + undefined, + (error as Error).message + ); + throw new Error(`Failed to create ResourceGroup: ${(error as Error).message}`); + } + } + + async getResourceGroup(_user: any, cluster: string, namespace: string, name: string): Promise { + const resourceGroup = await this.kubernetesClient.getResourceGroup(cluster, namespace, name); + + return { + name: resourceGroup.metadata.name, + namespace: resourceGroup.metadata.namespace, + kind: resourceGroup.kind, + status: this.extractStatus(resourceGroup.status), + spec: resourceGroup.spec, + managedResources: resourceGroup.status?.managedResources || [], + }; + } + + async listResourceGroups(_user: any, cluster: string, options: ResourceGroupListOptions = {}): Promise { + const resourceGroups = await this.kubernetesClient.listResourceGroups(cluster, options); + + return resourceGroups + .filter((rg: any) => { + // Apply client-side filtering if needed + if (options.namespace && rg.metadata.namespace !== options.namespace) { + return false; + } + return true; + }) + .map((rg: any) => ({ + name: rg.metadata.name, + namespace: rg.metadata.namespace, + kind: rg.kind, + status: this.extractStatus(rg.status), + spec: rg.spec, + })); + } + + async updateResourceGroup(user: any, request: ResourceGroupUpdateRequest): Promise { + try { + // Get existing ResourceGroup + const existing = await this.kubernetesClient.getResourceGroup( + request.cluster, + request.namespace, + request.name + ); + + // Update spec + const updated = { + ...existing, + spec: request.spec, + }; + + const result = await this.kubernetesClient.updateResourceGroup(request.cluster, updated); + + this.auditLogger.logResourceGroupOperation( + KroAuditEventType.RESOURCE_GROUP_UPDATED, + user, + { + type: 'ResourceGroup', + name: request.name, + namespace: request.namespace, + cluster: request.cluster, + }, + 'update', + 'success' + ); + + return { + name: result.metadata.name, + namespace: result.metadata.namespace, + kind: result.kind, + status: this.extractStatus(result.status), + spec: result.spec, + }; + } catch (error) { + throw new Error(`Failed to update ResourceGroup: ${(error as Error).message}`); + } + } + + async deleteResourceGroup(user: any, cluster: string, namespace: string, name: string): Promise { + await this.kubernetesClient.deleteResourceGroup(cluster, namespace, name); + + this.auditLogger.logResourceGroupOperation( + KroAuditEventType.RESOURCE_GROUP_DELETED, + user, + { + type: 'ResourceGroup', + name, + namespace, + cluster, + }, + 'delete', + 'success' + ); + } + + watchResourceGroupStatus( + cluster: string, + namespace: string, + name: string, + callback: (update: ResourceGroupStatusUpdate) => void, + errorCallback?: (error: Error) => void + ): ResourceGroupWatcher { + const watcher = this.kubernetesClient.watchResourceGroup(cluster, namespace, name); + + watcher.on('data', (event: any) => { + callback({ + name: event.object.metadata.name, + namespace: event.object.metadata.namespace, + phase: this.extractStatus(event.object.status), + type: event.type, + }); + }); + + watcher.on('error', (error: Error) => { + this.logger.error('ResourceGroup watch error', { + cluster, + namespace, + name, + error: error.message, + }); + if (errorCallback) { + errorCallback(error); + } + }); + + return { + close: () => watcher.close(), + }; + } + + private validateParameters(parameters: Record, schema: any): void { + const required = schema.required || []; + const properties = schema.properties || {}; + + // Check required parameters + const missing = required.filter((field: string) => !(field in parameters)); + if (missing.length > 0) { + this.logger.error('Parameter validation failed', { + missingRequired: missing, + provided: Object.keys(parameters), + }); + throw new Error(`Parameter validation failed: missing required fields: ${missing.join(', ')}`); + } + + // Validate parameter types (basic validation) + for (const [key, value] of Object.entries(parameters)) { + const propertySchema = properties[key]; + if (propertySchema && propertySchema.type) { + const expectedType = propertySchema.type; + const actualType = typeof value; + + if (expectedType === 'string' && actualType !== 'string') { + throw new Error(`Parameter '${key}' must be a string`); + } + if (expectedType === 'number' && actualType !== 'number') { + throw new Error(`Parameter '${key}' must be a number`); + } + if (expectedType === 'boolean' && actualType !== 'boolean') { + throw new Error(`Parameter '${key}' must be a boolean`); + } + } + } + } + + private extractStatus(status: any): string { + if (!status) return 'Unknown'; + if (status.phase) return status.phase; + + const readyCondition = status.conditions?.find((c: any) => c.type === 'Ready'); + if (readyCondition) { + return readyCondition.status === 'True' ? 'Ready' : 'Pending'; + } + + return 'Unknown'; + } + + private rbacValidator: any; // This would be injected in real implementation +} \ No newline at end of file diff --git a/packages/backend/src/plugins/kro-security.ts b/packages/backend/src/plugins/kro-security.ts new file mode 100644 index 0000000..28c465a --- /dev/null +++ b/packages/backend/src/plugins/kro-security.ts @@ -0,0 +1,171 @@ +import { createBackendModule } from '@backstage/backend-plugin-api'; +import { coreServices } from '@backstage/backend-plugin-api'; +import { KroRBACValidator } from './kro-permissions'; +import { KroAuditLogger } from './kro-audit'; +import { KroErrorHandler } from './kro-error-handler'; + +/** + * Security configuration for Kro plugin + */ +export interface KroSecurityConfig { + enablePermissions: boolean; + enableAuditLogging: boolean; + rbacValidation: { + enabled: boolean; + strictMode: boolean; + cacheTimeout: number; + }; + auditLogging: { + enabled: boolean; + logLevel: 'info' | 'warn' | 'error'; + includeSuccessEvents: boolean; + }; + errorHandling: { + enableDetailedErrors: boolean; + includeStackTrace: boolean; + }; +} + +/** + * Kro security service that coordinates all security components + */ +export class KroSecurityService { + private rbacValidator: KroRBACValidator; + private auditLogger: KroAuditLogger; + private errorHandler: KroErrorHandler; + private config: KroSecurityConfig; + + constructor( + private logger: any, + config: KroSecurityConfig, + kubernetesApi?: any + ) { + this.config = config; + this.auditLogger = new KroAuditLogger(logger); + this.rbacValidator = new KroRBACValidator(logger, kubernetesApi); + this.errorHandler = new KroErrorHandler(logger, this.auditLogger); + + this.logger.info('Kro security service initialized', { + enablePermissions: config.enablePermissions, + enableAuditLogging: config.enableAuditLogging, + rbacValidationEnabled: config.rbacValidation.enabled, + component: 'kro-security' + }); + } + + /** + * Get RBAC validator instance + */ + getRBACValidator(): KroRBACValidator { + return this.rbacValidator; + } + + /** + * Get audit logger instance + */ + getAuditLogger(): KroAuditLogger { + return this.auditLogger; + } + + /** + * Get error handler instance + */ + getErrorHandler(): KroErrorHandler { + return this.errorHandler; + } + + /** + * Get security configuration + */ + getConfig(): KroSecurityConfig { + return this.config; + } + + /** + * Validate security configuration + */ + validateConfiguration(): { valid: boolean; errors: string[] } { + const errors: string[] = []; + + if (this.config.enablePermissions && !this.config.rbacValidation.enabled) { + errors.push('RBAC validation must be enabled when permissions are enabled'); + } + + if (this.config.rbacValidation.cacheTimeout < 0) { + errors.push('RBAC cache timeout must be non-negative'); + } + + if (!['info', 'warn', 'error'].includes(this.config.auditLogging.logLevel)) { + errors.push('Invalid audit logging level'); + } + + return { + valid: errors.length === 0, + errors + }; + } +} + +/** + * Kro security backend module + */ +export const kroSecurityModule = createBackendModule({ + pluginId: 'kro', + moduleId: 'security', + register(reg) { + reg.registerInit({ + deps: { + config: coreServices.rootConfig, + logger: coreServices.logger, + }, + async init({ config, logger }) { + logger.info('Initializing Kro security module'); + + // Load security configuration + const kroConfig = config.getOptionalConfig('kro'); + const securityConfig: KroSecurityConfig = { + enablePermissions: kroConfig?.getOptionalBoolean('enablePermissions') ?? true, + enableAuditLogging: kroConfig?.getOptionalBoolean('enableAuditLogging') ?? true, + rbacValidation: { + enabled: kroConfig?.getOptionalConfig('rbacValidation')?.getOptionalBoolean('enabled') ?? true, + strictMode: kroConfig?.getOptionalConfig('rbacValidation')?.getOptionalBoolean('strictMode') ?? false, + cacheTimeout: kroConfig?.getOptionalConfig('rbacValidation')?.getOptionalNumber('cacheTimeout') ?? 300, + }, + auditLogging: { + enabled: kroConfig?.getOptionalConfig('auditLogging')?.getOptionalBoolean('enabled') ?? true, + logLevel: (kroConfig?.getOptionalConfig('auditLogging')?.getOptionalString('logLevel') as 'info' | 'warn' | 'error') ?? 'info', + includeSuccessEvents: kroConfig?.getOptionalConfig('auditLogging')?.getOptionalBoolean('includeSuccessEvents') ?? true, + }, + errorHandling: { + enableDetailedErrors: kroConfig?.getOptionalConfig('errorHandling')?.getOptionalBoolean('enableDetailedErrors') ?? true, + includeStackTrace: kroConfig?.getOptionalConfig('errorHandling')?.getOptionalBoolean('includeStackTrace') ?? false, + }, + }; + + // Create security service + const securityService = new KroSecurityService(logger, securityConfig); + + // Validate configuration + const validation = securityService.validateConfiguration(); + if (!validation.valid) { + const errorMessage = `Invalid Kro security configuration: ${validation.errors.join(', ')}`; + logger.error(errorMessage); + throw new Error(errorMessage); + } + + // Log security configuration + logger.info('Kro security configuration loaded', { + enablePermissions: securityConfig.enablePermissions, + enableAuditLogging: securityConfig.enableAuditLogging, + rbacValidationEnabled: securityConfig.rbacValidation.enabled, + strictMode: securityConfig.rbacValidation.strictMode, + auditLogLevel: securityConfig.auditLogging.logLevel, + component: 'kro-security' + }); + + // Register security service (in a real implementation, this would be made available to other modules) + logger.info('Kro security module initialized successfully'); + }, + }); + }, +}); \ No newline at end of file diff --git a/packages/backend/src/plugins/kro.ts b/packages/backend/src/plugins/kro.ts new file mode 100644 index 0000000..1fedc8b --- /dev/null +++ b/packages/backend/src/plugins/kro.ts @@ -0,0 +1,146 @@ +import { createBackendModule } from '@backstage/backend-plugin-api'; +import { coreServices } from '@backstage/backend-plugin-api'; + +/** + * Custom Kro backend module that provides enhanced error handling + * and configuration for Kubernetes connection issues + */ +export const kroBackendModule = createBackendModule({ + pluginId: 'kro', + moduleId: 'enhanced-error-handling', + register(reg) { + reg.registerInit({ + deps: { + config: coreServices.rootConfig, + logger: coreServices.logger, + }, + async init({ config, logger }) { + const kroConfig = config.getOptionalConfig('kro'); + + if (!kroConfig) { + logger.warn('Kro plugin configuration not found. Plugin may not function correctly.'); + return; + } + + // Validate Kubernetes cluster configuration + const clusters = kroConfig.getOptionalConfigArray('clusters') || []; + + if (clusters.length === 0) { + logger.warn('No Kubernetes clusters configured for Kro plugin'); + return; + } + + // Validate each cluster configuration + for (const [index, clusterConfig] of clusters.entries()) { + try { + const clusterName = clusterConfig.getOptionalString('name'); + const clusterUrl = clusterConfig.getOptionalString('url'); + const authProvider = clusterConfig.getOptionalString('authProvider'); + + if (!clusterName || !clusterUrl || !authProvider) { + logger.warn(`Kro cluster at index ${index} is missing required fields (name, url, or authProvider). Skipping.`); + continue; + } + + logger.info(`Validating Kro cluster configuration: ${clusterName}`); + + // Validate service account token if using serviceAccount auth + if (authProvider === 'serviceAccount') { + const token = clusterConfig.getOptionalString('serviceAccountToken'); + if (!token) { + logger.warn(`Service account token not configured for cluster: ${clusterName}. This may cause authentication failures.`); + } + } + + logger.info(`Kro cluster configuration validated successfully: ${clusterName}`); + + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + logger.warn(`Invalid Kro cluster configuration at index ${index}: ${errorMessage}. Skipping.`); + } + } + + // Log successful initialization + logger.info(`Kro plugin initialized successfully with ${clusters.length} cluster(s)`); + }, + }); + }, +}); + +/** + * Enhanced error logging utilities for Kro plugin operations + */ +export class KroErrorHandler { + constructor(private logger: any) { } + + /** + * Enhanced error logging for Kubernetes connection issues + */ + logKubernetesError(error: Error, context: { cluster?: string; operation?: string }) { + const { cluster, operation } = context; + + if (error.message.includes('ECONNREFUSED') || error.message.includes('ENOTFOUND')) { + this.logger.error(`Kubernetes connection failed for cluster '${cluster}': Network connectivity issue. Please verify cluster URL and network access.`, { + error: error.message, + cluster, + operation, + errorType: 'CONNECTION_FAILED' + }); + } else if (error.message.includes('Unauthorized') || error.message.includes('401')) { + this.logger.error(`Kubernetes authentication failed for cluster '${cluster}': Invalid or expired credentials. Please verify service account token.`, { + error: error.message, + cluster, + operation, + errorType: 'AUTHENTICATION_FAILED' + }); + } else if (error.message.includes('Forbidden') || error.message.includes('403')) { + this.logger.error(`Kubernetes authorization failed for cluster '${cluster}': Insufficient permissions. Please verify RBAC configuration.`, { + error: error.message, + cluster, + operation, + errorType: 'AUTHORIZATION_FAILED' + }); + } else if (error.message.includes('timeout')) { + this.logger.error(`Kubernetes operation timed out for cluster '${cluster}': Request timeout. Please check cluster performance and network latency.`, { + error: error.message, + cluster, + operation, + errorType: 'TIMEOUT' + }); + } else { + this.logger.error(`Kubernetes operation failed for cluster '${cluster}': ${error.message}`, { + error: error.message, + stack: error.stack, + cluster, + operation, + errorType: 'UNKNOWN' + }); + } + } + + /** + * Log ResourceGroup operation errors with context + */ + logResourceGroupError(error: Error, context: { resourceGroup?: string; namespace?: string; operation?: string }) { + const { resourceGroup, namespace, operation } = context; + + this.logger.error(`ResourceGroup operation failed: ${operation}`, { + error: error.message, + stack: error.stack, + resourceGroup, + namespace, + operation, + component: 'kro-plugin' + }); + } + + /** + * Log successful operations for monitoring + */ + logSuccess(message: string, context: Record = {}) { + this.logger.info(message, { + ...context, + component: 'kro-plugin' + }); + } +} \ No newline at end of file diff --git a/packages/backend/src/plugins/kubernetes-ingestor-kro-module.ts b/packages/backend/src/plugins/kubernetes-ingestor-kro-module.ts new file mode 100644 index 0000000..1c30376 --- /dev/null +++ b/packages/backend/src/plugins/kubernetes-ingestor-kro-module.ts @@ -0,0 +1,68 @@ +import { createBackendModule } from '@backstage/backend-plugin-api'; +import { coreServices } from '@backstage/backend-plugin-api'; +// import { KroEntityTransformer } from './kro-entity-transformer'; + +/** + * Kubernetes Ingestor module for Kro ResourceGroup integration + * Configures the Kubernetes Ingestor to properly handle Kro resources + */ +export const kubernetesIngestorKroModule = createBackendModule({ + pluginId: 'kubernetes-ingestor', + moduleId: 'kro-integration', + register(reg) { + reg.registerInit({ + deps: { + config: coreServices.rootConfig, + logger: coreServices.logger, + }, + async init({ config, logger }) { + // Initialize Kro entity transformer (for future use) + // const kroTransformer = new KroEntityTransformer(logger); + + // Validate Kro configuration + const kroConfig = config.getOptionalConfig('kro'); + const ingestorConfig = config.getOptionalConfig('kubernetesIngestor'); + + if (!ingestorConfig) { + logger.warn('Kubernetes Ingestor configuration not found. Kro integration may not work correctly.'); + return; + } + + if (!kroConfig) { + logger.warn('Kro configuration not found. ResourceGroup processing may be limited.'); + } + + // Log configuration validation + const resources = ingestorConfig.getOptionalConfigArray('resources') || []; + const kroResources = resources.filter(resource => { + const apiVersion = resource.getOptionalString('apiVersion'); + return apiVersion?.startsWith('kro.run/'); + }); + + if (kroResources.length === 0) { + logger.warn('No Kro resources configured in kubernetesIngestor.resources. ResourceGroups will not be discovered.'); + } else { + logger.info(`Found ${kroResources.length} Kro resource types configured for ingestion`, { + kroResourceTypes: kroResources.map(r => `${r.getOptionalString('apiVersion')}/${r.getOptionalString('kind')}`), + }); + } + + // Validate cluster configuration + const clusters = ingestorConfig.getOptionalConfigArray('clusters') || []; + if (clusters.length === 0) { + logger.warn('No clusters configured for Kubernetes Ingestor. ResourceGroup discovery will not work.'); + } else { + logger.info(`Kubernetes Ingestor configured with ${clusters.length} cluster(s) for Kro resource discovery`); + } + + // Register entity transformation handlers + // Note: This is a placeholder for when the Kubernetes Ingestor plugin supports custom transformers + // The actual implementation would depend on the plugin's extension points + logger.info('Kro entity transformer initialized for Kubernetes Ingestor integration'); + + // Log successful initialization + logger.info('Kubernetes Ingestor Kro integration module initialized successfully'); + }, + }); + }, +}); \ No newline at end of file diff --git a/packages/backend/src/plugins/kubernetes-kro-integration.ts b/packages/backend/src/plugins/kubernetes-kro-integration.ts new file mode 100644 index 0000000..2bbb317 --- /dev/null +++ b/packages/backend/src/plugins/kubernetes-kro-integration.ts @@ -0,0 +1,238 @@ +import { createBackendModule } from '@backstage/backend-plugin-api'; +import { coreServices } from '@backstage/backend-plugin-api'; + +/** + * Backend module that enhances the Kubernetes plugin to include + * Kro ResourceGroups in resource discovery and filtering + */ +export const kubernetesKroIntegrationModule = createBackendModule({ + pluginId: 'kubernetes', + moduleId: 'kro-integration', + register(reg) { + reg.registerInit({ + deps: { + config: coreServices.rootConfig, + logger: coreServices.logger, + }, + async init({ config, logger }) { + logger.info('Initializing Kubernetes-Kro integration module'); + + // Get Kro configuration + const kroConfig = config.getOptionalConfig('kro'); + const kubernetesConfig = config.getOptionalConfig('kubernetes'); + + if (!kubernetesConfig) { + logger.warn('Kubernetes configuration not found. Kro integration will be limited.'); + return; + } + + // Enhance Kubernetes plugin with Kro resource types + const clusterConfig = kubernetesConfig.getOptionalConfigArray('clusterLocatorMethods') + ?.find(method => method.getString('type') === 'config') + ?.getOptionalConfigArray('clusters') + ?.find(() => true); // Get first cluster config + + const customResources = clusterConfig?.getOptionalConfigArray('customResources') || []; + + const kroResourceTypes = [ + { + group: 'kro.run', + apiVersion: 'v1alpha1', + plural: 'resourcegraphdefinitions', + }, + { + group: 'kro.run', + apiVersion: 'v1alpha1', + plural: 'cicdpipelines', + }, + { + group: 'kro.run', + apiVersion: 'v1alpha1', + plural: 'eksclusters', + }, + { + group: 'kro.run', + apiVersion: 'v1alpha1', + plural: 'eksclusterwithvpcs', + }, + { + group: 'kro.run', + apiVersion: 'v1alpha1', + plural: 'vpcs', + }, + ]; + + logger.info(`Registered ${kroResourceTypes.length} Kro resource types for Kubernetes plugin discovery`, { + resourceTypes: kroResourceTypes.map(rt => `${rt.group}/${rt.apiVersion}/${rt.plural}`), + }); + + // Log integration status + if (kroConfig) { + const integrationConfig = kroConfig.getOptionalConfig('integration'); + const showInKubernetesViews = integrationConfig?.getOptionalBoolean('showInKubernetesViews') ?? true; + const enableRelationshipMapping = integrationConfig?.getOptionalBoolean('enableRelationshipMapping') ?? true; + + logger.info('Kro-Kubernetes integration configured', { + showInKubernetesViews, + enableRelationshipMapping, + }); + } + + logger.info('Kubernetes-Kro integration module initialized successfully'); + }, + }); + }, +}); + +/** + * Resource relationship mapper for Kro ResourceGroups + */ +export class KroResourceRelationshipMapper { + constructor(private logger: any) { } + + /** + * Map relationships between ResourceGroups and their managed resources + */ + mapResourceRelationships(resources: any[]): Map { + const relationships = new Map(); + + try { + // Find ResourceGroups and their managed resources + const resourceGroups = resources.filter(r => + r.metadata?.labels?.['kro.run/resource-type'] === 'ResourceGroup' || + r.kind === 'ResourceGraphDefinition' + ); + + resourceGroups.forEach(rg => { + const rgKey = `${rg.metadata.namespace}/${rg.metadata.name}`; + const managedResources: string[] = []; + + // Extract managed resources from ResourceGroup spec + if (rg.spec?.resources) { + rg.spec.resources.forEach((resource: any) => { + if (resource.template?.metadata?.name) { + const resourceKey = `${resource.template.metadata.namespace || rg.metadata.namespace}/${resource.template.metadata.name}`; + managedResources.push(resourceKey); + } + }); + } + + // Look for resources with Kro annotations + resources.forEach(resource => { + const kroResourceGroup = resource.metadata?.annotations?.['kro.run/resource-group']; + if (kroResourceGroup === rg.metadata.name) { + const resourceKey = `${resource.metadata.namespace}/${resource.metadata.name}`; + managedResources.push(resourceKey); + } + }); + + if (managedResources.length > 0) { + relationships.set(rgKey, managedResources); + this.logger.debug(`Mapped ResourceGroup ${rgKey} to ${managedResources.length} managed resources`); + } + }); + + this.logger.info(`Mapped relationships for ${relationships.size} ResourceGroups`); + return relationships; + + } catch (error) { + this.logger.error('Failed to map Kro resource relationships', { error: (error as Error).message }); + return new Map(); + } + } + + /** + * Enhance resource objects with relationship metadata + */ + enhanceResourcesWithRelationships(resources: any[], relationships: Map): any[] { + return resources.map(resource => { + const resourceKey = `${resource.metadata.namespace}/${resource.metadata.name}`; + + // Add managed resources annotation for ResourceGroups + const managedResources = relationships.get(resourceKey); + if (managedResources && managedResources.length > 0) { + resource.metadata.annotations = { + ...resource.metadata.annotations, + 'kro.run/managed-resources': JSON.stringify( + managedResources.map(mr => { + const [namespace, name] = mr.split('/'); + return { namespace, name }; + }) + ), + }; + } + + // Add ResourceGroup reference for managed resources + for (const [rgKey, managed] of relationships.entries()) { + if (managed.includes(resourceKey)) { + const [rgNamespace, rgName] = rgKey.split('/'); + resource.metadata.annotations = { + ...resource.metadata.annotations, + 'kro.run/resource-group': rgName, + 'kro.run/resource-group-namespace': rgNamespace, + }; + break; + } + } + + return resource; + }); + } +} + +/** + * Kro resource filter for Kubernetes plugin + */ +export class KroResourceFilter { + private kroResourceTypes = new Set([ + 'kro.run/v1alpha1/ResourceGraphDefinition', + 'kro.run/v1alpha1/CICDPipeline', + 'kro.run/v1alpha1/EksCluster', + 'kro.run/v1alpha1/EksclusterWithVpc', + 'kro.run/v1alpha1/Vpc', + ]); + + /** + * Check if a resource is a Kro resource + */ + isKroResource(resource: any): boolean { + const resourceType = `${resource.apiVersion}/${resource.kind}`; + return this.kroResourceTypes.has(resourceType) || + Boolean(resource.metadata?.labels?.['kro.run/resource-type']); + } + + /** + * Filter resources to include/exclude Kro resources based on configuration + */ + filterResources(resources: any[], includeKroResources: boolean = true): any[] { + if (includeKroResources) { + return resources; // Include all resources + } + + return resources.filter(resource => !this.isKroResource(resource)); + } + + /** + * Get available resource types including Kro resources + */ + getAvailableResourceTypes(resources: any[]): string[] { + const types = new Set(); + + resources.forEach(resource => { + const resourceType = `${resource.apiVersion}/${resource.kind}`; + types.add(resourceType); + }); + + return Array.from(types).sort((a, b) => { + // Sort Kro resources first + const aIsKro = this.kroResourceTypes.has(a); + const bIsKro = this.kroResourceTypes.has(b); + + if (aIsKro && !bIsKro) return -1; + if (!aIsKro && bIsKro) return 1; + return a.localeCompare(b); + }); + } +} + +export default kubernetesKroIntegrationModule; \ No newline at end of file diff --git a/packages/backend/src/plugins/mock-argocd.ts b/packages/backend/src/plugins/mock-argocd.ts new file mode 100644 index 0000000..49adccc --- /dev/null +++ b/packages/backend/src/plugins/mock-argocd.ts @@ -0,0 +1,81 @@ +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { Router } from 'express'; +import * as path from 'path'; +import * as fs from 'fs'; + +function loadFixture(name: string): any { + const filePath = path.resolve(__dirname, '../mocks/fixtures', name); + return JSON.parse(fs.readFileSync(filePath, 'utf8')); +} + +/** + * Mock ArgoCD backend plugin — serves fixture ArgoCD app data + * in MOCK_MODE. The @roadiehq/backstage-plugin-argo-cd frontend + * calls the argocd backend proxy at /api/argocd/argoInstance/... + */ +export default createBackendPlugin({ + pluginId: 'argocd', + register(env) { + env.registerInit({ + deps: { + httpRouter: coreServices.httpRouter, + logger: coreServices.logger, + }, + async init({ httpRouter, logger }) { + logger.info('Mock ArgoCD backend activated (MOCK_MODE=true)'); + + const argocdApps = loadFixture('argocd-applications.json'); + + const router = Router(); + + // Service locator routes — called first to find which instance has the app + // When searchInstances=true, baseUrl is /api/argocd, so these are at /api/argocd/find/... + router.get('/find/name/:appName', (req, res) => { + logger.info(`Mock ArgoCD: service locator for ${req.params.appName}`); + res.json([{ name: 'local', url: 'https://cnoe.localtest.me:8443/argocd', appName: [req.params.appName] }]); + }); + + router.get('/find/selector/:selector', (req, res) => { + logger.info(`Mock ArgoCD: service locator by selector ${req.params.selector}`); + res.json([{ name: 'local', url: 'https://cnoe.localtest.me:8443/argocd', appName: ['platform-api-service'] }]); + }); + + // The Roadie ArgoCD plugin calls: + // GET /argoInstance/argocd/applications/name/{appName} + // GET /argoInstance/argocd/applications/name/{appName}?namespace={ns} + // GET /argoInstance/argocd/applications/selector/{selector} + router.get('/argoInstance/:instanceName/applications/name/:appName', (req, res) => { + const { appName } = req.params; + logger.info(`Mock ArgoCD: serving app ${appName}`); + const app = argocdApps.items.find((a: any) => a.metadata.name === appName); + if (app) { + return res.json(app); + } + return res.json(argocdApps.items[0]); + }); + + router.get('/argoInstance/:instanceName/applications/selector/:selector', (req, res) => { + logger.info(`Mock ArgoCD: serving apps by selector ${req.params.selector}`); + res.json(argocdApps); + }); + + // Catch-all for other argocd routes + router.all('*', (req, res) => { + logger.info(`Mock ArgoCD: catch-all for ${req.method} ${req.path}`); + res.json(argocdApps); + }); + + httpRouter.addAuthPolicy({ + path: '/', + allow: 'unauthenticated', + }); + + httpRouter.use(router); + logger.info('Mock ArgoCD routes registered: /api/argocd/*'); + }, + }); + }, +}); diff --git a/packages/backend/src/plugins/mock-kubernetes.ts b/packages/backend/src/plugins/mock-kubernetes.ts new file mode 100644 index 0000000..a0a8e73 --- /dev/null +++ b/packages/backend/src/plugins/mock-kubernetes.ts @@ -0,0 +1,136 @@ +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { Router } from 'express'; +import * as path from 'path'; +import * as fs from 'fs'; + +function loadFixture(name: string): any { + const filePath = path.resolve(__dirname, '../mocks/fixtures', name); + return JSON.parse(fs.readFileSync(filePath, 'utf8')); +} + +function loadFixtureText(name: string): string { + const filePath = path.resolve(__dirname, '../mocks/fixtures', name); + return fs.readFileSync(filePath, 'utf8'); +} + +/** + * Mock kubernetes backend plugin — replaces the real kubernetes backend + * in MOCK_MODE, serving fixture data for proxy requests. + * Registers with pluginId 'kubernetes' so it handles /api/kubernetes/* routes. + */ +export default createBackendPlugin({ + pluginId: 'kubernetes', + register(env) { + env.registerInit({ + deps: { + httpRouter: coreServices.httpRouter, + logger: coreServices.logger, + }, + async init({ httpRouter, logger }) { + logger.info('Mock kubernetes backend activated (MOCK_MODE=true)'); + + const sparkApplications = loadFixture('spark-applications.json'); + const argoWorkflows = loadFixture('argo-workflows.json'); + const argoWorkflowTemplates = loadFixture('argo-workflow-templates.json'); + const kubernetesWorkloads = loadFixture('kubernetes-workloads.json'); + const sparkLogs = loadFixtureText('spark-logs.txt'); + + const router = Router(); + router.use(require('express').json()); + + // Mock /clusters endpoint + router.get('/clusters', (_req, res) => { + res.json({ + items: [ + { + name: 'local', + authProvider: 'serviceAccount', + dashboardUrl: '', + }, + ], + }); + }); + + // Mock workloads/objects endpoints — used by EntityKubernetesContent + router.post('/services/:entityName', (_req, res) => { + logger.info(`Mock K8s: serving workloads for entity ${_req.params.entityName}`); + res.json(kubernetesWorkloads); + }); + + router.post('/resources/workloads/query', (_req, res) => { + logger.info('Mock K8s: serving workloads query'); + res.json(kubernetesWorkloads); + }); + + router.post('/resources/custom/query', (_req, res) => { + logger.info('Mock K8s: serving custom resources query'); + res.json(kubernetesWorkloads); + }); + + // Mock proxy endpoint — handles all kubernetes API proxy requests + router.all('/proxy/*', (req, res) => { + const proxyPath = req.params[0] || req.path; + + // Pod logs + if (proxyPath.includes('/log')) { + logger.info(`Mock K8s: serving spark logs for ${proxyPath}`); + return res.type('text/plain').send(sparkLogs); + } + + // Single pod + if (proxyPath.match(/\/pods\/[^/]+$/) && !proxyPath.includes('/log')) { + logger.info(`Mock K8s: serving pod info for ${proxyPath}`); + return res.json({ + metadata: { name: 'spark-etl-job-driver', namespace: 'default' }, + spec: { containers: [{ name: 'spark-kubernetes-driver' }] }, + }); + } + + // Spark applications + if (proxyPath.includes('sparkoperator.k8s.io') || proxyPath.includes('sparkapplications')) { + logger.info(`Mock K8s: serving spark applications for ${proxyPath}`); + return res.json(sparkApplications); + } + + // Argo workflow templates (check before workflows) + if (proxyPath.includes('workflowtemplates')) { + logger.info(`Mock K8s: serving argo workflow templates for ${proxyPath}`); + return res.json(argoWorkflowTemplates); + } + + // Argo workflows + if (proxyPath.includes('argoproj.io') && proxyPath.includes('workflows')) { + logger.info(`Mock K8s: serving argo workflows for ${proxyPath}`); + return res.json(argoWorkflows); + } + + // Secrets (for terraform) + if (proxyPath.includes('/secrets/')) { + logger.info(`Mock K8s: serving mock secret for ${proxyPath}`); + const terraformState = loadFixture('terraform-state.json'); + return res.json({ + data: { + tfstate: Buffer.from(JSON.stringify(terraformState)).toString('base64'), + }, + }); + } + + logger.warn(`Mock K8s: no fixture for proxy path: ${proxyPath}`); + return res.status(404).json({ error: 'No mock fixture for this path' }); + }); + + // Allow all mock routes without auth + httpRouter.addAuthPolicy({ + path: '/', + allow: 'unauthenticated', + }); + + httpRouter.use(router); + logger.info('Mock kubernetes routes registered: /api/kubernetes/clusters, /api/kubernetes/proxy/*'); + }, + }); + }, +}); diff --git a/packages/backend/src/plugins/mock-proxy.ts b/packages/backend/src/plugins/mock-proxy.ts new file mode 100644 index 0000000..ab7cd5b --- /dev/null +++ b/packages/backend/src/plugins/mock-proxy.ts @@ -0,0 +1,89 @@ +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { Router } from 'express'; +import * as path from 'path'; +import * as fs from 'fs'; + +function loadFixture(name: string): any { + const filePath = path.resolve(__dirname, '../mocks/fixtures', name); + return JSON.parse(fs.readFileSync(filePath, 'utf8')); +} + +/** + * Mock proxy backend plugin — replaces the real proxy backend + * in MOCK_MODE, handling proxy routes like /api/proxy/argo-workflows/api/*. + * Registers with pluginId 'proxy' so it handles /api/proxy/* routes. + */ +export default createBackendPlugin({ + pluginId: 'proxy', + register(env) { + env.registerInit({ + deps: { + httpRouter: coreServices.httpRouter, + logger: coreServices.logger, + }, + async init({ httpRouter, logger }) { + logger.info('Mock proxy backend activated (MOCK_MODE=true)'); + + const argoWorkflows = loadFixture('argo-workflows.json'); + const argoWorkflowTemplates = loadFixture('argo-workflow-templates.json'); + const argocdApps = loadFixture('argocd-applications.json'); + + const router = Router(); + + // Argo Workflows proxy routes + // Plugin builds URL as: proxyUrl + /argo-workflows/api + /api/v1/workflows/{ns} + router.get('/argo-workflows/api/api/v1/workflows/:namespace', (_req, res) => { + logger.info(`Mock proxy: serving argo workflows for namespace ${_req.params.namespace}`); + res.json(argoWorkflows); + }); + + router.get('/argo-workflows/api/api/v1/workflow-templates/:namespace', (_req, res) => { + logger.info(`Mock proxy: serving argo workflow templates for namespace ${_req.params.namespace}`); + res.json(argoWorkflowTemplates); + }); + + // ArgoCD service locator — plugin calls this first to find which instance has the app + router.get('/find/name/:appName', (req, res) => { + logger.info(`Mock proxy: ArgoCD service locator for ${req.params.appName}`); + res.json([{ name: 'local', url: 'https://cnoe.localtest.me:8443/argocd', appName: [req.params.appName] }]); + }); + + router.get('/find/selector/:selector', (req, res) => { + logger.info(`Mock proxy: ArgoCD service locator by selector ${req.params.selector}`); + res.json([{ name: 'local', url: 'https://cnoe.localtest.me:8443/argocd', appName: ['platform-api-service'] }]); + }); + + // ArgoCD proxy routes — used by @roadiehq/backstage-plugin-argo-cd + // Plugin calls: proxyUrl + /argoInstance/{instance}/applications/name/{appName} + router.get('/argoInstance/:instanceName/applications/name/:appName', (req, res) => { + const { appName } = req.params; + logger.info(`Mock proxy: serving ArgoCD app ${appName}`); + const app = argocdApps.items.find((a: any) => a.metadata.name === appName); + res.json(app || argocdApps.items[0]); + }); + + router.get('/argoInstance/:instanceName/applications/selector/:selector', (req, res) => { + logger.info(`Mock proxy: serving ArgoCD apps by selector ${req.params.selector}`); + res.json(argocdApps.items); + }); + + // Catch-all for other proxy routes + router.all('*', (req, res) => { + logger.warn(`Mock proxy: no handler for ${req.method} ${req.path}`); + res.status(404).json({ error: 'No mock proxy handler for this path' }); + }); + + httpRouter.addAuthPolicy({ + path: '/', + allow: 'unauthenticated', + }); + + httpRouter.use(router); + logger.info('Mock proxy routes registered: /api/proxy/argo-workflows/*'); + }, + }); + }, +}); diff --git a/packages/backend/src/plugins/mock-terraform.ts b/packages/backend/src/plugins/mock-terraform.ts new file mode 100644 index 0000000..1527591 --- /dev/null +++ b/packages/backend/src/plugins/mock-terraform.ts @@ -0,0 +1,65 @@ +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { Router } from 'express'; +import * as path from 'path'; +import * as fs from 'fs'; + +function loadFixture(name: string): any { + const filePath = path.resolve(__dirname, '../mocks/fixtures', name); + return JSON.parse(fs.readFileSync(filePath, 'utf8')); +} + +/** + * Mock terraform backend plugin — replaces the real terraform backend + * in MOCK_MODE, serving fixture data. Registers with pluginId 'terraform' + * so it handles /api/terraform/* routes. + */ +export default createBackendPlugin({ + pluginId: 'terraform', + register(env) { + env.registerInit({ + deps: { + httpRouter: coreServices.httpRouter, + logger: coreServices.logger, + }, + async init({ httpRouter, logger }) { + logger.info('Mock terraform backend activated (MOCK_MODE=true)'); + + const terraformState = loadFixture('terraform-state.json'); + const terraformFileList = loadFixture('terraform-file-list.json'); + + const router = Router(); + + router.get('/health', (_req, res) => { + res.json({ status: 'ok' }); + }); + + router.post('/deflate', (_req, res) => { + res.json(terraformState); + }); + + router.post('/getFileList', (_req, res) => { + res.json(terraformFileList); + }); + + router.post('/getLocalFileList', (_req, res) => { + res.json(terraformFileList); + }); + + router.post('/getTFStateFile', (_req, res) => { + res.json(terraformState); + }); + + httpRouter.addAuthPolicy({ + path: '/', + allow: 'unauthenticated', + }); + + httpRouter.use(router); + logger.info('Mock terraform routes registered: /api/terraform/*'); + }, + }); + }, +}); diff --git a/packages/backend/src/plugins/proxy.ts b/packages/backend/src/plugins/proxy.ts deleted file mode 100644 index 54ec393..0000000 --- a/packages/backend/src/plugins/proxy.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { createRouter } from '@backstage/plugin-proxy-backend'; -import { Router } from 'express'; -import { PluginEnvironment } from '../types'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - return await createRouter({ - logger: env.logger, - config: env.config, - discovery: env.discovery, - }); -} diff --git a/packages/backend/src/types.ts b/packages/backend/src/types.ts deleted file mode 100644 index 9cd2c74..0000000 --- a/packages/backend/src/types.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Logger } from 'winston'; -import { Config } from '@backstage/config'; -import { - PluginCacheManager, - PluginDatabaseManager, - PluginEndpointDiscovery, - TokenManager, - UrlReader, -} from '@backstage/backend-common'; -import { PluginTaskScheduler } from '@backstage/backend-tasks'; -import { PermissionEvaluator } from '@backstage/plugin-permission-common'; -import { IdentityApi } from '@backstage/plugin-auth-node'; - -export type PluginEnvironment = { - logger: Logger; - database: PluginDatabaseManager; - cache: PluginCacheManager; - config: Config; - reader: UrlReader; - discovery: PluginEndpointDiscovery; - tokenManager: TokenManager; - scheduler: PluginTaskScheduler; - permissions: PermissionEvaluator; - identity: IdentityApi; -}; diff --git a/packages/backend/tsconfig.json b/packages/backend/tsconfig.json new file mode 100644 index 0000000..ffebe71 --- /dev/null +++ b/packages/backend/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@backstage/cli/config/tsconfig.json", + "include": ["src"], + "exclude": ["node_modules"], + "compilerOptions": { + "outDir": "dist-types", + "rootDir": "src" + } +} diff --git a/playwright.config.ts b/playwright.config.ts index 37c7fb1..99f8536 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,60 +1,18 @@ -/* - * Copyright 2023 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - import { defineConfig } from '@playwright/test'; -import { generateProjects } from '@backstage/e2e-test-utils/playwright'; -/** - * See https://playwright.dev/docs/test-configuration. - */ export default defineConfig({ - timeout: 60_000, - - expect: { - timeout: 5_000, - }, - - // Run your local dev server before starting the tests - webServer: process.env.CI - ? [] - : [ - { - command: 'yarn start', - port: 3000, - reuseExistingServer: true, - timeout: 60_000, - }, - ], - - forbidOnly: !!process.env.CI, - - retries: process.env.CI ? 2 : 0, - - reporter: [['html', { open: 'never', outputFolder: 'e2e-test-report' }]], - + testDir: './e2e', + timeout: 60000, + retries: 1, use: { - actionTimeout: 0, - baseURL: - process.env.PLAYWRIGHT_URL ?? - (process.env.CI ? 'http://localhost:7007' : 'http://localhost:3000'), + baseURL: 'http://localhost:3000', + headless: true, screenshot: 'only-on-failure', - trace: 'on-first-retry', }, - - outputDir: 'node_modules/.cache/e2e-test-results', - - projects: generateProjects(), // Find all packages with e2e-test folders + webServer: { + command: 'MOCK_MODE=true yarn dev', + port: 3000, + timeout: 120000, + reuseExistingServer: true, + }, }); diff --git a/plugins/README.md b/plugins/README.md index d7865fd..b4113a7 100644 --- a/plugins/README.md +++ b/plugins/README.md @@ -1,9 +1,3 @@ -# The Plugins Folder +# Custom Plugins -This is where your own plugins and their associated modules live, each in a -separate folder of its own. - -If you want to create a new plugin here, go to your project root directory, run -the command `yarn new`, and follow the on-screen instructions. - -You can also check out existing plugins on [the plugin marketplace](https://backstage.io/plugins)! +This directory contains custom CNOE plugins migrated from the original backstage-app. diff --git a/plugins/apache-spark/package.json b/plugins/apache-spark/package.json index 71639db..9250fea 100644 --- a/plugins/apache-spark/package.json +++ b/plugins/apache-spark/package.json @@ -3,6 +3,17 @@ "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.tsx", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": ["src/alpha.tsx"], + "package.json": ["package.json"] + } + }, "license": "Apache-2.0", "private": true, "publishConfig": { @@ -24,22 +35,20 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.14.8", - "@backstage/core-plugin-api": "^1.9.3", - "@backstage/theme": "^0.5.6", - "@material-ui/core": "^4.9.13", - "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.61", + "@backstage/core-components": "^0.18.8", + "@backstage/core-plugin-api": "^1.12.4", + "@backstage/frontend-plugin-api": "^0.15.1", + "@backstage/theme": "^0.7.2", "react-use": "^17.2.4" }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.26.10", - "@backstage/core-app-api": "^1.13.0", - "@backstage/dev-utils": "^1.0.34", - "@backstage/test-utils": "^1.5.7", + "@backstage/cli": "^0.36.0", + "@backstage/core-app-api": "^1.19.6", + "@backstage/dev-utils": "^1.1.21", + "@backstage/test-utils": "^1.7.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/apache-spark/src/alpha.tsx b/plugins/apache-spark/src/alpha.tsx new file mode 100644 index 0000000..7f90772 --- /dev/null +++ b/plugins/apache-spark/src/alpha.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { createFrontendPlugin, PageBlueprint } from '@backstage/frontend-plugin-api'; + +/** + * PageBlueprint extension for the Apache Spark plugin. + * Registers the main overview page under /apache-spark. + */ +const ApacheSparkPage = PageBlueprint.make({ + params: { + path: '/apache-spark', + loader: () => + import('./components/Overview').then(m => ), + }, +}); + +/** + * New frontend system plugin entry point for @internal/plugin-apache-spark. + * Import via the "/alpha" sub-path export. + */ +export default createFrontendPlugin({ + pluginId: 'apache-spark', + extensions: [ApacheSparkPage], +}); diff --git a/plugins/apache-spark/src/components/ApacheSparkLogs/ApacheSparkLogs.tsx b/plugins/apache-spark/src/components/ApacheSparkLogs/ApacheSparkLogs.tsx index e892856..ed04242 100644 --- a/plugins/apache-spark/src/components/ApacheSparkLogs/ApacheSparkLogs.tsx +++ b/plugins/apache-spark/src/components/ApacheSparkLogs/ApacheSparkLogs.tsx @@ -9,7 +9,7 @@ import { SelectedItems, SelectItem, } from '@backstage/core-components'; -import Alert from '@material-ui/lab/Alert'; +import { ResponseErrorPanel } from '@backstage/core-components'; import React, { useEffect, useState } from 'react'; import { useEntity } from '@backstage/plugin-catalog-react'; import { getAnnotationValues } from '../utils'; @@ -30,7 +30,7 @@ export const ApacheSparkDriverLogs = (props: { sparkApp: ApacheSpark }) => { if (loading) { return ; } else if (error) { - return {`${error}`}; + return ; } return ; }; @@ -69,9 +69,9 @@ export const ApacheSparkExecutorLogs = (props: { sparkApp: ApacheSpark }) => { const [selected, setSelected] = useState(''); if (props.sparkApp.status.applicationState.state !== 'RUNNING') { return ( - +
Executor logs are only available for Spark Applications in RUNNING state - +
); } const executors: SelectItem[] = [{ label: '', value: '' }]; diff --git a/plugins/apache-spark/src/components/ApacheSparkOverviewTable/ApacheSparkOverviewTable.tsx b/plugins/apache-spark/src/components/ApacheSparkOverviewTable/ApacheSparkOverviewTable.tsx index e54b062..f1bb5c6 100644 --- a/plugins/apache-spark/src/components/ApacheSparkOverviewTable/ApacheSparkOverviewTable.tsx +++ b/plugins/apache-spark/src/components/ApacheSparkOverviewTable/ApacheSparkOverviewTable.tsx @@ -1,5 +1,6 @@ import { Progress, + ResponseErrorPanel, StatusError, StatusOK, StatusPending, @@ -12,12 +13,30 @@ import { apacheSparkApiRef } from '../../api'; import React, { useEffect, useState } from 'react'; import useAsync from 'react-use/lib/useAsync'; import { ApacheSpark, ApacheSparkList } from '../../api/model'; -import Alert from '@material-ui/lab/Alert'; -import { createStyles, Drawer, makeStyles, Theme } from '@material-ui/core'; import { DrawerContent } from '../DetailedDrawer/DetailedDrawer'; import { getAnnotationValues } from '../utils'; import { useEntity } from '@backstage/plugin-catalog-react'; +// Slide-over panel styles (replaces MUI Drawer) +const overlayStyle: React.CSSProperties = { + position: 'fixed', + inset: 0, + background: 'rgba(0,0,0,0.3)', + zIndex: 1200, +}; +const panelStyle: React.CSSProperties = { + position: 'fixed', + top: 0, + right: 0, + bottom: 0, + width: '60%', + padding: '20px', + background: 'var(--backstage-color-background-paper, #fff)', + boxShadow: '-4px 0 24px rgba(0,0,0,0.15)', + zIndex: 1201, + overflowY: 'auto', +}; + type TableData = { id: string; name: string; @@ -47,21 +66,11 @@ const columns: TableColumn[] = [ { title: 'EndTime', field: 'finishedAt', type: 'datetime' }, ]; -const useDrawerStyles = makeStyles((theme: Theme) => - createStyles({ - paper: { - width: '60%', - padding: theme.spacing(2.5), - }, - }), -); - export const ApacheSparkOverviewTable = () => { const apiClient = useApi(apacheSparkApiRef); const [columnData, setColumnData] = useState([] as TableData[]); const [isOpen, toggleDrawer] = useState(false); const [drawerData, setDrawerData] = useState({} as ApacheSpark); - const classes = useDrawerStyles(); const { entity } = useEntity(); const { ns, clusterName, labelSelector } = getAnnotationValues(entity); @@ -109,7 +118,7 @@ export const ApacheSparkOverviewTable = () => { if (loading) { return ; } else if (error) { - return {`${error}`}; + return ; } return ( @@ -130,16 +139,14 @@ export const ApacheSparkOverviewTable = () => { columns={columns} data={columnData} /> - toggleDrawer(false)} - > - - + {isOpen && ( + <> +
toggleDrawer(false)} /> +
+ +
+ + )} ); }; diff --git a/plugins/apache-spark/src/components/DetailedDrawer/DetailedDrawer.tsx b/plugins/apache-spark/src/components/DetailedDrawer/DetailedDrawer.tsx index fbaaddf..c613646 100644 --- a/plugins/apache-spark/src/components/DetailedDrawer/DetailedDrawer.tsx +++ b/plugins/apache-spark/src/components/DetailedDrawer/DetailedDrawer.tsx @@ -1,12 +1,4 @@ import { ApacheSpark } from '../../api/model'; -import { - createStyles, - IconButton, - makeStyles, - Theme, - Typography, -} from '@material-ui/core'; -import Close from '@material-ui/icons/Close'; import React from 'react'; import { stringify } from 'yaml'; import { CopyTextButton, TabbedLayout } from '@backstage/core-components'; @@ -16,38 +8,29 @@ import { } from '../ApacheSparkLogs/ApacheSparkLogs'; import { DrawerOverview } from './DrawerOverview'; -const useDrawerContentStyles = makeStyles((theme: Theme) => - createStyles({ - header: { - display: 'flex', - justifyContent: 'space-between', - }, - icon: { - fontSize: 20, - }, - content: { - height: '80%', - backgroundColor: '#EEEEEE', - overflow: 'scroll', - display: 'flex', - flexDirection: 'row', - }, - logs: { - height: 500, - display: 'flex', - flexDirection: 'column', - flexShrink: 0, - }, - logs2: { - height: 600, - display: 'flex', - flexDirection: 'column', - }, - secondaryAction: { - marginLeft: theme.spacing(2.5), - }, - }), -); +const headerStyle: React.CSSProperties = { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', +}; +const contentStyle: React.CSSProperties = { + height: '80%', + backgroundColor: '#EEEEEE', + overflow: 'scroll', + display: 'flex', + flexDirection: 'row', +}; +const logsStyle: React.CSSProperties = { + height: 500, + display: 'flex', + flexDirection: 'column', + flexShrink: 0, +}; +const logs2Style: React.CSSProperties = { + height: 600, + display: 'flex', + flexDirection: 'column', +}; export const DrawerContent = ({ toggleDrawer, @@ -56,7 +39,6 @@ export const DrawerContent = ({ toggleDrawer: (isOpen: boolean) => void; apacheSpark: ApacheSpark; }) => { - const classes = useDrawerContentStyles(); const yamlString = stringify(apacheSpark); return ( @@ -69,18 +51,19 @@ export const DrawerContent = ({ <> -
- {apacheSpark.metadata.name} - +

{apacheSpark.metadata.name}

+
-
+
{yamlString}
@@ -88,19 +71,15 @@ export const DrawerContent = ({ <> -
-
- - Driver Log for {apacheSpark.metadata.name} - +
+
+

Driver Log for {apacheSpark.metadata.name}

-
-
- - Executor Logs for {apacheSpark.metadata.name} - +
+
+

Executor Logs for {apacheSpark.metadata.name}

diff --git a/plugins/apache-spark/src/components/DetailedDrawer/DrawerOverview.tsx b/plugins/apache-spark/src/components/DetailedDrawer/DrawerOverview.tsx index 7f2f87d..586dd43 100644 --- a/plugins/apache-spark/src/components/DetailedDrawer/DrawerOverview.tsx +++ b/plugins/apache-spark/src/components/DetailedDrawer/DrawerOverview.tsx @@ -1,4 +1,4 @@ -import { createStyles, makeStyles } from '@material-ui/core'; +// Inline styles replace former makeStyles/createStyles usage (MUI removed per BUI migration) import { ApacheSpark } from '../../api/model'; import { InfoCard, @@ -10,17 +10,13 @@ import { } from '@backstage/core-components'; import React from 'react'; -const useStyles = makeStyles(() => - createStyles({ - content: { - justifyContent: 'space-between', - display: 'flex', - flexDirection: 'column', - padding: '5px', - gap: '30px', - }, - }), -); +const contentStyle: React.CSSProperties = { + justifyContent: 'space-between', + display: 'flex', + flexDirection: 'column', + padding: '5px', + gap: '30px', +}; type generateMetadataOutput = { app: { [key: string]: any }; @@ -79,7 +75,7 @@ const upperCaseFirstChar = (s: string) => { export const DrawerOverview = (props: { sparkApp: ApacheSpark }) => { const data = generateMetadata(props.sparkApp) return ( -
+
+ import('./components/ApacheSparkOverviewTable/ApacheSparkOverviewTable').then( + m => m.ApacheSparkOverviewTable, + ), + mountPoint: rootRouteRef, + }), +); diff --git a/plugins/argo-workflows/package.json b/plugins/argo-workflows/package.json index f23870b..0beb727 100644 --- a/plugins/argo-workflows/package.json +++ b/plugins/argo-workflows/package.json @@ -3,6 +3,17 @@ "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.tsx", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": ["src/alpha.tsx"], + "package.json": ["package.json"] + } + }, "license": "Apache-2.0", "private": true, "publishConfig": { @@ -24,22 +35,20 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.14.8", - "@backstage/core-plugin-api": "^1.9.3", - "@backstage/theme": "^0.5.6", - "@material-ui/core": "^4.9.13", - "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.61", + "@backstage/core-components": "^0.18.8", + "@backstage/core-plugin-api": "^1.12.4", + "@backstage/frontend-plugin-api": "^0.15.1", + "@backstage/theme": "^0.7.2", "react-use": "^17.2.4" }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.26.10", - "@backstage/core-app-api": "^1.13.0", - "@backstage/dev-utils": "^1.0.34", - "@backstage/test-utils": "^1.5.7", + "@backstage/cli": "^0.36.0", + "@backstage/core-app-api": "^1.19.6", + "@backstage/dev-utils": "^1.1.21", + "@backstage/test-utils": "^1.7.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/argo-workflows/src/alpha.tsx b/plugins/argo-workflows/src/alpha.tsx new file mode 100644 index 0000000..702aa14 --- /dev/null +++ b/plugins/argo-workflows/src/alpha.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { createFrontendPlugin, PageBlueprint } from '@backstage/frontend-plugin-api'; + +/** + * PageBlueprint extension for the Argo Workflows plugin. + * Registers the main overview page under /argo-workflows. + */ +const ArgoWorkflowsPage = PageBlueprint.make({ + params: { + path: '/argo-workflows', + loader: () => + import('./components/Overview').then(m => ), + }, +}); + +/** + * New frontend system plugin entry point for @internal/plugin-argo-workflows. + * Import via the "/alpha" sub-path export. + */ +export default createFrontendPlugin({ + pluginId: 'argo-workflows', + extensions: [ArgoWorkflowsPage], +}); diff --git a/plugins/argo-workflows/src/components/Overview/Overview.tsx b/plugins/argo-workflows/src/components/Overview/Overview.tsx index 78923fd..edfd8fb 100644 --- a/plugins/argo-workflows/src/components/Overview/Overview.tsx +++ b/plugins/argo-workflows/src/components/Overview/Overview.tsx @@ -8,7 +8,7 @@ import { SupportButton, InfoCard, } from '@backstage/core-components'; -import { Grid } from '@material-ui/core'; +// CSS grid replaces MUI Grid (MUI removed per BUI migration) import { OverviewTable } from '../WorkflowOverview/WorkflowOverview'; import { useEntity } from '@backstage/plugin-catalog-react'; import { isArgoWorkflowsAvailable } from '../../plugin'; @@ -23,12 +23,15 @@ export const ArgoWorkflowsOverviewPage = () => ( Overview of your Argo Workflows - - - - - - + {/* CSS grid replaces MUI Grid (MUI removed per BUI migration) */} +
+
+ +
+
+ +
+
); diff --git a/plugins/argo-workflows/src/components/WorkflowOverview/WorkflowOverview.tsx b/plugins/argo-workflows/src/components/WorkflowOverview/WorkflowOverview.tsx index 650b50f..f1f52a2 100644 --- a/plugins/argo-workflows/src/components/WorkflowOverview/WorkflowOverview.tsx +++ b/plugins/argo-workflows/src/components/WorkflowOverview/WorkflowOverview.tsx @@ -12,7 +12,7 @@ import { TableColumn, } from "@backstage/core-components"; import React from "react"; -import Alert from "@material-ui/lab/Alert"; +import { ResponseErrorPanel } from "@backstage/core-components"; import { useEntity } from "@backstage/plugin-catalog-react"; import { IoArgoprojWorkflowV1alpha1WorkflowList } from "../../api/generated/api"; import { getAnnotationValues, trimBaseUrl } from "../utils"; @@ -79,7 +79,7 @@ export const OverviewTable = () => { if (loading) { return ; } else if (error) { - return {`${error}`}; + return ; } const data = value?.items?.map((val) => { diff --git a/plugins/argo-workflows/src/components/WorkflowTemplateOverview/WorkflowTemplateOverview.tsx b/plugins/argo-workflows/src/components/WorkflowTemplateOverview/WorkflowTemplateOverview.tsx index eae4c06..7637a5e 100644 --- a/plugins/argo-workflows/src/components/WorkflowTemplateOverview/WorkflowTemplateOverview.tsx +++ b/plugins/argo-workflows/src/components/WorkflowTemplateOverview/WorkflowTemplateOverview.tsx @@ -5,7 +5,7 @@ import { getAnnotationValues, trimBaseUrl } from "../utils"; import { Link, Progress, Table, TableColumn } from "@backstage/core-components"; import React, { useEffect, useState } from "react"; import useAsync from "react-use/lib/useAsync"; -import Alert from "@material-ui/lab/Alert"; +import { ResponseErrorPanel } from "@backstage/core-components"; type TableData = { id: string; @@ -67,7 +67,7 @@ export const WorkflowTemplateTable = () => { if (loading) { return ; } else if (error) { - return no workflow templates found; + return ; } return ( diff --git a/plugins/cnoe-ui/package.json b/plugins/cnoe-ui/package.json index e319745..2eef588 100644 --- a/plugins/cnoe-ui/package.json +++ b/plugins/cnoe-ui/package.json @@ -3,6 +3,17 @@ "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.tsx", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": ["src/alpha.tsx"], + "package.json": ["package.json"] + } + }, "license": "Apache-2.0", "private": true, "publishConfig": { @@ -24,22 +35,20 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.14.8", - "@backstage/core-plugin-api": "^1.9.3", - "@backstage/theme": "^0.5.6", - "@material-ui/core": "^4.12.2", - "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.61", + "@backstage/core-components": "^0.18.8", + "@backstage/core-plugin-api": "^1.12.4", + "@backstage/frontend-plugin-api": "^0.15.1", + "@backstage/theme": "^0.7.2", "react-use": "^17.2.4" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.2" }, "devDependencies": { - "@backstage/cli": "^0.26.10", - "@backstage/core-app-api": "^1.13.0", - "@backstage/dev-utils": "^1.0.34", - "@backstage/test-utils": "^1.5.7", + "@backstage/cli": "^0.36.0", + "@backstage/core-app-api": "^1.19.6", + "@backstage/dev-utils": "^1.1.21", + "@backstage/test-utils": "^1.7.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/cnoe-ui/src/alpha.tsx b/plugins/cnoe-ui/src/alpha.tsx new file mode 100644 index 0000000..78002b4 --- /dev/null +++ b/plugins/cnoe-ui/src/alpha.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { createFrontendPlugin, PageBlueprint } from '@backstage/frontend-plugin-api'; + +/** + * PageBlueprint extension for the CNOE UI plugin. + * Registers the CNOE homepage under /home. + */ +const CnoeUiPage = PageBlueprint.make({ + params: { + path: '/home', + loader: () => + import('./components/Homepage').then(m => ), + }, +}); + +/** + * New frontend system plugin entry point for @internal/plugin-cnoe-ui. + * Import via the "/alpha" sub-path export. + */ +export default createFrontendPlugin({ + pluginId: 'cnoe-ui-plugin', + extensions: [CnoeUiPage], +}); diff --git a/plugins/cnoe-ui/src/components/Homepage.tsx b/plugins/cnoe-ui/src/components/Homepage.tsx index e1f7029..51afaae 100644 --- a/plugins/cnoe-ui/src/components/Homepage.tsx +++ b/plugins/cnoe-ui/src/components/Homepage.tsx @@ -1,7 +1,7 @@ import { Content, Page } from '@backstage/core-components'; import { HomePageSearchBar } from '@backstage/plugin-search'; import { SearchContextProvider } from '@backstage/plugin-search-react'; -import { Grid, makeStyles } from '@material-ui/core'; +import { useApi, configApiRef } from '@backstage/core-plugin-api'; import React from 'react'; import { @@ -15,67 +15,150 @@ import { LogoBig, } from './logos'; -const useStyles = makeStyles(theme => ({ - searchBar: { - display: 'flex', - maxWidth: '60vw', - backgroundColor: theme.palette.background.paper, - boxShadow: theme.shadows[1], - padding: '8px 0', - borderRadius: '50px', - margin: 'auto', - }, -})); +const getBasePath = () => { + if (typeof window !== 'undefined') { + const baseTag = document.querySelector('base'); + if (baseTag?.href) { + try { + const base = new URL(baseTag.href); + return base.pathname.replace(/\/$/, ''); + } catch { + // fallback + } + } + } + return ''; +}; + +const basePath = getBasePath(); + +const getDomainUrl = () => { + if (typeof window !== 'undefined') { + return `${window.location.protocol}//${window.location.host}`; + } + return 'http://localhost:3000'; +}; + +const domainUrl = getDomainUrl(); -const useLogoStyles = makeStyles(theme => ({ - container: { - margin: theme.spacing(5, 0), - }, - svg: { - width: 'auto', - height: 100, - }, - path: { - fill: '#00568c', - }, -})); +// Inline styles replace former makeStyles usage (MUI removed per BUI migration) +const searchBarStyle: React.CSSProperties = { + display: 'flex', + maxWidth: '60vw', + backgroundColor: 'var(--backstage-color-background-paper, #fff)', + boxShadow: '0 1px 3px rgba(0,0,0,0.2)', + padding: '8px 0', + borderRadius: '50px', + margin: 'auto', +}; + +const logoContainerStyle: React.CSSProperties = { + margin: '40px 0', +}; export const CNOEHomepage = () => { - const classes = useStyles(); - const { container } = useLogoStyles(); + const config = useApi(configApiRef); + + const getGitLabUrl = () => { + try { + const gitlabIntegrations = config.getOptionalConfigArray( + 'integrations.gitlab', + ); + if (gitlabIntegrations && gitlabIntegrations.length > 0) { + const baseUrl = gitlabIntegrations[0].getOptionalString('baseUrl'); + if (baseUrl) return baseUrl; + } + } catch (e) { + console.log('Could not read GitLab config:', e); + } + return 'https://gitlab.com'; + }; + + const gitUrl = getGitLabUrl(); return ( - - } /> - - - - - + {/* CSS grid replaces MUI Grid (MUI removed per BUI migration) */} +
+ } /> +
+ +
+
+
- - +
+
, + icon: , }, { - url: '/docs', - label: 'Tech Docs', - icon: , + url: gitUrl, + label: 'GitLab', + icon: ( + GitLab + ), + }, + { + url: `${domainUrl}/argocd`, + label: 'ArgoCD', + icon: ( + ArgoCD + ), + }, + { + url: `${domainUrl}/argo-workflows`, + label: 'Argo Workflows', + icon: ( + Argo Workflows + ), + }, + { + url: domainUrl, + label: 'Kargo', + icon: ( + Kargo + ), + }, + { + url: `${domainUrl}/keycloak`, + label: 'Keycloak', + icon: ( + Keycloak + ), }, ]} /> - - - +
+
+
diff --git a/plugins/cnoe-ui/src/components/logos/LogoBig.tsx b/plugins/cnoe-ui/src/components/logos/LogoBig.tsx index 048dd9b..cb2fc06 100644 --- a/plugins/cnoe-ui/src/components/logos/LogoBig.tsx +++ b/plugins/cnoe-ui/src/components/logos/LogoBig.tsx @@ -1,56 +1,39 @@ import React from 'react'; -import { makeStyles } from '@material-ui/core'; -const useStyles = makeStyles({ - svg: { - width: 'auto', - height: 190, - }, - whitePath: { - fill: '#ffffff', - stroke: 'none', - }, - bluePath: { - fill: '#00568c', - stroke: 'none', - }, - cyanPath: { - fill: '#00adee', - stroke: 'none', - }, -}); +// Inline styles replace former makeStyles usage (MUI removed per BUI migration) +const svgStyle: React.CSSProperties = { width: 'auto', height: 190 }; +const cyanPathStyle: React.CSSProperties = { fill: '#00adee', stroke: 'none' }; +const bluePathStyle: React.CSSProperties = { fill: '#00568c', stroke: 'none' }; export const LogoBig = () => { - const classes = useStyles(); - return ( - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + ); }; diff --git a/plugins/cnoe-ui/src/components/logos/LogoFull.tsx b/plugins/cnoe-ui/src/components/logos/LogoFull.tsx index d4489ed..68887f2 100644 --- a/plugins/cnoe-ui/src/components/logos/LogoFull.tsx +++ b/plugins/cnoe-ui/src/components/logos/LogoFull.tsx @@ -1,56 +1,39 @@ import React from 'react'; -import { makeStyles } from '@material-ui/core'; -const useStyles = makeStyles({ - svg: { - width: 'auto', - height: 90, - }, - whitePath: { - fill: '#ffffff', - stroke: 'none', - }, - bluePath: { - fill: '#00568c', - stroke: 'none', - }, - cyanPath: { - fill: '#00adee', - stroke: 'none', - }, -}); +// Inline styles replace former makeStyles usage (MUI removed per BUI migration) +const svgStyle: React.CSSProperties = { width: 'auto', height: 90 }; +const cyanPathStyle: React.CSSProperties = { fill: '#00adee', stroke: 'none' }; +const bluePathStyle: React.CSSProperties = { fill: '#00568c', stroke: 'none' }; export const LogoFull = () => { - const classes = useStyles(); - return ( - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + ); }; diff --git a/plugins/cnoe-ui/src/components/logos/LogoIcon.tsx b/plugins/cnoe-ui/src/components/logos/LogoIcon.tsx index bcf70a1..9c40df3 100644 --- a/plugins/cnoe-ui/src/components/logos/LogoIcon.tsx +++ b/plugins/cnoe-ui/src/components/logos/LogoIcon.tsx @@ -1,44 +1,27 @@ import React from 'react'; -import { makeStyles } from '@material-ui/core'; -const useStyles = makeStyles({ - svg: { - width: 'auto', - height: 28, - }, - whitePath: { - fill: '#ffffff', - stroke: 'none', - }, - bluePath: { - fill: '#00568c', - stroke: 'none', - }, - cyanPath: { - fill: '#00adee', - stroke: 'none', - }, -}); +// Inline styles replace former makeStyles usage (MUI removed per BUI migration) +const svgStyle: React.CSSProperties = { width: 'auto', height: 28 }; +const cyanPathStyle: React.CSSProperties = { fill: '#00adee', stroke: 'none' }; +const bluePathStyle: React.CSSProperties = { fill: '#00568c', stroke: 'none' }; export const LogoIcon = () => { - const classes = useStyles(); - return ( - - - - - - - - - - + + + + + + + + + + ); }; diff --git a/packages/app/.eslintrc.js b/plugins/scaffolder-backend-module-gitlab/.eslintrc.js similarity index 100% rename from packages/app/.eslintrc.js rename to plugins/scaffolder-backend-module-gitlab/.eslintrc.js diff --git a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md new file mode 100644 index 0000000..df082eb --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md @@ -0,0 +1,1527 @@ +# @backstage/plugin-scaffolder-backend-module-gitlab + +## 0.9.5 + +### Patch Changes + +- a84ddea: The log message now indicates that the pipeline trigger token was deleted and not pipeline itself. +- Updated dependencies + - @backstage/integration@1.18.0 + - @backstage/backend-plugin-api@1.4.3 + - @backstage/plugin-scaffolder-node@0.11.1 + +## 0.9.5-next.0 + +### Patch Changes + +- a84ddea: The log message now indicates that the pipeline trigger token was deleted and not pipeline itself. +- Updated dependencies + - @backstage/integration@1.18.0-next.0 + - @backstage/plugin-scaffolder-node@0.11.1-next.0 + - @backstage/backend-plugin-api@1.4.3-next.0 + +## 0.9.4 + +### Patch Changes + +- 5bb870b: Show additional information about the cause in error messages from GitLab +- df2bfab: The `description` property in `publish:gitlab:merge-request` has been made optional again to comply with the GitLab API. +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.11.0 + - @backstage/backend-plugin-api@1.4.2 + +## 0.9.4-next.1 + +### Patch Changes + +- 5bb870b: Show additional information about the cause in error messages from GitLab + +## 0.9.4-next.0 + +### Patch Changes + +- df2bfab: The `description` property in `publish:gitlab:merge-request` has been made optional again to comply with the GitLab API. +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.11.0-next.0 + - @backstage/backend-plugin-api@1.4.2-next.0 + - @backstage/config@1.3.3 + - @backstage/errors@1.2.7 + - @backstage/integration@1.17.1 + +## 0.9.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.3 + - @backstage/plugin-scaffolder-node@0.10.0 + - @backstage/integration@1.17.1 + - @backstage/backend-plugin-api@1.4.1 + +## 0.9.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.10.0-next.2 + +## 0.9.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.3-next.0 + - @backstage/integration@1.17.1-next.1 + - @backstage/backend-plugin-api@1.4.1-next.0 + - @backstage/plugin-scaffolder-node@0.9.1-next.1 + +## 0.9.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.9.1-next.0 + - @backstage/integration@1.17.1-next.0 + - @backstage/backend-plugin-api@1.4.0 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + +## 0.9.2 + +### Patch Changes + +- 063b2d3: Fixed dependency to frontend package from tests +- a296637: Migrate to new action format +- 3d6493a: Support merge request labels in publish:gitlab:merge-request +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.9.0 + - @backstage/backend-plugin-api@1.4.0 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + - @backstage/integration@1.17.0 + +## 0.9.2-next.2 + +### Patch Changes + +- a296637: Migrate to new action format +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.9.0-next.2 + - @backstage/backend-plugin-api@1.4.0-next.1 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + - @backstage/integration@1.17.0 + +## 0.9.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.8.3-next.1 + - @backstage/backend-plugin-api@1.4.0-next.1 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + - @backstage/integration@1.17.0 + +## 0.9.2-next.0 + +### Patch Changes + +- 3d6493a: Support merge request labels in publish:gitlab:merge-request +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.8.3-next.0 + - @backstage/backend-plugin-api@1.4.0-next.0 + +## 0.9.1 + +### Patch Changes + +- d15355c: If the commit action is not `create` log a more appropriate error message to the end user advising that the files they're trying to modify might not exist +- 72d019d: Removed various typos +- Updated dependencies + - @backstage/integration@1.17.0 + - @backstage/backend-plugin-api@1.3.1 + - @backstage/plugin-scaffolder-node@0.8.2 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + +## 0.9.1-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.17.0-next.3 + - @backstage/plugin-scaffolder-node@0.8.2-next.3 + - @backstage/backend-plugin-api@1.3.1-next.2 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + +## 0.9.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.17.0-next.2 + - @backstage/config@1.3.2 + - @backstage/plugin-scaffolder-node@0.8.2-next.2 + - @backstage/backend-plugin-api@1.3.1-next.1 + - @backstage/errors@1.2.7 + +## 0.9.1-next.1 + +### Patch Changes + +- 72d019d: Removed various typos +- Updated dependencies + - @backstage/backend-plugin-api@1.3.1-next.1 + - @backstage/integration@1.16.4-next.1 + - @backstage/plugin-scaffolder-node@0.8.2-next.1 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + +## 0.9.1-next.0 + +### Patch Changes + +- d15355c: If the commit action is not `create` log a more appropriate error message to the end user advising that the files they're trying to modify might not exist +- Updated dependencies + - @backstage/integration@1.16.4-next.0 + - @backstage/plugin-scaffolder-node@0.8.2-next.0 + - @backstage/backend-plugin-api@1.3.1-next.0 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + +## 0.9.0 + +### Minor Changes + +- d86ce21: Added additional feedback in case branch is already created + +### Patch Changes + +- 003dc15: Updated the path field in the `gitlab:group:ensureExists` action to support also strings with multiple segments (e.g. `group/subgroup`) +- 19e23da: Adds more context to the `gitlab:repo:push` `commitAction` property for the installed actions section in the scaffolder +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.8.1 + - @backstage/backend-plugin-api@1.3.0 + - @backstage/integration@1.16.3 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + +## 0.8.2-next.1 + +### Patch Changes + +- 003dc15: Updated the path field in the `gitlab:group:ensureExists` action to support also strings with multiple segments (e.g. `group/subgroup`) +- Updated dependencies + - @backstage/integration@1.16.3-next.0 + - @backstage/plugin-scaffolder-node@0.8.1-next.1 + - @backstage/backend-plugin-api@1.2.1 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + +## 0.8.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.8.1-next.0 + - @backstage/backend-plugin-api@1.2.1 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + - @backstage/integration@1.16.2 + +## 0.8.1 + +### Patch Changes + +- 0df33ea: fix: Creating a repository in a user namespace would always lead to an error +- 984b283: Made "gitlab:pipeline:trigger" action idempotent +- 225c733: Made gitlab:repo:push action idempotent. +- a08cb20: Remove usages of `@backstage/backend-common` +- ac58f84: Made gitlab:issue:edit action idempotent. +- f6b51a8: Made "gitlab:projectDeployToken:create" action idempotent +- a75e18f: Change the if statement in the catch block to match what the new version of Gitbeaker will return +- 36af946: Made "gitlab:projectVariable:create" action idempotent +- 1cea434: Made "gitlab:projectAccessToken:create" action idempotent +- 4f8b5b6: Allow signing git commits using configured private PGP key in scaffolder +- 83ae330: Made "gitlab:group:migrate" action idempotent +- Updated dependencies + - @backstage/integration@1.16.2 + - @backstage/plugin-scaffolder-node@0.8.0 + - @backstage/backend-plugin-api@1.2.1 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + +## 0.8.1-next.2 + +### Patch Changes + +- 0df33ea: fix: Creating a repository in a user namespace would always lead to an error +- ac58f84: Made gitlab:issue:edit action idempotent. +- a75e18f: Change the if statement in the catch block to match what the new version of Gitbeaker will return +- 4f8b5b6: Allow signing git commits using configured private PGP key in scaffolder +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.8.0-next.2 + - @backstage/integration@1.16.2-next.0 + - @backstage/backend-plugin-api@1.2.1-next.1 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + +## 0.8.1-next.1 + +### Patch Changes + +- a08cb20: Remove usages of `@backstage/backend-common` +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.7.1-next.1 + - @backstage/backend-plugin-api@1.2.1-next.1 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + - @backstage/integration@1.16.1 + +## 0.8.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.2.1-next.0 + - @backstage/plugin-scaffolder-node@0.7.1-next.0 + +## 0.8.0 + +### Minor Changes + +- 06eee14: Support empty repository creation in gitlab without workspace pushing and conditionally skip if the repository already exists. + +### Patch Changes + +- a0419a6: Made gitlab:group:ensureExists action idempotent +- 9d04e91: Fix automated assignment of reviewers for instances without premium/ultimate license (404). Introduce opt-in flag for automatic reviewer assignment based on approval rules +- 9545c5f: `createGitlabProjectMigrateAction` can now output the `migrationId` +- e52cee6: Made gitlab:issues:create action idempotent. +- fe44946: Fixed bug of passing wrong value to `onChange` handler when using `GitLab` autocomplete +- 66e392f: Making publish:gitlab:merge-request idempotent. +- a7b22eb: Fixed bug in gitlabRepoPush where it was looking in the wrong place in the exception response from gitbeaker when checking if the branch already exists +- Updated dependencies + - @backstage/backend-plugin-api@1.2.0 + - @backstage/plugin-scaffolder-node@0.7.0 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + - @backstage/integration@1.16.1 + +## 0.8.0-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.7.0-next.2 + - @backstage/backend-plugin-api@1.2.0-next.2 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + - @backstage/integration@1.16.1 + +## 0.8.0-next.2 + +### Patch Changes + +- 9d04e91: Fix automated assignment of reviewers for instances without premium/ultimate license (404). Introduce opt-in flag for automatic reviewer assignment based on approval rules +- 9545c5f: `createGitlabProjectMigrateAction` can now output the `migrationId` +- fe44946: Fixed bug of passing wrong value to `onChange` handler when using `GitLab` autocomplete +- Updated dependencies + - @backstage/backend-plugin-api@1.2.0-next.1 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + - @backstage/integration@1.16.1 + - @backstage/plugin-scaffolder-node@0.7.0-next.1 + +## 0.8.0-next.1 + +### Minor Changes + +- 06eee14: Support empty repository creation in gitlab without workspace pushing and conditionally skip if the repository already exists. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.2.0-next.0 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + - @backstage/integration@1.16.1 + - @backstage/plugin-scaffolder-node@0.7.0-next.0 + +## 0.7.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.2.0-next.0 + - @backstage/plugin-scaffolder-node@0.7.0-next.0 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + - @backstage/integration@1.16.1 + +## 0.7.1 + +### Patch Changes + +- 8fb529a: Added `reviewerIds` to the Gitlab Merge Request action. +- a913beb: Added action `gitlab:group:migrate` to migrate projects using `bulk_import` +- 7b62987: Updated the path field in the `gitlab:group:ensureExists` action to accept an array of either strings or objects with name and slug fields. +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.3 + - @backstage/integration@1.16.1 + - @backstage/backend-plugin-api@1.1.1 + - @backstage/config@1.3.2 + - @backstage/errors@1.2.7 + +## 0.7.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.1-next.1 + - @backstage/config@1.3.2-next.0 + - @backstage/errors@1.2.7-next.0 + - @backstage/plugin-scaffolder-node@0.6.3-next.1 + - @backstage/integration@1.16.1-next.0 + +## 0.7.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.3-next.0 + - @backstage/backend-plugin-api@1.1.1-next.0 + - @backstage/config@1.3.1 + - @backstage/errors@1.2.6 + - @backstage/integration@1.16.0 + +## 0.7.0 + +### Minor Changes + +- c4ffd13: Added the autocomplete feature to GitlabRepoUrlPicker +- 32459d0: **BREAKING**: Upgraded the `gitbeaker` library to version 41. As part of this, the `scopes` parameter to the `gitlab:projectDeployToken:create` is no longer optional, so you will have to pass it a value (for example `['read_repository']`). + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0 + - @backstage/backend-plugin-api@1.1.0 + - @backstage/plugin-scaffolder-node@0.6.2 + - @backstage/errors@1.2.6 + - @backstage/config@1.3.1 + +## 0.7.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + +## 0.7.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + +## 0.7.0-next.0 + +### Minor Changes + +- c4ffd13: Added the autocomplete feature to GitlabRepoUrlPicker +- 32459d0: **BREAKING**: Upgraded the `gitbeaker` library to version 41. As part of this, the `scopes` parameter to the `gitlab:projectDeployToken:create` is no longer optional, so you will have to pass it a value (for example `['read_repository']`). + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## 0.6.1 + +### Patch Changes + +- cdc8b4c: Improve error messages from Gitlab +- 2dbdccb: Removed circular import +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## 0.6.1-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## 0.6.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## 0.6.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## 0.6.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## 0.6.0 + +### Minor Changes + +- 73f2ccf: declare correct type (number) for publish:gitlab output.projectId + +### Patch Changes + +- 9adfe46: GitLab MR: introduce 'skip' commit action. +- bc71718: Updated installation instructions in README to not include `/alpha`. +- 094eaa3: Remove references to in-repo backend-common +- f2f68cf: Updated `gitlab:group:ensureExists` action to instead use oauth client. +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0 + - @backstage/integration@1.15.1 + - @backstage/backend-plugin-api@1.0.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## 0.6.0-next.2 + +### Minor Changes + +- 73f2ccf: declare correct type (number) for publish:gitlab output.projectId + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.15.1-next.1 + - @backstage/plugin-scaffolder-node@0.5.0-next.2 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## 0.5.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.15.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-scaffolder-node@0.5.0-next.1 + +## 0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- f2f68cf: Updated `gitlab:group:ensureExists` action to instead use oauth client. +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## 0.5.0 + +### Minor Changes + +- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs. + + This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config. + + As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it. + +### Patch Changes + +- 5d1670f: Update README installation instructions +- Updated dependencies + - @backstage/backend-common@0.25.0 + - @backstage/backend-plugin-api@1.0.0 + - @backstage/integration@1.15.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-scaffolder-node@0.4.11 + +## 0.5.0-next.2 + +### Patch Changes + +- 5d1670f: Update README installation instructions +- Updated dependencies + - @backstage/backend-common@0.25.0-next.2 + - @backstage/backend-plugin-api@1.0.0-next.2 + - @backstage/integration@1.15.0-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-scaffolder-node@0.4.11-next.2 + +## 0.5.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.25.0-next.1 + - @backstage/backend-plugin-api@0.9.0-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.14.0 + - @backstage/plugin-scaffolder-node@0.4.11-next.1 + +## 0.5.0-next.0 + +### Minor Changes + +- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs. + + This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config. + + As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.9.0-next.0 + - @backstage/backend-common@0.25.0-next.0 + - @backstage/plugin-scaffolder-node@0.4.11-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.14.0 + +## 0.4.5 + +### Patch Changes + +- da97131: Added test cases for gitlab:issues:create examples +- fad1b90: Allow the `createGitlabProjectVariableAction` to use oauth tokens +- aab708e: Added test cases for gitlab:issue:edit examples +- ef742dc: Added test cases for gitlab:projectAccessToken:create example +- 1ba4c2f: Added test cases for gitlab:pipeline:trigger examples +- a6603e4: Add custom action for merge request: **auto** + + The **Auto** action selects the committed action between _create_ and _update_. + + The **Auto** action fetches files using the **/projects/repository/tree endpoint**. + After fetching, it checks if the file exists locally and in the repository. If it does, it chooses **update**; otherwise, it chooses **create**. + +- Updated dependencies + - @backstage/backend-plugin-api@0.8.0 + - @backstage/backend-common@0.24.0 + - @backstage/plugin-scaffolder-node@0.4.9 + - @backstage/integration@1.14.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## 0.4.5-next.3 + +### Patch Changes + +- da97131: Added test cases for gitlab:issues:create examples +- Updated dependencies + - @backstage/backend-plugin-api@0.8.0-next.3 + - @backstage/backend-common@0.23.4-next.3 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.14.0-next.0 + - @backstage/plugin-scaffolder-node@0.4.9-next.3 + +## 0.4.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.8.0-next.2 + - @backstage/plugin-scaffolder-node@0.4.9-next.2 + - @backstage/backend-common@0.23.4-next.2 + - @backstage/integration@1.14.0-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## 0.4.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.7.1-next.1 + - @backstage/backend-common@0.23.4-next.1 + - @backstage/integration@1.14.0-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-scaffolder-node@0.4.9-next.1 + +## 0.4.5-next.0 + +### Patch Changes + +- fad1b90: Allow the `createGitlabProjectVariableAction` to use oauth tokens +- aab708e: Added test cases for gitlab:issue:edit examples +- ef742dc: Added test cases for gitlab:projectAccessToken:create example +- 1ba4c2f: Added test cases for gitlab:pipeline:trigger examples +- a6603e4: Add custom action for merge request: **auto** + + The **Auto** action selects the committed action between _create_ and _update_. + + The **Auto** action fetches files using the **/projects/repository/tree endpoint**. + After fetching, it checks if the file exists locally and in the repository. If it does, it chooses **update**; otherwise, it chooses **create**. + +- Updated dependencies + - @backstage/backend-common@0.23.4-next.0 + - @backstage/integration@1.14.0-next.0 + - @backstage/backend-plugin-api@0.7.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-scaffolder-node@0.4.9-next.0 + +## 0.4.4 + +### Patch Changes + +- 0ac124b: Updated configuration instructions +- 2fb0eb8: Added support for passing `variables` to `gitlab:pipeline:trigger` +- Updated dependencies + - @backstage/backend-plugin-api@0.7.0 + - @backstage/backend-common@0.23.3 + - @backstage/integration@1.13.0 + - @backstage/plugin-scaffolder-node@0.4.8 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## 0.4.4-next.1 + +### Patch Changes + +- 2fb0eb8: Added support for passing `variables` to `gitlab:pipeline:trigger` +- Updated dependencies + - @backstage/backend-common@0.23.3-next.1 + - @backstage/backend-plugin-api@0.6.22-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.13.0-next.0 + - @backstage/plugin-scaffolder-node@0.4.8-next.1 + +## 0.4.3-next.0 + +### Patch Changes + +- 0ac124b: Updated configuration instructions +- Updated dependencies + - @backstage/backend-plugin-api@0.6.21-next.0 + - @backstage/backend-common@0.23.2-next.0 + - @backstage/integration@1.13.0-next.0 + - @backstage/plugin-scaffolder-node@0.4.7-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## 0.4.1 + +### Patch Changes + +- 78a0b08: Internal refactor to handle `BackendFeature` contract change. +- cf96041: Added `gitlab:issue:edit` action to edit existing GitLab issues +- d44a20a: Added additional plugin metadata to `package.json`. +- 829e0ec: Add new `gitlab:pipeline:trigger` action to trigger GitLab pipelines. +- Updated dependencies + - @backstage/backend-common@0.23.0 + - @backstage/backend-plugin-api@0.6.19 + - @backstage/integration@1.12.0 + - @backstage/plugin-scaffolder-node@0.4.5 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## 0.4.1-next.3 + +### Patch Changes + +- d44a20a: Added additional plugin metadata to `package.json`. +- Updated dependencies + - @backstage/backend-plugin-api@0.6.19-next.3 + - @backstage/integration@1.12.0-next.1 + - @backstage/plugin-scaffolder-node@0.4.5-next.3 + - @backstage/backend-common@0.23.0-next.3 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## 0.4.1-next.2 + +### Patch Changes + +- cf96041: Added `gitlab:issue:edit` action to edit existing GitLab issues +- Updated dependencies + - @backstage/backend-plugin-api@0.6.19-next.2 + - @backstage/backend-common@0.23.0-next.2 + - @backstage/integration@1.12.0-next.0 + - @backstage/plugin-scaffolder-node@0.4.5-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## 0.4.1-next.1 + +### Patch Changes + +- 829e0ec: Add new `gitlab:pipeline:trigger` action to trigger GitLab pipelines. +- Updated dependencies + - @backstage/backend-plugin-api@0.6.19-next.1 + - @backstage/backend-common@0.23.0-next.1 + - @backstage/plugin-scaffolder-node@0.4.5-next.1 + +## 0.4.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.22.1-next.0 + - @backstage/backend-plugin-api@0.6.19-next.0 + - @backstage/plugin-scaffolder-node@0.4.5-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.11.0 + +## 0.4.0 + +### Minor Changes + +- 18f736f: Add examples for `gitlab:projectVariable:create` scaffolder action & improve related tests + +### Patch Changes + +- 8fa8a00: Add merge method and squash option for project creation +- d229dc4: Move path utilities from `backend-common` to the `backend-plugin-api` package. +- ffc73ec: Add examples for `gitlab:repo:push` scaffolder action & improve related tests +- Updated dependencies + - @backstage/backend-common@0.22.0 + - @backstage/backend-plugin-api@0.6.18 + - @backstage/plugin-scaffolder-node@0.4.4 + - @backstage/integration@1.11.0 + +## 0.4.0-next.2 + +### Minor Changes + +- 18f736f: Add examples for `gitlab:projectVariable:create` scaffolder action & improve related tests + +### Patch Changes + +- 8fa8a00: Add merge method and squash option for project creation +- Updated dependencies + - @backstage/backend-common@0.22.0-next.2 + - @backstage/plugin-scaffolder-node@0.4.4-next.2 + - @backstage/integration@1.11.0-next.0 + +## 0.3.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.22.0-next.1 + - @backstage/plugin-scaffolder-node@0.4.4-next.1 + - @backstage/backend-plugin-api@0.6.18-next.1 + +## 0.3.4-next.0 + +### Patch Changes + +- ffc73ec: Add examples for `gitlab:repo:push` scaffolder action & improve related tests +- Updated dependencies + - @backstage/backend-common@0.21.8-next.0 + - @backstage/backend-plugin-api@0.6.18-next.0 + - @backstage/plugin-scaffolder-node@0.4.4-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.10.0 + +## 0.3.3 + +### Patch Changes + +- aa514d1: Add examples for `publish:gitlab:merge-request` scaffolder action & improve related tests +- 52f40ea: Add examples for `gitlab:group:ensureExists` scaffolder action & improve related tests +- 33f958a: Improve examples to ensure consistency across all publish actions +- d112225: Add examples for `gitlab:projectDeployToken:create` scaffolder action & improve related tests +- Updated dependencies + - @backstage/backend-common@0.21.7 + - @backstage/backend-plugin-api@0.6.17 + - @backstage/integration@1.10.0 + - @backstage/plugin-scaffolder-node@0.4.3 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## 0.3.3-next.1 + +### Patch Changes + +- 33f958a: Improve examples to ensure consistency across all publish actions +- Updated dependencies + - @backstage/backend-common@0.21.7-next.1 + - @backstage/backend-plugin-api@0.6.17-next.1 + - @backstage/plugin-scaffolder-node@0.4.3-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.10.0-next.0 + +## 0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.21.7-next.0 + - @backstage/integration@1.10.0-next.0 + - @backstage/backend-plugin-api@0.6.17-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-scaffolder-node@0.4.3-next.0 + +## 0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.21.6 + - @backstage/backend-plugin-api@0.6.16 + - @backstage/plugin-scaffolder-node@0.4.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.9.1 + +## 0.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.21.5 + - @backstage/plugin-scaffolder-node@0.4.1 + - @backstage/backend-plugin-api@0.6.15 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.9.1 + +## 0.3.0 + +### Minor Changes + +- 6bfb7b1: Output the `iid` as `issuesIid` from the `gitlab:issues:create` action + +### Patch Changes + +- f44589d: Introduced `createMockActionContext` to unify the way of creating scaffolder mock context. + + It will help to maintain tests in a long run during structural changes of action context. + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.4.0 + - @backstage/backend-common@0.21.4 + - @backstage/integration@1.9.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/backend-plugin-api@0.6.14 + +## 0.3.0-next.2 + +### Minor Changes + +- 6bfb7b1: Output the `iid` as `issuesIid` from the `gitlab:issues:create` action + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.4.0-next.2 + - @backstage/integration@1.9.1-next.2 + - @backstage/backend-common@0.21.4-next.2 + - @backstage/backend-plugin-api@0.6.14-next.2 + - @backstage/config@1.2.0-next.1 + - @backstage/errors@1.2.4-next.0 + +## 0.2.17-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0-next.1 + - @backstage/plugin-scaffolder-node@0.4.0-next.1 + - @backstage/backend-common@0.21.4-next.1 + - @backstage/backend-plugin-api@0.6.14-next.1 + - @backstage/integration@1.9.1-next.1 + - @backstage/errors@1.2.4-next.0 + +## 0.2.16-next.0 + +### Patch Changes + +- f44589d: Introduced `createMockActionContext` to unify the way of creating scaffolder mock context. + + It will help to maintain tests in a long run during structural changes of action context. + +- Updated dependencies + - @backstage/backend-common@0.21.3-next.0 + - @backstage/errors@1.2.4-next.0 + - @backstage/plugin-scaffolder-node@0.3.3-next.0 + - @backstage/backend-plugin-api@0.6.13-next.0 + - @backstage/config@1.1.2-next.0 + - @backstage/integration@1.9.1-next.0 + +## 0.2.13 + +### Patch Changes + +- e9a5228: Exporting a default module for the new Backend System +- 9aac2b0: Use `--cwd` as the first `yarn` argument +- 1cd2740: Use the Gitbeaker library for `gitlab:projectAccessToken:create` action, enabling the `expiresAt` option +- Updated dependencies + - @backstage/backend-common@0.21.0 + - @backstage/backend-plugin-api@0.6.10 + - @backstage/integration@1.9.0 + - @backstage/plugin-scaffolder-node@0.3.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.2.13-next.3 + +### Patch Changes + +- 1cd2740: Use the Gitbeaker library for `gitlab:projectAccessToken:create` action, enabling the `expiresAt` option +- Updated dependencies + - @backstage/backend-common@0.21.0-next.3 + - @backstage/integration@1.9.0-next.1 + - @backstage/plugin-scaffolder-node@0.3.0-next.3 + - @backstage/backend-plugin-api@0.6.10-next.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.2.13-next.2 + +### Patch Changes + +- 9aac2b0: Use `--cwd` as the first `yarn` argument +- Updated dependencies + - @backstage/backend-common@0.21.0-next.2 + - @backstage/backend-plugin-api@0.6.10-next.2 + - @backstage/plugin-scaffolder-node@0.3.0-next.2 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/integration@1.9.0-next.0 + +## 0.2.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.10-next.1 + - @backstage/backend-common@0.21.0-next.1 + - @backstage/integration@1.9.0-next.0 + - @backstage/plugin-scaffolder-node@0.3.0-next.1 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.2.13-next.0 + +### Patch Changes + +- e9a5228: Exporting a default module for the new Backend System +- Updated dependencies + - @backstage/backend-common@0.21.0-next.0 + - @backstage/plugin-scaffolder-node@0.3.0-next.0 + - @backstage/backend-plugin-api@0.6.10-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/integration@1.8.0 + +## 0.2.12 + +### Patch Changes + +- 604c9dd: Add Scaffolder custom action that creates GitLab issues called `gitlab:issues:create` +- 7c522c5: Add `gitlab:repo:push` scaffolder action to push files to arbitrary branch without creating a Merge Request +- Updated dependencies + - @backstage/backend-common@0.20.1 + - @backstage/plugin-scaffolder-node@0.2.10 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/integration@1.8.0 + +## 0.2.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.1-next.2 + - @backstage/plugin-scaffolder-node@0.2.10-next.2 + +## 0.2.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.1-next.1 + - @backstage/integration@1.8.0 + - @backstage/config@1.1.1 + - @backstage/plugin-scaffolder-node@0.2.10-next.1 + - @backstage/errors@1.2.3 + +## 0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.1-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/integration@1.8.0 + - @backstage/plugin-scaffolder-node@0.2.10-next.0 + +## 0.2.11 + +### Patch Changes + +- 219d7f0: Extract some more actions to this library +- 0cbb03b: Fixing regular expression ReDoS with zod packages. Upgrading to latest. ref: https://security.snyk.io/vuln/SNYK-JS-ZOD-5925617 +- Updated dependencies + - @backstage/backend-common@0.20.0 + - @backstage/plugin-scaffolder-node@0.2.9 + - @backstage/integration@1.8.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.2.11-next.3 + +### Patch Changes + +- 219d7f0: Extract some more actions to this library +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.9-next.3 + - @backstage/backend-common@0.20.0-next.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/integration@1.8.0-next.1 + +## 0.2.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/integration@1.8.0-next.1 + - @backstage/plugin-scaffolder-node@0.2.9-next.2 + +## 0.2.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.8.0-next.1 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-scaffolder-node@0.2.9-next.1 + +## 0.2.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-scaffolder-node@0.2.9-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.2.10 + +### Patch Changes + +- 26ca97ebaa: Add examples for `gitlab:projectAccessToken:create` scaffolder action & improve related tests +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.8-next.2 + +## 0.2.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.2-next.0 + - @backstage/plugin-scaffolder-node@0.2.8-next.1 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.2.10-next.0 + +### Patch Changes + +- 26ca97ebaa: Add examples for `gitlab:projectAccessToken:create` scaffolder action & improve related tests +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.8-next.0 + - @backstage/integration@1.7.1 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.2.9 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-scaffolder-node@0.2.6 + - @backstage/config@1.1.1 + +## 0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/config@1.1.1-next.0 + +## 0.2.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.5-next.1 + - @backstage/config@1.1.0 + - @backstage/errors@1.2.2 + - @backstage/integration@1.7.1-next.0 + +## 0.2.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.1-next.0 + - @backstage/plugin-scaffolder-node@0.2.5-next.0 + - @backstage/config@1.1.0 + - @backstage/errors@1.2.2 + +## 0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.1.0 + - @backstage/errors@1.2.2 + - @backstage/integration@1.7.0 + - @backstage/plugin-scaffolder-node@0.2.3 + +## 0.2.6-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.1.0-next.2 + - @backstage/errors@1.2.2-next.0 + - @backstage/integration@1.7.0-next.3 + - @backstage/plugin-scaffolder-node@0.2.3-next.3 + +## 0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.1.0-next.1 + - @backstage/integration@1.7.0-next.2 + - @backstage/plugin-scaffolder-node@0.2.3-next.2 + - @backstage/errors@1.2.1 + +## 0.2.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.1.0-next.0 + - @backstage/integration@1.7.0-next.1 + - @backstage/plugin-scaffolder-node@0.2.3-next.1 + - @backstage/errors@1.2.1 + +## 0.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.0-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/plugin-scaffolder-node@0.2.2-next.0 + +## 0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.0 + - @backstage/integration@1.6.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + +## 0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.6-next.2 + +## 0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.6-next.1 + - @backstage/integration@1.5.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/integration@1.5.1 + - @backstage/plugin-scaffolder-node@0.1.6-next.0 + +## 0.2.2 + +### Patch Changes + +- dd367967e2e1: Fixed a bug in `gitlab:group:ensureExists` where `repos` was always set as the root group. +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1 + - @backstage/plugin-scaffolder-node@0.1.5 + +## 0.2.2-next.1 + +### Patch Changes + +- dd367967e2e1: Fixed a bug in `gitlab:group:ensureExists` where `repos` was always set as the root group. +- Updated dependencies + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1-next.0 + - @backstage/integration@1.5.1-next.0 + - @backstage/plugin-scaffolder-node@0.1.5-next.0 + +## 0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1-next.0 + - @backstage/plugin-scaffolder-node@0.1.5-next.0 + +## 0.2.1 + +### Patch Changes + +- 50c4457119ec: Fixed publish configuration. +- 30e6edd7f6a5: Add support for dry run for `gitlab:group:ensureExists` action. +- f5a66052f04f: Tweak README +- Updated dependencies + - @backstage/integration@1.5.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + - @backstage/plugin-scaffolder-node@0.1.4 + +## 0.2.1-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/integration@1.5.0-next.0 + - @backstage/plugin-scaffolder-node@0.1.4-next.2 + +## 0.2.1-next.2 + +### Patch Changes + +- 30e6edd7f6a5: Add support for dry run for `gitlab:group:ensureExists` action. +- Updated dependencies + - @backstage/config@1.0.7 + +## 0.2.1-next.1 + +### Patch Changes + +- 50c4457119ec: Fixed publish configuration. +- Updated dependencies + - @backstage/integration@1.5.0-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/plugin-scaffolder-node@0.1.4-next.1 + - @backstage/config@1.0.7 + +## 0.2.1-next.0 + +### Patch Changes + +- f5a66052f04f: Tweak README +- Updated dependencies + - @backstage/integration@1.4.5 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-scaffolder-node@0.1.4-next.0 + +## 0.2.0 + +### Minor Changes + +- 439e2986be1: Add a new scaffolder action for gitlab to ensure a group exists + +### Patch Changes + +- f1496d4ab6f: Fix input schema validation issue for gitlab actions: + + - gitlab:group:ensureExists + - gitlab:projectAccessToken:create + - gitlab:projectDeployToken:create + - gitlab:projectVariable:create + +- Updated dependencies + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## 0.2.0-next.2 + +### Minor Changes + +- 439e2986be1: Add a new scaffolder action for gitlab to ensure a group exists + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3-next.2 + - @backstage/config@1.0.7 + +## 0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3-next.1 + - @backstage/config@1.0.7 + +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-scaffolder-node@0.1.3-next.0 + +## 0.1.0 + +### Minor Changes + +- 1ad400bb2de: Add Gitlab Scaffolder Plugin + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2 + - @backstage/integration@1.4.4 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## 0.1.0-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/plugin-scaffolder-node@0.1.2-next.3 + +## 0.1.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + +## 0.1.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.1 + - @backstage/integration@1.4.4-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## 0.1.0-next.0 + +### Minor Changes + +- 1ad400bb2de: Add Gitlab Scaffolder Plugin + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/errors@1.1.5 diff --git a/plugins/scaffolder-backend-module-gitlab/README.md b/plugins/scaffolder-backend-module-gitlab/README.md new file mode 100644 index 0000000..4542ec4 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/README.md @@ -0,0 +1,153 @@ +# scaffolder-backend-module-gitlab + +Welcome to the Gitlab Module for Scaffolder. + +Here you can find all Gitlab related features to improve your scaffolder: + +## Getting started + +## From your Backstage root directory + +```bash +# From your Backstage root directory +yarn --cwd packages/backend add @backstage/plugin-scaffolder-backend-module-gitlab +``` + +Then ensure that both the scaffolder and this module are added to your backend: + +```typescript +// In packages/backend/src/index.ts +const backend = createBackend(); +// ... +backend.add(import('@backstage/plugin-scaffolder-backend')); +backend.add(import('@backstage/plugin-scaffolder-backend-module-gitlab')); +``` + +After that you can use the actions in your template: + +```yaml +apiVersion: scaffolder.backstage.io/v1beta3 +kind: Template +metadata: + name: gitlab-demo + title: Gitlab DEMO + description: Scaffolder Gitlab Demo +spec: + owner: backstage/techdocs-core + type: service + + parameters: + - title: Fill in some steps + required: + - name + properties: + name: + title: Name + type: string + description: Unique name of the component + ui:autofocus: true + ui:options: + rows: 5 + - title: Choose a location + required: + - repoUrl + properties: + repoUrl: + title: Repository Location + type: string + ui:field: RepoUrlPicker + ui:options: + allowedHosts: + - gitlab.com + + steps: + - id: fetch + name: Fetch + action: fetch:template + input: + url: https://github.com/TEMPLATE + values: + name: ${{ parameters.name }} + - id: createGitlabGroup + name: Ensure Gitlab group exists + action: gitlab:group:ensureExists + input: + repoUrl: ${{ parameters.repoUrl }} + path: + - path + - to + - group + + - id: publish + name: Publish + action: publish:gitlab + input: + description: This is ${{ parameters.name }} + repoUrl: ${{ parameters.repoUrl }}?owner=${{ steps.createGitlabGroup.output.groupId }} + sourcePath: pimcore + defaultBranch: main + + - id: gitlab-deploy-token + name: Create Deploy Token + action: gitlab:projectDeployToken:create + input: + repoUrl: ${{ parameters.repoUrl }} + projectId: "${{ steps['publish'].output.projectId }}" + name: ${{ parameters.name }}-secret + username: ${{ parameters.name }}-secret + scopes: ['read_registry'] + + - id: gitlab-access-token + name: Gitlab Project Access Token + action: gitlab:projectAccessToken:create + input: + repoUrl: ${{ parameters.repoUrl }} + projectId: "${{ steps['publish-manifest'].output.projectId }}" + name: ${{ parameters.name }}-access-token + accessLevel: 40 + scopes: ['read_repository', 'write_repository'] + + - id: gitlab-project-variable + name: Gitlab Project Variable + action: gitlab:projectVariable:create + input: + repoUrl: ${{ parameters.repoUrl }} + projectId: "${{ steps['publish'].output.projectId }}" + key: 'VARIABLE_NAME' + value: "${{ steps['gitlab-access-token'].output.access_token }}" + variableType: 'env_var' + masked: true + variableProtected: false + raw: false + environmentScope: '*' + + - id: register + name: Register + action: catalog:register + input: + repoContentsUrl: ${{ steps['publish'].output.repoContentsUrl }} + catalogInfoPath: '/catalog-info.yaml' + + - id: gitlabIssue + name: Issues + action: gitlab:issues:create + input: + repoUrl: ${{ parameters.repoUrl }} + token: ${{ secrets.USER_OAUTH_TOKEN }} + projectId: 1111111 + title: Test Issue + assignees: + - 2222222 + description: This is the description of the issue + confidential: true + createdAt: 2022-09-27 18:00:00.000 + dueDate: 2024-09-28 12:00:00.000 + epicId: 3333333 + labels: phase1:label1,phase2:label2 + output: + links: + - title: Repository + url: ${{ steps['publish'].output.remoteUrl }} + - title: Link to new issue + url: ${{ steps['gitlabIssue'].output.issueUrl }} +``` diff --git a/plugins/scaffolder-backend-module-gitlab/catalog-info.yaml b/plugins/scaffolder-backend-module-gitlab/catalog-info.yaml new file mode 100644 index 0000000..c8af1e7 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/catalog-info.yaml @@ -0,0 +1,9 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: backstage-plugin-scaffolder-backend-module-gitlab + title: '@backstage/plugin-scaffolder-backend-module-gitlab' +spec: + lifecycle: experimental + type: backstage-backend-plugin-module + owner: maintainers diff --git a/plugins/scaffolder-backend-module-gitlab/knip-report.md b/plugins/scaffolder-backend-module-gitlab/knip-report.md new file mode 100644 index 0000000..3e1fc87 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/knip-report.md @@ -0,0 +1,8 @@ +# Knip report + +## Unused dependencies (1) + +| Name | Location | Severity | +| :------ | :----------- | :------- | +| winston | plugins/scaffolder-backend-module-gitlab/package.json | error | + diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json new file mode 100644 index 0000000..e3450e2 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -0,0 +1,62 @@ +{ + "name": "@internal/plugin-scaffolder-backend-module-gitlab", + "version": "0.9.5", + "backstage": { + "role": "backend-plugin-module", + "pluginId": "scaffolder", + "pluginPackage": "@backstage/plugin-scaffolder-backend" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "backstage" + ], + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/scaffolder-backend-module-gitlab" + }, + "license": "Apache-2.0", + "exports": { + ".": "./src/index.ts", + "./package.json": "./package.json" + }, + "main": "src/index.ts", + "types": "src/index.ts", + "typesVersions": { + "*": { + "package.json": [ + "package.json" + ] + } + }, + "files": [ + "dist" + ], + "scripts": { + "build": "backstage-cli package build", + "clean": "backstage-cli package clean", + "lint": "backstage-cli package lint", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack", + "start": "backstage-cli package start", + "test": "backstage-cli package test" + }, + "dependencies": { + "@backstage/backend-plugin-api": "^1.4.0", + "@backstage/config": "^1.3.2", + "@backstage/errors": "^1.2.7", + "@backstage/integration": "^1.20.1", + "@backstage/plugin-scaffolder-node": "^0.12.0", + "@gitbeaker/rest": "^41.2.0", + "luxon": "^3.0.0", + "winston": "^3.2.1", + "yaml": "^2.0.0", + "zod": "^3.22.4" + }, + "devDependencies": { + "@backstage/cli": "^0.35.0" + } +} diff --git a/plugins/scaffolder-backend-module-gitlab/report.api.md b/plugins/scaffolder-backend-module-gitlab/report.api.md new file mode 100644 index 0000000..1c4ce80 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/report.api.md @@ -0,0 +1,322 @@ +## API Report File for "@backstage/plugin-scaffolder-backend-module-gitlab" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; +import { Config } from '@backstage/config'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { TemplateAction } from '@backstage/plugin-scaffolder-node'; + +// @public +export const createGitlabGroupEnsureExistsAction: (options: { + integrations: ScmIntegrationRegistry; +}) => TemplateAction< + { + repoUrl: string; + path: ( + | string + | { + name: string; + slug: string; + } + )[]; + token?: string | undefined; + }, + { + groupId?: number | undefined; + }, + 'v2' +>; + +// @public +export const createGitlabIssueAction: (options: { + integrations: ScmIntegrationRegistry; +}) => TemplateAction< + { + repoUrl: string; + projectId: number; + title: string; + token?: string | undefined; + assignees?: number[] | undefined; + confidential?: boolean | undefined; + description?: string | undefined; + createdAt?: string | undefined; + dueDate?: string | undefined; + discussionToResolve?: string | undefined; + epicId?: number | undefined; + labels?: string | undefined; + issueType?: IssueType | undefined; + mergeRequestToResolveDiscussionsOf?: number | undefined; + milestoneId?: number | undefined; + weight?: number | undefined; + }, + { + issueUrl: string; + issueId: number; + issueIid: number; + }, + 'v2' +>; + +// @public +export const createGitlabProjectAccessTokenAction: (options: { + integrations: ScmIntegrationRegistry; +}) => TemplateAction< + { + projectId: string | number; + repoUrl: string; + token?: string | undefined; + name?: string | undefined; + accessLevel?: number | undefined; + scopes?: string[] | undefined; + expiresAt?: string | undefined; + }, + { + access_token: string; + }, + 'v2' +>; + +// @public +export const createGitlabProjectDeployTokenAction: (options: { + integrations: ScmIntegrationRegistry; +}) => TemplateAction< + { + repoUrl: string; + projectId: string | number; + name: string; + scopes: string[]; + token?: string | undefined; + username?: string | undefined; + }, + { + deploy_token: string; + user: string; + }, + 'v2' +>; + +// @public +export const createGitlabProjectVariableAction: (options: { + integrations: ScmIntegrationRegistry; +}) => TemplateAction< + { + repoUrl: string; + projectId: string | number; + key: string; + value: string; + variableType: string; + token?: string | undefined; + variableProtected?: boolean | undefined; + masked?: boolean | undefined; + raw?: boolean | undefined; + environmentScope?: string | undefined; + }, + { + [x: string]: any; + }, + 'v2' +>; + +// @public +export const createGitlabRepoPushAction: (options: { + integrations: ScmIntegrationRegistry; +}) => TemplateAction< + { + repoUrl: string; + branchName: string; + commitMessage: string; + sourcePath?: string | undefined; + targetPath?: string | undefined; + token?: string | undefined; + commitAction?: 'update' | 'delete' | 'create' | undefined; + }, + { + projectid: string; + projectPath: string; + commitHash: string; + }, + 'v2' +>; + +// @public +export function createPublishGitlabAction(options: { + integrations: ScmIntegrationRegistry; + config: Config; +}): TemplateAction< + { + repoUrl: string; + repoVisibility?: 'internal' | 'private' | 'public' | undefined; + defaultBranch?: string | undefined; + gitCommitMessage?: string | undefined; + gitAuthorName?: string | undefined; + gitAuthorEmail?: string | undefined; + signCommit?: boolean | undefined; + sourcePath?: string | boolean | undefined; + skipExisting?: boolean | undefined; + token?: string | undefined; + setUserAsOwner?: boolean | undefined; + topics?: string[] | undefined; + settings?: + | { + visibility?: 'internal' | 'private' | 'public' | undefined; + path?: string | undefined; + description?: string | undefined; + merge_method?: 'merge' | 'rebase_merge' | 'ff' | undefined; + topics?: string[] | undefined; + auto_devops_enabled?: boolean | undefined; + only_allow_merge_if_pipeline_succeeds?: boolean | undefined; + allow_merge_on_skipped_pipeline?: boolean | undefined; + only_allow_merge_if_all_discussions_are_resolved?: + | boolean + | undefined; + squash_option?: + | 'always' + | 'never' + | 'default_on' + | 'default_off' + | undefined; + ci_config_path?: string | undefined; + } + | undefined; + branches?: + | { + name: string; + ref?: string | undefined; + create?: boolean | undefined; + protect?: boolean | undefined; + }[] + | undefined; + projectVariables?: + | { + key: string; + value: string; + raw?: boolean | undefined; + description?: string | undefined; + protected?: boolean | undefined; + variable_type?: 'file' | 'env_var' | undefined; + masked?: boolean | undefined; + environment_scope?: string | undefined; + }[] + | undefined; + }, + { + remoteUrl: string; + repoContentsUrl: string; + projectId: number; + commitHash: string; + created: boolean; + }, + 'v2' +>; + +// @public +export const createPublishGitlabMergeRequestAction: (options: { + integrations: ScmIntegrationRegistry; +}) => TemplateAction< + { + repoUrl: string; + title: string; + branchName: string; + description?: string | undefined; + targetBranchName?: string | undefined; + sourcePath?: string | undefined; + targetPath?: string | undefined; + token?: string | undefined; + commitAction?: 'auto' | 'update' | 'delete' | 'create' | 'skip' | undefined; + projectid?: string | undefined; + removeSourceBranch?: boolean | undefined; + assignee?: string | undefined; + reviewers?: string[] | undefined; + assignReviewersFromApprovalRules?: boolean | undefined; + labels?: string | string[] | undefined; + }, + { + targetBranchName: string; + projectid: string; + projectPath: string; + mergeRequestUrl: string; + }, + 'v2' +>; + +// @public +export const createTriggerGitlabPipelineAction: (options: { + integrations: ScmIntegrationRegistry; +}) => TemplateAction< + { + repoUrl: string; + projectId: number; + tokenDescription: string; + branch: string; + token?: string | undefined; + variables?: Record | undefined; + }, + { + pipelineUrl: string; + }, + 'v2' +>; + +// @public +export const editGitlabIssueAction: (options: { + integrations: ScmIntegrationRegistry; +}) => TemplateAction< + { + repoUrl: string; + projectId: number; + issueIid: number; + token?: string | undefined; + addLabels?: string | undefined; + assignees?: number[] | undefined; + confidential?: boolean | undefined; + description?: string | undefined; + discussionLocked?: boolean | undefined; + dueDate?: string | undefined; + epicId?: number | undefined; + issueType?: IssueType | undefined; + labels?: string | undefined; + milestoneId?: number | undefined; + removeLabels?: string | undefined; + stateEvent?: IssueStateEvent | undefined; + title?: string | undefined; + updatedAt?: string | undefined; + weight?: number | undefined; + }, + { + issueUrl: string; + projectId: number; + issueId: number; + issueIid: number; + state: string; + title: string; + updatedAt: string; + }, + 'v2' +>; + +// @public +const gitlabModule: BackendFeature; +export default gitlabModule; + +// @public +export enum IssueStateEvent { + // (undocumented) + CLOSE = 'close', + // (undocumented) + REOPEN = 'reopen', +} + +// @public +export enum IssueType { + // (undocumented) + INCIDENT = 'incident', + // (undocumented) + ISSUE = 'issue', + // (undocumented) + TASK = 'task', + // (undocumented) + TEST = 'test_case', +} +``` diff --git a/plugins/scaffolder-backend-module-gitlab/src/__tests__/integration.test.ts b/plugins/scaffolder-backend-module-gitlab/src/__tests__/integration.test.ts new file mode 100644 index 0000000..17bad8e --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/__tests__/integration.test.ts @@ -0,0 +1,398 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +jest.mock('@backstage/plugin-scaffolder-node', () => { + return { + ...jest.requireActual('@backstage/plugin-scaffolder-node'), + initRepoAndPush: jest.fn().mockResolvedValue({ + commitHash: 'abc123def456', + }), + commitAndPushRepo: jest.fn().mockResolvedValue({ + commitHash: 'abc123def456', + }), + }; +}); + +const mockGitlabClient = { + Namespaces: { show: jest.fn() }, + Groups: { allProjects: jest.fn(), show: jest.fn() }, + Projects: { create: jest.fn(), show: jest.fn(), edit: jest.fn() }, + Users: { showCurrentUser: jest.fn(), allProjects: jest.fn() }, + ProjectMembers: { add: jest.fn() }, + Branches: { create: jest.fn() }, + ProtectedBranches: { protect: jest.fn() }, + ProjectVariables: { create: jest.fn() }, + Issues: { create: jest.fn(), edit: jest.fn() }, + Epics: { all: jest.fn() }, + Pipelines: { create: jest.fn() }, + MergeRequests: { create: jest.fn() }, + Repositories: { allRepositoryTrees: jest.fn() }, + RepositoryFiles: { show: jest.fn(), create: jest.fn(), edit: jest.fn() }, + ProjectAccessTokens: { create: jest.fn() }, + ProjectDeployTokens: { create: jest.fn() }, +}; + +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { + createPublishGitlabAction, + createGitlabIssueAction, + createGitlabGroupEnsureExistsAction, + createGitlabRepoPushAction, + createPublishGitlabMergeRequestAction, + createTriggerGitlabPipelineAction, + createGitlabProjectAccessTokenAction, + createGitlabProjectDeployTokenAction, + createGitlabProjectVariableAction, + editGitlabIssueAction, +} from '../actions'; +import { createGitlabProjectMigrateAction } from '../actions/gitlabProjectMigrate'; + +const createTestConfig = () => + new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'test-token', + apiBaseUrl: 'https://gitlab.com/api/v4', + }, + ], + }, + }); + +const createTestIntegrations = (config: ConfigReader) => + ScmIntegrations.fromConfig(config); + +/** + * Creates a minimal mock action context compatible with scaffolder action handlers. + */ +function createMockContext(input: Record) { + const outputs = new Map(); + return { + input, + workspacePath: '/tmp/test-workspace', + logger: { + info: jest.fn(), + warn: jest.fn(), + error: jest.fn(), + debug: jest.fn(), + child: jest.fn().mockReturnThis(), + }, + logStream: { write: jest.fn() }, + output: jest.fn((key: string, value: any) => { + outputs.set(key, value); + }), + getOutputValue: (key: string) => outputs.get(key), + createTemporaryDirectory: jest.fn().mockResolvedValue('/tmp/test-temp'), + checkpoint: jest.fn(), + getInitiatorCredentials: jest.fn().mockResolvedValue({ + $$type: '@backstage/BackstageCredentials', + principal: { type: 'user', userEntityRef: 'user:default/test' }, + }), + each: jest.fn(), + templateInfo: { + entityRef: 'template:default/test-template', + }, + isDryRun: false, + user: { + entity: undefined, + ref: 'user:default/test', + }, + signal: undefined as any, + }; +} + +describe('GitLab Scaffolder Module Integration Tests', () => { + let config: ConfigReader; + let integrations: ReturnType; + + beforeEach(() => { + jest.clearAllMocks(); + config = createTestConfig(); + integrations = createTestIntegrations(config); + }); + + describe('Action Registration', () => { + it('should create all 11 expected scaffolder actions', () => { + const actions = [ + createGitlabGroupEnsureExistsAction({ integrations }), + createGitlabProjectMigrateAction({ integrations }), + createGitlabIssueAction({ integrations }), + createGitlabProjectAccessTokenAction({ integrations }), + createGitlabProjectDeployTokenAction({ integrations }), + createGitlabProjectVariableAction({ integrations }), + createGitlabRepoPushAction({ integrations }), + editGitlabIssueAction({ integrations }), + createPublishGitlabAction({ config, integrations }), + createPublishGitlabMergeRequestAction({ integrations }), + createTriggerGitlabPipelineAction({ integrations }), + ]; + + expect(actions).toHaveLength(11); + }); + + it('should assign correct action IDs to each action', () => { + const expectedIds = [ + 'gitlab:group:ensureExists', + 'gitlab:group:migrate', + 'gitlab:issues:create', + 'gitlab:projectAccessToken:create', + 'gitlab:projectDeployToken:create', + 'gitlab:projectVariable:create', + 'gitlab:repo:push', + 'gitlab:issue:edit', + 'publish:gitlab', + 'publish:gitlab:merge-request', + 'gitlab:pipeline:trigger', + ]; + + const actions = [ + createGitlabGroupEnsureExistsAction({ integrations }), + createGitlabProjectMigrateAction({ integrations }), + createGitlabIssueAction({ integrations }), + createGitlabProjectAccessTokenAction({ integrations }), + createGitlabProjectDeployTokenAction({ integrations }), + createGitlabProjectVariableAction({ integrations }), + createGitlabRepoPushAction({ integrations }), + editGitlabIssueAction({ integrations }), + createPublishGitlabAction({ config, integrations }), + createPublishGitlabMergeRequestAction({ integrations }), + createTriggerGitlabPipelineAction({ integrations }), + ]; + + const actionIds = actions.map(a => a.id); + expect(actionIds).toEqual(expect.arrayContaining(expectedIds)); + expect(actionIds).toHaveLength(expectedIds.length); + }); + + it('should create actions with handler functions', () => { + const actions = [ + createGitlabGroupEnsureExistsAction({ integrations }), + createGitlabProjectMigrateAction({ integrations }), + createGitlabIssueAction({ integrations }), + createPublishGitlabAction({ config, integrations }), + ]; + + for (const action of actions) { + expect(typeof action.handler).toBe('function'); + } + }); + }); + + describe('Repository Creation Workflow', () => { + it('should create publish:gitlab action with correct id', () => { + const action = createPublishGitlabAction({ integrations, config }); + expect(action.id).toBe('publish:gitlab'); + }); + + it('should process valid parameters and produce outputs', async () => { + const action = createPublishGitlabAction({ integrations, config }); + + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + id: 999, + http_url_to_repo: 'https://gitlab.com/test-group/test-repo.git', + }); + + const ctx = createMockContext({ + repoUrl: 'gitlab.com?repo=test-repo&owner=test-group', + repoVisibility: 'private', + }); + + await action.handler(ctx as any); + + expect(ctx.output).toHaveBeenCalledWith( + 'remoteUrl', + 'https://gitlab.com/test-group/test-repo', + ); + expect(ctx.output).toHaveBeenCalledWith('projectId', 999); + expect(ctx.output).toHaveBeenCalledWith('commitHash', 'abc123def456'); + expect(ctx.output).toHaveBeenCalledWith('created', true); + }); + + it('should call GitLab APIs in correct order for group-owned repos', async () => { + const action = createPublishGitlabAction({ integrations, config }); + + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + id: 999, + http_url_to_repo: 'https://gitlab.com/my-group/my-repo.git', + }); + + const ctx = createMockContext({ + repoUrl: 'gitlab.com?repo=my-repo&owner=my-group', + }); + + await action.handler(ctx as any); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith( + 'my-group', + ); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith( + expect.objectContaining({ + namespaceId: 1234, + name: 'my-repo', + }), + ); + }); + }); + + describe('Parameter Validation', () => { + it('should throw when repoUrl is missing owner', async () => { + const action = createPublishGitlabAction({ integrations, config }); + const ctx = createMockContext({ + repoUrl: 'gitlab.com?repo=test-repo', + }); + + await expect(action.handler(ctx as any)).rejects.toThrow(/missing owner/); + }); + + it('should throw when repoUrl is missing repo', async () => { + const action = createPublishGitlabAction({ integrations, config }); + const ctx = createMockContext({ + repoUrl: 'gitlab.com?owner=test-owner', + }); + + await expect(action.handler(ctx as any)).rejects.toThrow(/missing repo/); + }); + + it('should throw when no integration config matches the host', async () => { + const action = createPublishGitlabAction({ integrations, config }); + const ctx = createMockContext({ + repoUrl: 'unknown-host.com?repo=test-repo&owner=test-owner', + }); + + await expect(action.handler(ctx as any)).rejects.toThrow( + /No matching integration configuration/, + ); + }); + + it('should throw when no token is available for the host', async () => { + const noTokenConfig = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'no-token.gitlab.com', + apiBaseUrl: 'https://no-token.gitlab.com/api/v4', + }, + ], + }, + }); + const noTokenIntegrations = ScmIntegrations.fromConfig(noTokenConfig); + const action = createPublishGitlabAction({ + integrations: noTokenIntegrations, + config: noTokenConfig, + }); + + const ctx = createMockContext({ + repoUrl: 'no-token.gitlab.com?repo=test-repo&owner=test-owner', + }); + + await expect(action.handler(ctx as any)).rejects.toThrow( + /No token available/, + ); + }); + }); + + describe('GitLab API Error Handling', () => { + it('should handle namespace not found (404) errors', async () => { + const action = createPublishGitlabAction({ integrations, config }); + + const notFoundError: any = new Error('Not Found'); + notFoundError.cause = { response: { status: 404 } }; + mockGitlabClient.Namespaces.show.mockRejectedValue(notFoundError); + + const ctx = createMockContext({ + repoUrl: 'gitlab.com?repo=test-repo&owner=nonexistent-group', + }); + + await expect(action.handler(ctx as any)).rejects.toThrow( + /not found|doesn't have permissions/, + ); + }); + + it('should propagate unexpected API errors', async () => { + const action = createPublishGitlabAction({ integrations, config }); + + mockGitlabClient.Namespaces.show.mockRejectedValue( + new Error('Internal Server Error'), + ); + + const ctx = createMockContext({ + repoUrl: 'gitlab.com?repo=test-repo&owner=test-group', + }); + + await expect(action.handler(ctx as any)).rejects.toThrow( + 'Internal Server Error', + ); + }); + + it('should handle project creation failure', async () => { + const action = createPublishGitlabAction({ integrations, config }); + + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockRejectedValue( + new Error('403 Forbidden'), + ); + + const ctx = createMockContext({ + repoUrl: 'gitlab.com?repo=test-repo&owner=test-group', + }); + + await expect(action.handler(ctx as any)).rejects.toThrow( + '403 Forbidden', + ); + }); + + it('should handle network timeout errors', async () => { + const action = createPublishGitlabAction({ integrations, config }); + + mockGitlabClient.Namespaces.show.mockRejectedValue( + new Error('ETIMEDOUT'), + ); + + const ctx = createMockContext({ + repoUrl: 'gitlab.com?repo=test-repo&owner=test-group', + }); + + await expect(action.handler(ctx as any)).rejects.toThrow('ETIMEDOUT'); + }); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.examples.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.examples.test.ts new file mode 100644 index 0000000..074d248 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.examples.test.ts @@ -0,0 +1,120 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import yaml from 'yaml'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; + +jest.mock('@backstage/plugin-scaffolder-node', () => { + return { + ...jest.requireActual('@backstage/plugin-scaffolder-node'), + initRepoAndPush: jest.fn().mockResolvedValue({ + commitHash: '220f19cc36b551763d157f1b5e4a4b446165dbd6', + }), + commitAndPushRepo: jest.fn().mockResolvedValue({ + commitHash: '220f19cc36b551763d157f1b5e4a4b446165dbd6', + }), + }; +}); + +import { createPublishGitlabAction } from './gitlab'; +import { initRepoAndPush } from '@backstage/plugin-scaffolder-node'; +import { ScmIntegrations } from '@backstage/integration'; +import { ConfigReader } from '@backstage/config'; +import { examples } from './gitlab.examples'; + +const mockGitlabClient = { + Namespaces: { + show: jest.fn(), + }, + Groups: { + allProjects: jest.fn(), + }, + Projects: { + create: jest.fn(), + }, + Users: { + showCurrentUser: jest.fn(), + }, + ProjectMembers: { + add: jest.fn(), + }, +}; +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('publish:gitlab', () => { + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + const action = createPublishGitlabAction({ integrations, config }); + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + }, + }); + + beforeEach(() => { + jest.resetAllMocks(); + // Reconfigure the mock after reset + ( + initRepoAndPush as jest.MockedFunction + ).mockResolvedValue({ + commitHash: '220f19cc36b551763d157f1b5e4a4b446165dbd6', + }); + }); + + it('should call initRepoAndPush with the correct values', async () => { + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[0].example).steps[0].input, + }); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + defaultBranch: 'master', + remoteUrl: 'http://mockurl.git', + auth: { username: 'oauth2', password: 'tokenlols' }, + logger: mockContext.logger, + commitMessage: 'initial commit', + gitAuthorInfo: {}, + }); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.examples.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.examples.ts new file mode 100644 index 0000000..ea2ff41 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.examples.ts @@ -0,0 +1,224 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; + +export const examples: TemplateExample[] = [ + { + description: + 'Initializes a git repository with the content in the workspace, and publishes it to GitLab with the default configuration.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + }, + }, + ], + }), + }, + { + description: 'Add a description.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + description: 'Initialize a git repository', + }, + }, + ], + }), + }, + { + description: + 'Initializes a GitLab repository with an initial commit message, if not set defaults to `initial commit`.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + description: 'Initialize a git repository', + gitCommitMessage: 'Started a project.', + }, + }, + ], + }), + }, + { + description: 'Initializes a GitLab repository with additional settings.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + settings: { + ci_config_path: '.gitlab-ci.yml', + visibility: 'public', + }, + }, + }, + ], + }), + }, + { + description: + 'Initializes a GitLab repository with fast forward merge and always squash settings.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + settings: { + merge_method: 'ff', + squash_option: 'always', + }, + }, + }, + ], + }), + }, + { + description: 'Initializes a GitLab repository with branch settings.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + branches: [ + { + name: 'dev', + create: true, + protect: true, + ref: 'master', + }, + { + name: 'master', + protect: true, + }, + ], + }, + }, + ], + }), + }, + { + description: 'Initializes a GitLab repository with environment variables.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + projectVariables: [ + { + key: 'key1', + value: 'value1', + protected: true, + masked: false, + }, + { + key: 'key2', + value: 'value2', + protected: true, + masked: false, + }, + ], + }, + }, + ], + }), + }, + { + description: + 'Initializes a GitLab repository with pipeline must succeed and allow merge on skipped pipeline settings.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + settings: { + only_allow_merge_if_pipeline_succeeds: true, + allow_merge_on_skipped_pipeline: true, + }, + }, + }, + ], + }), + }, + { + description: + 'Initializes a GitLab repository with setting to require all threads (discussions) on merge request to be resolved before merging.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + settings: { + only_allow_merge_if_all_discussions_are_resolved: true, + }, + }, + }, + ], + }), + }, + { + description: + 'Initializes a GitLab repository with the default readme and no files from workspace only if this repository does not exist yet.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + skipExisting: true, + initialize_with_readme: true, + sourcePath: false, + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.test.ts new file mode 100644 index 0000000..923a98c --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.test.ts @@ -0,0 +1,810 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +jest.mock('@backstage/plugin-scaffolder-node', () => { + const mockResult = { + commitHash: '220f19cc36b551763d157f1b5e4a4b446165dbd6', + }; + return { + ...jest.requireActual('@backstage/plugin-scaffolder-node'), + initRepoAndPush: jest.fn().mockResolvedValue(mockResult), + commitAndPushRepo: jest.fn().mockResolvedValue(mockResult), + }; +}); + +import { createPublishGitlabAction } from './gitlab'; +import { ScmIntegrations } from '@backstage/integration'; +import { ConfigReader } from '@backstage/config'; +import { initRepoAndPush } from '@backstage/plugin-scaffolder-node'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; + +// Ensure the mock is properly typed +const mockInitRepoAndPush = initRepoAndPush as jest.MockedFunction< + typeof initRepoAndPush +>; + +const mockGitlabClient = { + Namespaces: { + show: jest.fn(), + }, + Groups: { + allProjects: jest.fn(), + }, + Projects: { + create: jest.fn(), + }, + Users: { + showCurrentUser: jest.fn(), + allProjects: jest.fn(), + }, + ProjectMembers: { + add: jest.fn(), + }, + Branches: { + create: jest.fn(), + }, + ProtectedBranches: { + protect: jest.fn(), + }, + ProjectVariables: { + create: jest.fn(), + }, +}; +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('publish:gitlab', () => { + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + commitSigningKey: 'test-signing-key', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + const action = createPublishGitlabAction({ integrations, config }); + + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + repoVisibility: 'private' as const, + settings: { + ci_config_path: '.gitlab-ci.yml', + }, + }, + }); + const mockContextWithSettings = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + repoVisibility: 'private' as const, + topics: ['topic'], + settings: { + ci_config_path: '.gitlab-ci.yml', + visibility: 'internal' as const, + topics: ['topic1', 'topic2'], + }, + }, + }); + const mockContextWithBranches = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + repoVisibility: 'private' as const, + branches: [ + { + name: 'dev', + create: true, + ref: 'master', + protect: true, + }, + { + name: 'stage', + create: true, + }, + { + name: 'perf', + protect: true, + }, + ], + }, + }); + const mockContextWithVariables = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + repoVisibility: 'private' as const, + projectVariables: [ + { + key: 'key', + value: 'value', + description: 'description', + protected: true, + masked: true, + }, + ], + }, + }); + + beforeEach(() => { + jest.resetAllMocks(); + // Reconfigure the mock after reset + mockInitRepoAndPush.mockResolvedValue({ + commitHash: '220f19cc36b551763d157f1b5e4a4b446165dbd6', + }); + }); + + it('should throw an error when the repoUrl is not well formed', async () => { + await expect( + action.handler({ + ...mockContext, + input: { repoUrl: 'gitlab.com?repo=bob' }, + }), + ).rejects.toThrow(/missing owner/); + + await expect( + action.handler({ + ...mockContext, + input: { repoUrl: 'gitlab.com?owner=owner' }, + }), + ).rejects.toThrow(/missing repo/); + }); + + it('should throw if there is no integration config provided', async () => { + await expect( + action.handler({ + ...mockContext, + input: { repoUrl: 'missing.com?repo=bob&owner=owner' }, + }), + ).rejects.toThrow(/No matching integration configuration/); + }); + + it('should throw if there is no token in the integration config that is returned', async () => { + await expect( + action.handler({ + ...mockContext, + input: { + repoUrl: 'hosted.gitlab.com?repo=bob&owner=owner', + }, + }), + ).rejects.toThrow(/No token available for host/); + }); + + it('should work when there is a token provided through ctx.input', async () => { + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler({ + ...mockContext, + input: { + repoUrl: 'hosted.gitlab.com?repo=bob&owner=owner', + token: 'token', + }, + }); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ + namespaceId: 1234, + name: 'bob', + visibility: 'private', + }); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.ProtectedBranches.protect).not.toHaveBeenCalled(); + }); + + it('should call the correct Gitlab APIs when the owner is a group', async () => { + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler(mockContext); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ + namespaceId: 1234, + name: 'repo', + visibility: 'private', + ci_config_path: '.gitlab-ci.yml', + }); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.ProtectedBranches.protect).not.toHaveBeenCalled(); + }); + + it('should call the correct Gitlab APIs when the owner is a user', async () => { + mockGitlabClient.Namespaces.show.mockResolvedValue({ id: null }); + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Groups.allProjects.mockRejectedValue({}); + mockGitlabClient.Users.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler(mockContext); + + expect(mockGitlabClient.Groups.allProjects).not.toHaveBeenCalled(); + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ + namespaceId: 12345, + name: 'repo', + visibility: 'private', + ci_config_path: '.gitlab-ci.yml', + }); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.ProtectedBranches.protect).not.toHaveBeenCalled(); + }); + + it('should not call the creation Gitlab APIs when the repository already exists in a group', async () => { + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([ + { + path: 'repo', + http_url_to_repo: 'http://mockurl.git', + }, + { + path: 'repo-name', + http_url_to_repo: 'http://mockurl.git', + }, + ]); + + await action.handler({ + ...mockContext, + input: { ...mockContext.input, skipExisting: true }, + }); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Projects.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.ProtectedBranches.protect).not.toHaveBeenCalled(); + }); + + it('should not call the creation Gitlab APIs when the repository already exists in a user namespace', async () => { + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 12345, + kind: 'user', + }); + mockGitlabClient.Users.allProjects.mockResolvedValue([ + { + path: 'repo', + http_url_to_repo: 'http://mockurl.git', + }, + { + path: 'repo-name', + http_url_to_repo: 'http://mockurl.git', + }, + ]); + + await action.handler({ + ...mockContext, + input: { ...mockContext.input, skipExisting: true }, + }); + + expect(mockGitlabClient.Groups.allProjects).not.toHaveBeenCalled(); + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Projects.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.ProtectedBranches.protect).not.toHaveBeenCalled(); + }); + + it('should call the creation Gitlab APIs when the repository does not yet exists', async () => { + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([ + { + path: 'repo-name', + }, + ]); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler(mockContext); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ + namespaceId: 1234, + name: 'repo', + visibility: 'private', + ci_config_path: '.gitlab-ci.yml', + }); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.ProtectedBranches.protect).not.toHaveBeenCalled(); + }); + + it('should call the correct Gitlab APIs when using project settings with override of visibility and topics', async () => { + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler(mockContextWithSettings); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ + namespaceId: 1234, + name: 'repo', + visibility: 'internal', + topics: ['topic1', 'topic2'], + ci_config_path: '.gitlab-ci.yml', + }); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.ProtectedBranches.protect).not.toHaveBeenCalled(); + }); + + it('should call the correct Gitlab APIs for branches and protectd branches when branch settings provided', async () => { + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + id: 123456, + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler(mockContextWithBranches); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ + namespaceId: 1234, + name: 'repo', + visibility: 'private', + }); + expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(2); + expect(mockGitlabClient.ProtectedBranches.protect).toHaveBeenCalledTimes(2); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 123456, + 'dev', + 'master', + ); + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 123456, + 'stage', + 'master', + ); + + expect(mockGitlabClient.ProtectedBranches.protect).toHaveBeenCalledWith( + 123456, + 'dev', + ); + expect(mockGitlabClient.ProtectedBranches.protect).toHaveBeenCalledWith( + 123456, + 'perf', + ); + }); + + it('should call the correct Gitlab APIs for variables when their configuration is provided', async () => { + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + id: 123456, + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler(mockContextWithVariables); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ + namespaceId: 1234, + name: 'repo', + visibility: 'private', + }); + + expect(mockGitlabClient.ProjectVariables.create).toHaveBeenCalledWith( + 123456, + 'key', + 'value', + { + description: 'description', + variableType: 'env_var', + protected: true, + masked: true, + raw: false, + environmentScope: '*', + }, + ); + }); + + it('should call initRepoAndPush with the correct values', async () => { + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler(mockContext); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + defaultBranch: 'master', + remoteUrl: 'http://mockurl.git', + auth: { username: 'oauth2', password: 'tokenlols' }, + logger: mockContext.logger, + commitMessage: 'initial commit', + gitAuthorInfo: {}, + }); + }); + + it('should call initRepoAndPush with the signing key', async () => { + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler({ + ...mockContext, + input: { ...mockContext.input, signCommit: true }, + }); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + defaultBranch: 'master', + remoteUrl: 'http://mockurl.git', + auth: { username: 'oauth2', password: 'tokenlols' }, + logger: mockContext.logger, + commitMessage: 'initial commit', + gitAuthorInfo: {}, + signingKey: 'test-signing-key', + }); + }); + + it('should not call initRepoAndPush when sourcePath is false', async () => { + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler({ + ...mockContext, + input: { ...mockContext.input, sourcePath: false }, + }); + + expect(initRepoAndPush).not.toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + defaultBranch: 'master', + remoteUrl: 'http://mockurl.git', + auth: { username: 'oauth2', password: 'tokenlols' }, + logger: mockContext.logger, + commitMessage: 'initial commit', + gitAuthorInfo: {}, + }); + }); + + it('should call initRepoAndPush with the correct default branch', async () => { + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + defaultBranch: 'main', + }, + }); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + defaultBranch: 'main', + remoteUrl: 'http://mockurl.git', + auth: { username: 'oauth2', password: 'tokenlols' }, + logger: mockContext.logger, + commitMessage: 'initial commit', + gitAuthorInfo: {}, + }); + }); + + it('should call initRepoAndPush with the configured defaultAuthor', async () => { + const customAuthorConfig = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + scaffolder: { + defaultAuthor: { + name: 'Test', + email: 'example@example.com', + }, + }, + }); + + const customAuthorIntegrations = + ScmIntegrations.fromConfig(customAuthorConfig); + const customAuthorAction = createPublishGitlabAction({ + integrations: customAuthorIntegrations, + config: customAuthorConfig, + }); + + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await customAuthorAction.handler(mockContext); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'http://mockurl.git', + auth: { username: 'oauth2', password: 'tokenlols' }, + logger: mockContext.logger, + defaultBranch: 'master', + commitMessage: 'initial commit', + gitAuthorInfo: { name: 'Test', email: 'example@example.com' }, + }); + }); + + it('should call initRepoAndPush with the configured defaultCommitMessage', async () => { + const customAuthorConfig = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + scaffolder: { + defaultCommitMessage: 'Test commit message', + }, + }); + + const customAuthorIntegrations = + ScmIntegrations.fromConfig(customAuthorConfig); + const customAuthorAction = createPublishGitlabAction({ + integrations: customAuthorIntegrations, + config: customAuthorConfig, + }); + + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await customAuthorAction.handler(mockContext); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'http://mockurl.git', + auth: { username: 'oauth2', password: 'tokenlols' }, + defaultBranch: 'master', + commitMessage: 'initial commit', + gitAuthorInfo: { email: undefined, name: undefined }, + logger: mockContext.logger, + }); + }); + + it('should call output with the remoteUrl and repoContentsUrl and projectId', async () => { + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + id: 1234, + }); + + await action.handler(mockContext); + + expect(mockContext.output).toHaveBeenCalledWith( + 'remoteUrl', + 'http://mockurl', + ); + expect(mockContext.output).toHaveBeenCalledWith( + 'repoContentsUrl', + 'http://mockurl/-/blob/master', + ); + expect(mockContext.output).toHaveBeenCalledWith('projectId', 1234); + }); + + it('should call the correct Gitlab APIs when setUserAsOwner option is true and integration config has a token', async () => { + const customAuthorConfig = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + ], + }, + }); + + const customAuthorIntegrations = + ScmIntegrations.fromConfig(customAuthorConfig); + const customAuthorAction = createPublishGitlabAction({ + integrations: customAuthorIntegrations, + config: customAuthorConfig, + }); + + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + id: 123456, + http_url_to_repo: 'http://mockurl.git', + }); + + await customAuthorAction.handler({ + ...mockContext, + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + token: 'token', + setUserAsOwner: true, + }, + }); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Users.showCurrentUser).toHaveBeenCalled(); + expect(mockGitlabClient.ProjectMembers.add).toHaveBeenCalledWith( + 123456, + 12345, + 50, + ); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ + namespaceId: 1234, + name: 'repo', + visibility: 'private', + }); + }); + + it('should use custom git implementation when useCustomGit is true', async () => { + // Mock the customGitPush function by spying on the module + const mockCustomGitPush = jest.fn().mockResolvedValue({ + commitHash: '220f19cc36b551763d157f1b5e4a4b446165dbd6', + }); + + // Mock child_process.spawn to avoid actual git execution + jest.doMock('child_process', () => ({ + spawn: jest.fn().mockImplementation(() => { + const mockProcess = { + stdout: { on: jest.fn() }, + stderr: { on: jest.fn() }, + on: jest.fn((event, callback) => { + if (event === 'close') { + setTimeout(() => callback(0), 0); + } + }), + }; + return mockProcess; + }), + })); + + mockGitlabClient.Users.showCurrentUser.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ + id: 1234, + kind: 'group', + }); + mockGitlabClient.Groups.allProjects.mockResolvedValue([]); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + useCustomGit: true, + }, + }); + + // Verify that initRepoAndPush was NOT called (since we're using custom git) + expect(initRepoAndPush).not.toHaveBeenCalled(); + }); + + it('should show proper error message when token has insufficient permissions or namespace not found', async () => { + mockGitlabClient.Namespaces.show.mockRejectedValue({ + cause: { + response: { + status: 404, + }, + }, + }); + const owner = 'infrastructure/devex'; + const repoName = 'backstage'; + + await expect( + action.handler({ + ...mockContext, + input: { repoUrl: `gitlab.com?owner=${owner}&repo=${repoName}` }, + }), + ).rejects.toThrow( + `The namespace ${owner} is not found or the user doesn't have permissions to access it`, + ); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.ts new file mode 100644 index 0000000..d611b3d --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.ts @@ -0,0 +1,771 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { InputError } from '@backstage/errors'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { + createTemplateAction, + getRepoSourceDirectory, + initRepoAndPush, + parseRepoUrl, +} from '@backstage/plugin-scaffolder-node'; +import { Gitlab, VariableType } from '@gitbeaker/rest'; +import { Config } from '@backstage/config'; +import { LoggerService } from '@backstage/backend-plugin-api'; +import { examples } from './gitlab.examples'; + +/** + * Custom Git implementation using child_process to bypass HTTP client timeout issues + */ +async function customGitPush(input: { + dir: string; + remoteUrl: string; + auth: { username: string; password: string } | { token: string }; + logger: LoggerService; + defaultBranch?: string; + commitMessage?: string; + gitAuthorInfo?: { name?: string; email?: string }; + timeout?: number; +}): Promise<{ commitHash: string }> { + const { + dir, + remoteUrl, + auth, + logger, + defaultBranch = 'master', + commitMessage = 'Initial commit', + gitAuthorInfo, + timeout = 60, + } = input; + + const { spawn } = require('child_process'); + + logger.info(`Starting git operation with ${timeout}s timeout`); + + const runGitCommand = ( + args: string[], + options: any = {}, + ): Promise => { + return new Promise((resolve, reject) => { + logger.info(`Running git command: git ${args.join(' ')}`); + + const gitProcess = spawn('git', args, { + cwd: dir, + stdio: ['pipe', 'pipe', 'pipe'], + env: { ...process.env, GIT_TERMINAL_PROMPT: '0' }, + ...options, + }); + + let stdout = ''; + let stderr = ''; + + gitProcess.stdout?.on('data', (data: any) => { + stdout += data.toString(); + }); + + gitProcess.stderr?.on('data', (data: any) => { + stderr += data.toString(); + }); + + gitProcess.on('close', (code: number | null) => { + if (code === 0) { + resolve(stdout.trim()); + } else { + reject( + new Error( + `Git command failed (exit code ${code}): ${stderr || stdout}`, + ), + ); + } + }); + + gitProcess.on('error', (error: any) => { + reject(new Error(`Git command error: ${error.message}`)); + }); + + const timeoutId = setTimeout(() => { + gitProcess.kill('SIGKILL'); + reject(new Error(`Git command timed out after ${timeout} seconds`)); + }, timeout * 1000); + + gitProcess.on('close', () => { + clearTimeout(timeoutId); + }); + }); + }; + + try { + await runGitCommand(['init', '-b', defaultBranch]); + + const authorName = gitAuthorInfo?.name || 'Scaffolder'; + const authorEmail = gitAuthorInfo?.email || 'scaffolder@backstage.io'; + + await runGitCommand(['config', 'user.name', authorName]); + await runGitCommand(['config', 'user.email', authorEmail]); + await runGitCommand(['config', 'http.timeout', String(timeout)]); + await runGitCommand(['config', 'http.lowSpeedLimit', '1000']); + await runGitCommand(['config', 'http.lowSpeedTime', String(timeout)]); + + const authUrl = + 'token' in auth + ? remoteUrl.replace(/^https?:\/\//, `https://oauth2:${auth.token}@`) + : remoteUrl.replace( + /^https?:\/\//, + `https://${auth.username}:${auth.password}@`, + ); + + await runGitCommand(['remote', 'add', 'origin', authUrl]); + await runGitCommand(['add', '.']); + + const commitOutput = await runGitCommand(['commit', '-m', commitMessage]); + const commitHash = + commitOutput.match(/\[.+?\s([a-f0-9]+)\]/)?.[1] || 'unknown'; + + await runGitCommand(['push', '-u', 'origin', defaultBranch]); + + logger.info('Git operation completed successfully'); + return { commitHash }; + } catch (error: any) { + logger.error(`Git operation failed: ${error.message}`); + throw error; + } +} + +/** + * Wrapper that chooses between original and custom git implementation + */ +async function initRepoAndPushWithTimeout(input: { + dir: string; + remoteUrl: string; + auth: { username: string; password: string } | { token: string }; + logger: LoggerService; + defaultBranch?: string; + commitMessage?: string; + gitAuthorInfo?: { name?: string; email?: string }; + signingKey?: string; + timeout?: number; + useCustomGit?: boolean; +}): Promise<{ commitHash: string }> { + const { timeout = 60, useCustomGit = false, ...restInput } = input; + + if (useCustomGit) { + return customGitPush({ ...restInput, timeout }); + } + + // Original implementation with timeout wrapper (default behavior) + // Remove timeout and useCustomGit from input as initRepoAndPush doesn't expect them + const originalInput = { + dir: input.dir, + remoteUrl: input.remoteUrl, + auth: input.auth, + logger: input.logger, + defaultBranch: input.defaultBranch, + commitMessage: input.commitMessage, + gitAuthorInfo: input.gitAuthorInfo, + signingKey: input.signingKey, + }; + + return new Promise((resolve, reject) => { + const timeoutId = setTimeout(() => { + reject( + new Error(`Git push operation timed out after ${timeout} seconds`), + ); + }, timeout * 1000); + + const result = initRepoAndPush(originalInput); + + result + .then(gitResult => { + clearTimeout(timeoutId); + resolve(gitResult); + }) + .catch((error: any) => { + clearTimeout(timeoutId); + reject(error); + }); + }); +} + +/** + * Creates a new action that initializes a git repository of the content in the workspace + * and publishes it to GitLab. + * + * @public + */ +export function createPublishGitlabAction(options: { + integrations: ScmIntegrationRegistry; + config: Config; +}) { + const { integrations, config } = options; + + return createTemplateAction({ + id: 'publish:gitlab', + description: + 'Initializes a git repository of the content in the workspace, and publishes it to GitLab.', + examples, + schema: { + input: { + repoUrl: z => + z.string({ + description: `Accepts the format 'gitlab.com?repo=project_name&owner=group_name' where 'project_name' is the repository name and 'group_name' is a group or username`, + }), + repoVisibility: z => + z + .enum(['private', 'public', 'internal'], { + description: `Sets the visibility of the repository. The default value is 'private'. (deprecated, use settings.visibility instead)`, + }) + .optional(), + defaultBranch: z => + z + .string({ + description: `Sets the default branch on the repository. The default value is 'master'`, + }) + .optional(), + gitCommitMessage: z => + z + .string({ + description: `Sets the commit message on the repository. The default value is 'initial commit'`, + }) + .optional(), + gitAuthorName: z => + z + .string({ + description: `Sets the default author name for the commit. The default value is 'Scaffolder'`, + }) + .optional(), + gitAuthorEmail: z => + z + .string({ + description: `Sets the default author email for the commit.`, + }) + .optional(), + signCommit: z => + z + .boolean({ + description: 'Sign commit with configured PGP private key', + }) + .optional(), + sourcePath: z => + z + .union([z.string(), z.boolean()], { + description: + 'Path within the workspace that will be used as the repository root. If omitted or set to true, the entire workspace will be published as the repository. If set to false, the created repository will be empty.', + }) + .optional(), + skipExisting: z => + z + .boolean({ + description: + 'Do not publish the repository if it already exists. The default value is false.', + }) + .optional(), + token: z => + z + .string({ + description: 'The token to use for authorization to GitLab', + }) + .optional(), + gitTimeout: z => + z + .number({ + description: + 'Timeout in seconds for git operations (default: 60)', + }) + .optional(), + setUserAsOwner: z => + z + .boolean({ + description: + 'Set the token user as owner of the newly created repository. Requires a token authorized to do the edit in the integration configuration for the matching host', + }) + .optional(), + topics: z => + z + .array(z.string(), { + description: + 'Topic labels to apply on the repository. (deprecated, use settings.topics instead)', + }) + .optional(), + settings: z => + z + .object({ + path: z + .string({ + description: + 'Repository name for new project. Generated based on name if not provided (generated as lowercase with dashes).', + }) + .optional(), + auto_devops_enabled: z + .boolean({ + description: 'Enable Auto DevOps for this project', + }) + .optional(), + ci_config_path: z + .string({ + description: 'Custom CI config path for this project', + }) + .optional(), + description: z + .string({ + description: 'Short project description', + }) + .optional(), + merge_method: z + .enum(['merge', 'rebase_merge', 'ff'], { + description: 'Merge Methods (merge, rebase_merge, ff)', + }) + .optional(), + squash_option: z + .enum(['default_off', 'default_on', 'never', 'always'], { + description: + 'Set squash option for the project (never, always, default_on, default_off)', + }) + .optional(), + topics: z + .array(z.string(), { + description: 'Topic labels to apply on the repository', + }) + .optional(), + visibility: z + .enum(['private', 'public', 'internal'], { + description: + 'The visibility of the project. Can be private, internal, or public. The default value is private.', + }) + .optional(), + only_allow_merge_if_all_discussions_are_resolved: z + .boolean({ + description: + 'Set whether merge requests can only be merged when all the discussions are resolved.', + }) + .optional(), + only_allow_merge_if_pipeline_succeeds: z + .boolean({ + description: + 'Set whether merge requests can only be merged with successful pipelines. This setting is named Pipelines must succeed in the project settings.', + }) + .optional(), + allow_merge_on_skipped_pipeline: z + .boolean({ + description: + 'Set whether or not merge requests can be merged with skipped jobs.', + }) + .optional(), + }) + .optional(), + branches: z => + z + .array( + z.object({ + name: z.string(), + protect: z.boolean().optional(), + create: z.boolean().optional(), + ref: z.string().optional(), + }), + ) + .optional(), + projectVariables: z => + z + .array( + z.object({ + key: z.string(), + value: z.string(), + description: z.string().optional(), + variable_type: z.enum(['env_var', 'file']).optional(), + protected: z.boolean().optional(), + masked: z.boolean().optional(), + raw: z.boolean().optional(), + environment_scope: z.string().optional(), + }), + ) + .optional(), + useCustomGit: z => + z + .boolean({ + description: + 'Use custom git implementation to avoid HTTP client timeout issues. Defaults to false for backward compatibility.', + }) + .optional(), + }, + output: { + remoteUrl: z => + z.string({ + description: 'A URL to the repository with the provider', + }), + repoContentsUrl: z => + z.string({ + description: 'A URL to the root of the repository', + }), + projectId: z => + z.number({ + description: 'The ID of the project', + }), + commitHash: z => + z.string({ + description: 'The git commit hash of the initial commit', + }), + created: z => + z.boolean({ + description: 'Whether the repository was created or not', + }), + }, + }, + async handler(ctx) { + const { + repoUrl, + repoVisibility = 'private', + defaultBranch = 'master', + gitCommitMessage = 'initial commit', + gitAuthorName, + gitAuthorEmail, + setUserAsOwner = false, + topics = [], + settings = {}, + branches = [], + projectVariables = [], + skipExisting = false, + signCommit, + gitTimeout = 60, + useCustomGit = false, + } = ctx.input; + const { owner, repo, host } = parseRepoUrl(repoUrl, integrations); + + if (!owner) { + throw new InputError( + `No owner provided for host: ${host}, and repo ${repo}`, + ); + } + + const integrationConfig = integrations.gitlab.byHost(host); + + if (!integrationConfig) { + throw new InputError( + `No matching integration configuration for host ${host}, please check your integrations config`, + ); + } + + if (!integrationConfig.config.token && !ctx.input.token) { + throw new InputError(`No token available for host ${host}`); + } + + const token = ctx.input.token || integrationConfig.config.token!; + const tokenType = ctx.input.token ? 'oauthToken' : 'token'; + + const client = new Gitlab({ + host: integrationConfig.config.baseUrl, + [tokenType]: token, + }); + + let targetNamespaceId; + let targetNamespaceKind; + try { + const namespaceResponse = (await client.Namespaces.show(owner)) as { + id: number; + kind: string; + }; + + targetNamespaceId = namespaceResponse.id; + targetNamespaceKind = namespaceResponse.kind; + } catch (e: any) { + if (e?.cause?.response?.status === 404) { + throw new InputError( + `The namespace ${owner} is not found or the user doesn't have permissions to access it`, + ); + } + throw e; + } + + const { id: userId } = (await client.Users.showCurrentUser()) as { + id: number; + }; + + if (!targetNamespaceId) { + targetNamespaceId = userId; + targetNamespaceKind = 'user'; + } + + const existingProjects = + targetNamespaceKind === 'user' + ? await client.Users.allProjects(owner, { search: repo }) + : await client.Groups.allProjects(owner, { search: repo }); + + const existingProject = existingProjects.find( + project => project.path === repo, + ); + + if (!skipExisting || (skipExisting && !existingProject)) { + ctx.logger.info(`Creating repo ${repo} in namespace ${owner}.`); + + let projectId: number; + let http_url_to_repo: string; + + try { + const result = await client.Projects.create({ + namespaceId: targetNamespaceId, + name: repo, + visibility: repoVisibility, + ...(topics.length ? { topics } : {}), + ...(Object.keys(settings).length ? { ...settings } : {}), + }); + projectId = result.id; + http_url_to_repo = result.http_url_to_repo; + } catch (e: any) { + ctx.logger.error(`GitLab repository creation failed: ${e.message}`, { + error: e, + }); + + // Check if this is a duplicate repository error + if (e.cause?.response?.status === 400) { + const errorMessage = e.description || e.message || ''; + const responseBody = e.cause?.response?.body; + + // Check for duplicate repository patterns + const responseBodyStr = + typeof responseBody === 'string' + ? responseBody + : JSON.stringify(responseBody || ''); + if ( + errorMessage.includes('has already been taken') || + errorMessage.includes('already exists') || + (responseBodyStr && + (responseBodyStr.includes('has already been taken') || + responseBodyStr.includes('already exists'))) + ) { + throw new InputError( + `Repository '${repo}' already exists in namespace '${owner}'. Please choose a different repository name or enable the 'skipExisting' option.`, + ); + } + + // Check for invalid repository name + if ( + errorMessage.includes('can contain only') || + errorMessage.includes('invalid') || + errorMessage.includes('not allowed') + ) { + throw new InputError( + `Invalid repository name '${repo}'. Repository names must contain only letters, digits, '_', '-' and '.'. They cannot start with '-', end in '.git' or end in '.atom'.`, + ); + } + } + + // Check for permission errors + if (e.cause?.response?.status === 403) { + throw new InputError( + `Insufficient permissions to create repository '${repo}' in namespace '${owner}'. Please check your GitLab token permissions.`, + ); + } + + // Check for namespace not found + if (e.cause?.response?.status === 404) { + throw new InputError( + `Namespace '${owner}' not found or not accessible. Please verify the namespace exists and you have access to it.`, + ); + } + + // For other errors, provide a more helpful message + throw new InputError( + `Failed to create GitLab repository '${repo}' in namespace '${owner}': ${ + e.description || e.message + }. ${printGitlabError(e)}`, + ); + } + + // When setUserAsOwner is true the input token is expected to come from an unprivileged user GitLab + // OAuth flow. In this case GitLab works in a way that allows the unprivileged user to + // create the repository, but not to push the default protected branch (e.g. master). + // In order to set the user as owner of the newly created repository we need to check that the + // GitLab integration configuration for the matching host contains a token and use + // such token to bootstrap a new privileged client. + if (setUserAsOwner && integrationConfig.config.token) { + const adminClient = new Gitlab({ + host: integrationConfig.config.baseUrl, + token: integrationConfig.config.token, + }); + + await adminClient.ProjectMembers.add(projectId, userId, 50); + } + + const remoteUrl = (http_url_to_repo as string).replace(/\.git$/, ''); + const repoContentsUrl = `${remoteUrl}/-/blob/${defaultBranch}`; + + const gitAuthorInfo = { + name: gitAuthorName + ? gitAuthorName + : config.getOptionalString('scaffolder.defaultAuthor.name'), + email: gitAuthorEmail + ? gitAuthorEmail + : config.getOptionalString('scaffolder.defaultAuthor.email'), + }; + const signingKey = + integrationConfig.config.commitSigningKey ?? + config.getOptionalString('scaffolder.defaultCommitSigningKey'); + if (signCommit && !signingKey) { + throw new Error( + 'Signing commits is enabled but no signing key is provided in the configuration', + ); + } + + const shouldSkipPublish = + typeof ctx.input.sourcePath === 'boolean' && !ctx.input.sourcePath; + if (!shouldSkipPublish) { + const commitResult = await initRepoAndPushWithTimeout({ + dir: + typeof ctx.input.sourcePath === 'boolean' + ? ctx.workspacePath + : getRepoSourceDirectory( + ctx.workspacePath, + ctx.input.sourcePath, + ), + remoteUrl: http_url_to_repo as string, + defaultBranch, + auth: { + username: 'oauth2', + password: token, + }, + logger: ctx.logger, + commitMessage: gitCommitMessage + ? gitCommitMessage + : config.getOptionalString('scaffolder.defaultCommitMessage'), + gitAuthorInfo, + signingKey: signCommit ? signingKey : undefined, + timeout: gitTimeout, + useCustomGit, + }); + + if (branches) { + for (const branch of branches) { + const { + name, + protect = false, + create = false, + ref = 'master', + } = branch; + + if (create) { + try { + await client.Branches.create(projectId, name, ref); + } catch (e: any) { + throw new InputError( + `Branch creation failed for ${name}. ${printGitlabError( + e, + )}`, + ); + } + ctx.logger.info( + `Branch ${name} created for ${projectId} with ref ${ref}`, + ); + } + + if (protect) { + try { + await client.ProtectedBranches.protect(projectId, name); + } catch (e: any) { + throw new InputError( + `Branch protection failed for ${name}. ${printGitlabError( + e, + )}`, + ); + } + ctx.logger.info(`Branch ${name} protected for ${projectId}`); + } + } + } + ctx.output('commitHash', commitResult.commitHash); + } + + if (projectVariables) { + for (const variable of projectVariables) { + const variableWithDefaults = Object.assign(variable, { + variable_type: (variable.variable_type ?? + 'env_var') as VariableType, + protected: variable.protected ?? false, + masked: variable.masked ?? false, + raw: variable.raw ?? false, + environment_scope: variable.environment_scope ?? '*', + }); + + try { + await client.ProjectVariables.create( + projectId, + variableWithDefaults.key, + variableWithDefaults.value, + { + variableType: variableWithDefaults.variable_type, + protected: variableWithDefaults.protected, + masked: variableWithDefaults.masked, + environmentScope: variableWithDefaults.environment_scope, + description: variableWithDefaults.description, + raw: variableWithDefaults.raw, + }, + ); + } catch (e: any) { + throw new InputError( + `Environment variable creation failed for ${ + variableWithDefaults.key + }. ${printGitlabError(e)}`, + ); + } + } + } + ctx.output('remoteUrl', remoteUrl); + ctx.output('repoContentsUrl', repoContentsUrl); + ctx.output('projectId', projectId); + ctx.output('created', true); + } else if (existingProject) { + ctx.logger.info(`Repo ${repo} already exists in namespace ${owner}.`); + const { + id: projectId, + http_url_to_repo, + default_branch, + } = existingProject; + const remoteUrl = (http_url_to_repo as string).replace(/\.git$/, ''); + ctx.output('remoteUrl', remoteUrl); + ctx.output('repoContentsUrl', `${remoteUrl}/-/blob/${default_branch}`); + ctx.output('projectId', projectId); + ctx.output('created', false); + } + }, + }); +} + +function printGitlabError(error: any): string { + // Extract more detailed error information + const errorInfo: any = { + code: error.code, + message: error.description || error.message, + }; + + // Add HTTP status if available + if (error.cause?.response?.status) { + errorInfo.status = error.cause.response.status; + } + + // Add response body if available for more context + if (error.cause?.response?.body) { + try { + const body = + typeof error.cause.response.body === 'string' + ? JSON.parse(error.cause.response.body) + : error.cause.response.body; + if (body.message) { + errorInfo.details = body.message; + } + } catch { + // Ignore JSON parsing errors + } + } + + return JSON.stringify(errorInfo); +} diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.examples.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.examples.test.ts new file mode 100644 index 0000000..449c598 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.examples.test.ts @@ -0,0 +1,309 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ScmIntegrations } from '@backstage/integration'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import yaml from 'yaml'; +import { createGitlabGroupEnsureExistsAction } from './gitlabGroupEnsureExists'; +import { examples } from './gitlabGroupEnsureExists.examples'; +import { mockServices } from '@backstage/backend-test-utils'; + +const mockGitlabClient = { + Groups: { + search: jest.fn(), + create: jest.fn(), + }, +}; + +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('gitlab:group:ensureExists', () => { + const mockContext = createMockActionContext(); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it(`Should ${examples[0].description}`, async () => { + mockGitlabClient.Groups.search.mockResolvedValue([]); + mockGitlabClient.Groups.create.mockResolvedValue({ + id: 3, + full_path: 'group1', + }); + + const config = mockServices.rootConfig({ + data: { + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://gitlab.com/api/v4', + }, + ], + }, + }, + }); + const integrations = ScmIntegrations.fromConfig(config); + + const action = createGitlabGroupEnsureExistsAction({ integrations }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[0].example).steps[0].input, + }); + + expect(mockGitlabClient.Groups.create).toHaveBeenCalledWith( + 'group1', + 'group1', + {}, + ); + + expect(mockContext.output).toHaveBeenCalledWith('groupId', 3); + }); + + it(`Should ${examples[1].description}`, async () => { + mockGitlabClient.Groups.search.mockResolvedValue([ + { + id: 1, + full_path: 'group1', + }, + ]); + mockGitlabClient.Groups.create.mockResolvedValue({ + id: 3, + full_path: 'group1/group2', + }); + + const config = mockServices.rootConfig({ + data: { + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + ], + }, + }, + }); + const integrations = ScmIntegrations.fromConfig(config); + + const action = createGitlabGroupEnsureExistsAction({ integrations }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[1].example).steps[0].input, + }); + + expect(mockGitlabClient.Groups.create).toHaveBeenCalledWith( + 'group2', + 'group2', + { + parentId: 1, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('groupId', 3); + }); + + it(`Should ${examples[2].description}`, async () => { + mockGitlabClient.Groups.search.mockResolvedValue([ + { + id: 1, + full_path: 'group1', + }, + { + id: 2, + full_path: 'group1/group2', + }, + ]); + mockGitlabClient.Groups.create.mockResolvedValue({ + id: 3, + full_path: 'group1/group2/group3', + }); + + const config = mockServices.rootConfig({ + data: { + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + ], + }, + }, + }); + const integrations = ScmIntegrations.fromConfig(config); + + const action = createGitlabGroupEnsureExistsAction({ integrations }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[2].example).steps[0].input, + }); + + expect(mockGitlabClient.Groups.create).toHaveBeenCalledWith( + 'group3', + 'group3', + { + parentId: 2, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('groupId', 3); + }); + + it(`Should ${examples[3].description}`, async () => { + const config = mockServices.rootConfig({ + data: { + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + ], + }, + }, + }); + const integrations = ScmIntegrations.fromConfig(config); + + const action = createGitlabGroupEnsureExistsAction({ integrations }); + + await action.handler({ + ...mockContext, + isDryRun: yaml.parse(examples[3].example).steps[0].isDryRun, + input: yaml.parse(examples[3].example).steps[0].input, + }); + + expect(mockGitlabClient.Groups.search).not.toHaveBeenCalled(); + expect(mockGitlabClient.Groups.create).not.toHaveBeenCalled(); + + expect(mockContext.output).toHaveBeenCalledWith('groupId', 42); + }); + + it(`Should ${examples[4].description}`, async () => { + mockGitlabClient.Groups.search.mockResolvedValue([ + { + id: 1, + full_path: 'group1', + }, + { + id: 2, + full_path: 'group1/group2', + }, + ]); + mockGitlabClient.Groups.create.mockResolvedValue({ + id: 3, + full_path: 'group1/group2/group3', + }); + + const config = mockServices.rootConfig({ + data: { + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + ], + }, + }, + }); + const integrations = ScmIntegrations.fromConfig(config); + + const action = createGitlabGroupEnsureExistsAction({ integrations }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[4].example).steps[0].input, + }); + + expect(mockGitlabClient.Groups.create).toHaveBeenCalledWith( + 'Group 3', + 'group3', + { + parentId: 2, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('groupId', 3); + }); + + it(`Should ${examples[5].description}`, async () => { + mockGitlabClient.Groups.search.mockResolvedValue([ + { + id: 1, + full_path: 'group1', + }, + { + id: 2, + full_path: 'group1/group2', + }, + { + id: 3, + full_path: 'group1/group2/group3', + }, + ]); + mockGitlabClient.Groups.create.mockResolvedValue({ + id: 4, + full_path: 'group1/group2/group3/group4', + }); + + const config = mockServices.rootConfig({ + data: { + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + ], + }, + }, + }); + const integrations = ScmIntegrations.fromConfig(config); + + const action = createGitlabGroupEnsureExistsAction({ integrations }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[5].example).steps[0].input, + }); + + expect(mockGitlabClient.Groups.create).toHaveBeenCalledWith( + 'Group 4', + 'group4', + { + parentId: 3, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('groupId', 4); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.examples.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.examples.ts new file mode 100644 index 0000000..f379bd3 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.examples.ts @@ -0,0 +1,126 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; + +export const examples: TemplateExample[] = [ + { + description: 'Creating a group at the top level', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabGroup', + name: 'Group', + action: 'gitlab:group:ensureExists', + input: { + repoUrl: 'gitlab.com', + path: ['group1'], + }, + }, + ], + }), + }, + { + description: 'Create a group nested within another group', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabGroup', + name: 'Group', + action: 'gitlab:group:ensureExists', + input: { + repoUrl: 'gitlab.com', + path: ['group1', 'group2'], + }, + }, + ], + }), + }, + { + description: 'Create a group nested within multiple other groups', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabGroup', + name: 'Group', + action: 'gitlab:group:ensureExists', + input: { + repoUrl: 'gitlab.com', + path: ['group1', 'group2', 'group3'], + }, + }, + ], + }), + }, + { + description: 'Create a group in dry run mode', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabGroup', + name: 'Group', + action: 'gitlab:group:ensureExists', + isDryRun: true, + input: { + repoUrl: 'https://gitlab.com/my-repo', + path: ['group1', 'group2', 'group3'], + }, + }, + ], + }), + }, + { + description: 'Create a group nested within another group using objects', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabGroup', + name: 'Group', + action: 'gitlab:group:ensureExists', + input: { + repoUrl: 'gitlab.com', + path: [ + { name: 'Group 1', slug: 'group1' }, + { name: 'Group 2', slug: 'group2' }, + { name: 'Group 3', slug: 'group3' }, + ], + }, + }, + ], + }), + }, + { + description: + 'Create a group nested within another group using path and objects', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabGroup', + name: 'Group', + action: 'gitlab:group:ensureExists', + input: { + repoUrl: 'gitlab.com', + path: [ + 'group1/group2', + { name: 'Group 3', slug: 'group3' }, + { name: 'Group 4', slug: 'group4' }, + ], + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.test.ts new file mode 100644 index 0000000..8e52ee9 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.test.ts @@ -0,0 +1,261 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ScmIntegrations } from '@backstage/integration'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import { createGitlabGroupEnsureExistsAction } from './gitlabGroupEnsureExists'; +import { getClient } from '../util'; +import { mockServices } from '@backstage/backend-test-utils'; + +const mockGitlabClient = { + Groups: { + search: jest.fn(), + create: jest.fn(), + }, +}; + +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +jest.mock('../util', () => ({ + getClient: jest.fn().mockImplementation(() => mockGitlabClient), + parseRepoUrl: () => ({ host: 'gitlab.com', owner: 'owner', repo: 'repo' }), +})); + +describe('gitlab:group:ensureExists', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + const config = mockServices.rootConfig({ + data: { + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://gitlab.com/api/v4', + }, + ], + }, + }, + }); + const integrations = ScmIntegrations.fromConfig(config); + + const action = createGitlabGroupEnsureExistsAction({ integrations }); + + const mockContext = createMockActionContext(); + + it('should create a new group from string if it does not exists', async () => { + mockGitlabClient.Groups.search.mockResolvedValue([ + { + id: 1, + full_path: 'bar', + }, + { + id: 2, + full_path: 'foo', + }, + ]); + + mockGitlabClient.Groups.create.mockResolvedValue({ + id: 3, + full_path: 'foo/bar', + }); + + await action.handler({ + ...mockContext, + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + path: ['foo', 'bar'], + }, + }); + + expect(mockGitlabClient.Groups.create).toHaveBeenCalledWith('bar', 'bar', { + parentId: 2, + }); + + expect(mockContext.output).toHaveBeenCalledWith('groupId', 3); + }); + + it('should create a new group from pathstring if it does not exists', async () => { + mockGitlabClient.Groups.search.mockResolvedValue([ + { + id: 1, + full_path: 'bar', + }, + { + id: 2, + full_path: 'foo', + }, + ]); + + mockGitlabClient.Groups.create.mockResolvedValue({ + id: 3, + full_path: 'foo/bar', + }); + + await action.handler({ + ...mockContext, + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + path: ['foo/bar', 'baz'], + }, + }); + + expect(mockGitlabClient.Groups.create).toHaveBeenCalledWith('bar', 'bar', { + parentId: 2, + }); + + expect(mockContext.output).toHaveBeenCalledWith('groupId', 3); + }); + + it('should create a new group from object if it does not exists', async () => { + mockGitlabClient.Groups.search.mockResolvedValue([ + { + id: 1, + full_path: 'bar', + }, + { + id: 2, + full_path: 'foo', + }, + ]); + + mockGitlabClient.Groups.create.mockResolvedValue({ + id: 3, + full_path: 'foo/bar', + }); + + await action.handler({ + ...mockContext, + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + path: [ + { name: 'Foo', slug: 'foo' }, + { name: 'Bar is a nice name', slug: 'bar' }, + ], + }, + }); + + expect(mockGitlabClient.Groups.create).toHaveBeenCalledWith( + 'Bar is a nice name', + 'bar', + { + parentId: 2, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('groupId', 3); + }); + + it('should return existing group if it does exists', async () => { + mockGitlabClient.Groups.search.mockResolvedValue([ + { + id: 1, + full_path: 'bar', + }, + { + id: 2, + full_path: 'foo', + }, + { + id: 42, + full_path: 'foo/bar', + }, + ]); + + await action.handler({ + ...mockContext, + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + path: ['foo', 'bar'], + }, + }); + + expect(mockGitlabClient.Groups.create).not.toHaveBeenCalled(); + + expect(mockContext.output).toHaveBeenCalledWith('groupId', 42); + }); + + it('should not call API on dryRun', async () => { + await action.handler({ + ...mockContext, + isDryRun: true, + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + path: ['foo', 'bar'], + }, + }); + + expect(mockGitlabClient.Groups.search).not.toHaveBeenCalled(); + expect(mockGitlabClient.Groups.create).not.toHaveBeenCalled(); + + expect(mockContext.output).toHaveBeenCalledWith('groupId', 42); + }); + + it('should use the token from the integration config when none is provided', async () => { + mockGitlabClient.Groups.search.mockResolvedValue([ + { + id: 1, + full_path: 'foobar', + }, + ]); + + await action.handler({ + ...mockContext, + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + path: ['foobar'], + }, + }); + + expect(getClient).toHaveBeenCalledWith( + expect.not.objectContaining({ + token: expect.anything(), + }), + ); + }); + + it('should use a provided token as bearer authentication', async () => { + mockGitlabClient.Groups.search.mockResolvedValue([ + { + id: 1, + full_path: 'foobar', + }, + ]); + + await action.handler({ + ...mockContext, + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + path: ['foobar'], + token: 'mysecrettoken', + }, + }); + + expect(getClient).toHaveBeenCalledWith( + expect.objectContaining({ + token: 'mysecrettoken', + }), + ); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.ts new file mode 100644 index 0000000..c3d4fd7 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabGroupEnsureExists.ts @@ -0,0 +1,143 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { GroupSchema } from '@gitbeaker/rest'; +import { getClient, parseRepoUrl } from '../util'; +import { examples } from './gitlabGroupEnsureExists.examples'; + +/** + * Creates an `gitlab:group:ensureExists` Scaffolder action. + * + * @public + */ +export const createGitlabGroupEnsureExistsAction = (options: { + integrations: ScmIntegrationRegistry; +}) => { + const { integrations } = options; + + return createTemplateAction({ + id: 'gitlab:group:ensureExists', + description: 'Ensures a Gitlab group exists', + supportsDryRun: true, + examples, + schema: { + input: { + repoUrl: z => + z.string({ + description: `Accepts the format 'gitlab.com?repo=project_name&owner=group_name' where 'project_name' is the repository name and 'group_name' is a group or username`, + }), + token: z => + z + .string({ + description: 'The token to use for authorization to GitLab', + }) + .optional(), + path: z => + z + .array( + z.string().or( + z.object({ + name: z.string(), + slug: z.string(), + }), + ), + { + description: + 'A path of group names or objects (name and slug) that is ensured to exist', + }, + ) + .min(1), + }, + output: { + groupId: z => + z + .number({ + description: 'The id of the innermost sub-group', + }) + .optional(), + }, + }, + async handler(ctx) { + if (ctx.isDryRun) { + ctx.output('groupId', 42); + return; + } + + const { token, repoUrl, path } = ctx.input; + + const { host } = parseRepoUrl(repoUrl, integrations); + + const api = getClient({ host, integrations, token }); + + let currentPath: string | null = null; + let parentId: number | null = null; + for (const { name, slug } of pathIterator(path)) { + const fullPath: string = currentPath ? `${currentPath}/${slug}` : slug; + const result = (await api.Groups.search( + fullPath, + )) as unknown as Array; // recast since the return type for search is wrong in the gitbeaker typings + const subGroup = result.find( + searchPathElem => searchPathElem.full_path === fullPath, + ); + if (!subGroup) { + ctx.logger.info(`creating missing group ${fullPath}`); + + parentId = await ctx.checkpoint({ + key: `ensure.${name}.${slug}.${parentId}`, + // eslint-disable-next-line no-loop-func + fn: async () => { + return ( + await api.Groups.create( + name, + slug, + parentId + ? { + parentId: parentId, + } + : {}, + ) + )?.id; + }, + }); + } else { + parentId = subGroup.id; + } + currentPath = fullPath; + } + if (parentId !== null) { + ctx.output('groupId', parentId); + } + }, + }); +}; + +type PathPart = { name: string; slug: string }; +type PathItem = string | PathPart; + +function* pathIterator(items: PathItem[]): Generator { + for (const item of items) { + if (typeof item === 'string') { + const parts = item.split('/'); + for (const part of parts) { + yield { name: part, slug: part }; + } + } else { + yield item; + } + } +} diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.examples.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.examples.test.ts new file mode 100644 index 0000000..858adb4 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.examples.test.ts @@ -0,0 +1,713 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ScmIntegrations } from '@backstage/integration'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import { createGitlabIssueAction } from './gitlabIssueCreate'; +import { examples } from './gitlabIssueCreate.examples'; +import yaml from 'yaml'; +import { mockServices } from '@backstage/backend-test-utils'; + +const mockGitlabClient = { + Issues: { + create: jest.fn(), + }, +}; +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('gitlab:issues:create', () => { + beforeEach(() => { + jest.clearAllMocks(); + jest.useFakeTimers({ + now: new Date(2005, 6, 4, 11, 0, 0), + }); + }); + + afterEach(() => { + jest.useRealTimers(); + }); + + const config = mockServices.rootConfig({ + data: { + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'sample-token', + apiBaseUrl: 'https://gitlab.com/api/v1', + }, + ], + }, + }, + }); + const integrations = ScmIntegrations.fromConfig(config); + + const action = createGitlabIssueAction({ integrations }); + + it(`should ${examples[0].description}`, async () => { + let input; + try { + input = yaml.parse(examples[0].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 234, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.create.mockResolvedValue({ + id: 12, + iid: 4, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.create).toHaveBeenCalledWith( + 12, + input.title, + { + issueType: undefined, + description: input.description, + assigneeIds: [], + confidential: false, + epicId: undefined, + labels: '', + createdAt: new Date().toISOString(), + dueDate: undefined, + discussionToResolve: '', + mergeRequestToResolveDiscussionsOf: undefined, + milestoneId: undefined, + weight: undefined, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 12); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 4); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`should ${examples[1].description}`, async () => { + let input; + try { + input = yaml.parse(examples[1].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 234, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.create.mockResolvedValue({ + id: 12, + iid: 4, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.create).toHaveBeenCalledWith( + 12, + input.title, + { + issueType: undefined, + description: input.description, + assigneeIds: [18], + confidential: false, + epicId: undefined, + labels: '', + createdAt: input.createdAt, + dueDate: input.dueDate, + discussionToResolve: '', + mergeRequestToResolveDiscussionsOf: undefined, + milestoneId: undefined, + weight: undefined, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 12); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 4); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`should ${examples[2].description}`, async () => { + let input; + try { + input = yaml.parse(examples[2].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 234, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.create.mockResolvedValue({ + id: 12, + iid: 4, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + epicId: undefined, + }, + }); + + expect(mockGitlabClient.Issues.create).toHaveBeenCalledWith( + 12, + input.title, + { + issueType: undefined, + description: input.description, + assigneeIds: [18, 15], + confidential: input.confidential, + epicId: undefined, + labels: input.labels, + createdAt: input.createdAt, + dueDate: input.dueDate, + discussionToResolve: input.discussionToResolve, + mergeRequestToResolveDiscussionsOf: undefined, + milestoneId: undefined, + weight: undefined, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 12); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 4); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`should ${examples[3].description}`, async () => { + let input; + try { + input = yaml.parse(examples[3].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 234, + title: 'Computer banks to rule the world', + token: 'myAwesomeToken', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.create.mockResolvedValue({ + id: 12, + iid: 4, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.create).toHaveBeenCalledWith( + 12, + input.title, + { + issueType: undefined, + description: input.description, + assigneeIds: [], + confidential: false, + epicId: undefined, + labels: '', + createdAt: new Date().toISOString(), + dueDate: undefined, + discussionToResolve: '', + mergeRequestToResolveDiscussionsOf: undefined, + milestoneId: undefined, + weight: undefined, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 12); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 4); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`should ${examples[4].description}`, async () => { + let input; + try { + input = yaml.parse(examples[4].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 234, + title: 'Computer banks to rule the world', + token: 'myAwesomeToken', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.create.mockResolvedValue({ + id: 12, + iid: 4, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.create).toHaveBeenCalledWith( + 12, + input.title, + { + issueType: undefined, + description: input.description, + assigneeIds: [], + confidential: false, + epicId: undefined, + labels: '', + createdAt: new Date().toISOString(), + dueDate: undefined, + discussionToResolve: '', + mergeRequestToResolveDiscussionsOf: undefined, + milestoneId: input.milestoneId, + weight: input.weight, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 12); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 4); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`should ${examples[5].description}`, async () => { + let input; + try { + input = yaml.parse(examples[5].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 234, + title: 'Computer banks to rule the world', + token: 'myAwesomeToken', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.create.mockResolvedValue({ + id: 12, + iid: 4, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.create).toHaveBeenCalledWith( + 12, + input.title, + { + issueType: input.issueType, + description: input.description, + assigneeIds: [], + confidential: false, + epicId: undefined, + labels: '', + createdAt: new Date().toISOString(), + dueDate: undefined, + discussionToResolve: '', + mergeRequestToResolveDiscussionsOf: undefined, + milestoneId: input.milestoneId, + weight: input.weight, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 12); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 4); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`should ${examples[6].description}`, async () => { + let input; + try { + input = yaml.parse(examples[6].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 234, + title: 'Computer banks to rule the world', + token: 'myAwesomeToken', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.create.mockResolvedValue({ + id: 12, + iid: 4, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.create).toHaveBeenCalledWith( + 12, + input.title, + { + issueType: input.issueType, + description: input.description, + assigneeIds: [], + confidential: false, + epicId: undefined, + labels: '', + createdAt: new Date().toISOString(), + dueDate: undefined, + discussionToResolve: '', + mergeRequestToResolveDiscussionsOf: undefined, + milestoneId: input.milestoneId, + weight: input.weight, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 12); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 4); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`should ${examples[7].description}`, async () => { + let input; + try { + input = yaml.parse(examples[7].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 234, + title: 'Computer banks to rule the world', + token: 'myAwesomeToken', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.create.mockResolvedValue({ + id: 12, + iid: 4, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.create).toHaveBeenCalledWith( + 12, + input.title, + { + issueType: input.issueType, + description: input.description, + assigneeIds: [18, 22], + confidential: false, + epicId: undefined, + labels: '', + createdAt: new Date().toISOString(), + dueDate: undefined, + discussionToResolve: '', + mergeRequestToResolveDiscussionsOf: undefined, + milestoneId: input.milestoneId, + weight: input.weight, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 12); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 4); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`should ${examples[8].description}`, async () => { + let input; + try { + input = yaml.parse(examples[8].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 234, + title: 'Computer banks to rule the world', + token: 'myAwesomeToken', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.create.mockResolvedValue({ + id: 12, + iid: 4, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.create).toHaveBeenCalledWith( + 12, + input.title, + { + issueType: input.issueType, + description: input.description, + assigneeIds: [], + confidential: false, + epicId: undefined, + labels: '', + createdAt: new Date().toISOString(), + dueDate: undefined, + discussionToResolve: '', + mergeRequestToResolveDiscussionsOf: undefined, + milestoneId: input.milestoneId, + weight: input.weight, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 12); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 4); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`should ${examples[9].description}`, async () => { + let input; + try { + input = yaml.parse(examples[9].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 234, + title: 'Computer banks to rule the world', + token: 'myAwesomeToken', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.create.mockResolvedValue({ + id: 12, + iid: 4, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.create).toHaveBeenCalledWith( + 12, + input.title, + { + issueType: input.issueType, + description: input.description, + assigneeIds: [], + confidential: false, + epicId: undefined, + labels: '', + createdAt: new Date().toISOString(), + dueDate: undefined, + discussionToResolve: '', + mergeRequestToResolveDiscussionsOf: undefined, + milestoneId: input.milestoneId, + weight: input.weight, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 12); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 4); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`should ${examples[10].description}`, async () => { + let input; + try { + input = yaml.parse(examples[10].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 234, + title: 'Computer banks to rule the world', + token: 'myAwesomeToken', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.create.mockResolvedValue({ + id: 12, + iid: 4, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.create).toHaveBeenCalledWith( + 12, + input.title, + { + issueType: input.issueType, + description: input.description, + assigneeIds: [], + confidential: false, + epicId: undefined, + labels: '', + createdAt: new Date().toISOString(), + dueDate: undefined, + discussionToResolve: 'abc123', + mergeRequestToResolveDiscussionsOf: + input.mergeRequestToResolveDiscussionsOf, + milestoneId: input.milestoneId, + weight: input.weight, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 12); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 4); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.examples.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.examples.ts new file mode 100644 index 0000000..04fdeba --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.examples.ts @@ -0,0 +1,243 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; +import { commonGitlabConfigExample } from '../commonGitlabConfig'; + +export const examples: TemplateExample[] = [ + { + description: 'Create a GitLab issue with minimal options', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'Issues', + action: 'gitlab:issues:create', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Test Issue', + description: 'This is the description of the issue', + }, + }, + ], + }), + }, + { + description: 'Create a GitLab issue with assignees and date options', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'Issues', + action: 'gitlab:issues:create', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Test Issue', + assignees: [18], + description: 'This is the description of the issue', + createdAt: '2022-09-27T18:00:00.000Z', + dueDate: '2022-09-28T12:00:00.000Z', + }, + }, + ], + }), + }, + { + description: 'Create a GitLab Issue with several options', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'Issues', + action: 'gitlab:issues:create', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Test Issue', + assignees: [18, 15], + description: 'This is the description of the issue', + confidential: false, + createdAt: '2022-09-27T18:00:00.000Z', + dueDate: '2022-09-28T12:00:00.000Z', + discussionToResolve: '1', + epicId: 1, + labels: 'phase1:label1,phase2:label2', + }, + }, + ], + }), + }, + { + description: 'Create a GitLab issue with token', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'Issues', + action: 'gitlab:issues:create', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Test Issue', + description: 'This is the description of the issue', + token: 'sample token', + }, + }, + ], + }), + }, + { + description: 'Create a GitLab issue with a specific milestone and weight', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'Issues', + action: 'gitlab:issues:create', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Test Issue with Milestone', + description: 'This is the description of the issue', + milestoneId: 5, + weight: 3, + }, + }, + ], + }), + }, + { + description: 'Create a GitLab issue of type INCIDENT', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'Issues', + action: 'gitlab:issues:create', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Confidential Test Issue', + description: 'This is the description of the issue', + issueType: 'incident', + }, + }, + ], + }), + }, + { + description: 'Create a GitLab issue of type TEST', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'Issues', + action: 'gitlab:issues:create', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Confidential Test Issue', + description: 'This is the description of the issue', + issueType: 'test_case', + }, + }, + ], + }), + }, + { + description: 'Create a GitLab issue of type TASK with assignees', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'Issues', + action: 'gitlab:issues:create', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Confidential Test Issue', + description: 'This is the description of the issue', + issueType: 'task', + assignees: [18, 22], + }, + }, + ], + }), + }, + { + description: 'Create a GitLab issue of type ISSUE and close it', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'Issues', + action: 'gitlab:issues:create', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Confidential Test Issue', + description: 'This is the description of the issue', + issueType: 'issue', + stateEvent: 'close', + }, + }, + ], + }), + }, + { + description: 'Create a GitLab issue of type INCIDENT and reopen it', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'Issues', + action: 'gitlab:issues:create', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Confidential Test Issue', + description: 'This is the description of the issue', + issueType: 'incident', + stateEvent: 'reopen', + }, + }, + ], + }), + }, + { + description: + 'Create a GitLab issue to resolve a discussion in a merge request', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'Issues', + action: 'gitlab:issues:create', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Test Issue for MR Discussion', + description: 'This is the description of the issue', + mergeRequestToResolveDiscussionsOf: 42, + discussionToResolve: 'abc123', + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.test.ts new file mode 100644 index 0000000..e09bfaf --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.test.ts @@ -0,0 +1,214 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ScmIntegrations } from '@backstage/integration'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import { IssueType } from '../commonGitlabConfig'; +import { createGitlabIssueAction } from './gitlabIssueCreate'; +import { mockServices } from '@backstage/backend-test-utils'; + +const mockGitlabClient = { + Issues: { + create: jest.fn(), + }, +}; +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('gitlab:issues:create', () => { + beforeEach(() => { + jest.clearAllMocks(); + jest.useFakeTimers({ + now: new Date(1988, 5, 3, 12, 0, 0), + }); + }); + + afterEach(() => { + jest.useRealTimers(); + }); + + const config = mockServices.rootConfig({ + data: { + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'myIntegrationsToken', + apiBaseUrl: 'https://gitlab.com/api/v4', + }, + ], + }, + }, + }); + const integrations = ScmIntegrations.fromConfig(config); + + const action = createGitlabIssueAction({ integrations }); + + it('should return a Gitlab issue when called with minimal input params', async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.create.mockResolvedValue({ + id: 42, + iid: 1, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + }); + + expect(mockGitlabClient.Issues.create).toHaveBeenCalledWith( + 123, + 'Computer banks to rule the world', + { + issueType: undefined, + description: '', + assigneeIds: [], + confidential: false, + epicId: undefined, + labels: '', + createdAt: new Date().toISOString(), + dueDate: undefined, + discussionToResolve: '', + mergeRequestToResolveDiscussionsOf: undefined, + milestoneId: undefined, + weight: undefined, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 42); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 1); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it('should return a Gitlab issue when called with oAuth Token', async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + title: 'Computer banks to rule the world', + token: 'myAwesomeToken', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.create.mockResolvedValue({ + id: 42, + iid: 1, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + }); + + expect(mockGitlabClient.Issues.create).toHaveBeenCalledWith( + 123, + 'Computer banks to rule the world', + { + issueType: undefined, + description: '', + assigneeIds: [], + confidential: false, + epicId: undefined, + labels: '', + createdAt: new Date().toISOString(), + dueDate: undefined, + discussionToResolve: '', + mergeRequestToResolveDiscussionsOf: undefined, + milestoneId: undefined, + weight: undefined, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 42); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 1); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it('should return a Gitlab issue when called with several input params', async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueType: IssueType.INCIDENT, + title: 'Computer banks to rule the world', + description: + 'this issue should kickstart research on instruments to sight the stars', + dueDate: '1990-08-20T23:59:59Z', + token: 'myAwesomeToken', + assignees: [3, 14, 15], + labels: 'operation:mindcrime', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.create.mockResolvedValue({ + id: 42, + iid: 1, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + }); + + expect(mockGitlabClient.Issues.create).toHaveBeenCalledWith( + 123, + 'Computer banks to rule the world', + { + issueType: 'incident', + description: + 'this issue should kickstart research on instruments to sight the stars', + assigneeIds: [3, 14, 15], + confidential: false, + epicId: undefined, + labels: 'operation:mindcrime', + createdAt: new Date().toISOString(), + dueDate: '1990-08-20T23:59:59.000Z', + discussionToResolve: '', + mergeRequestToResolveDiscussionsOf: undefined, + milestoneId: undefined, + weight: undefined, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 42); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 1); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.ts new file mode 100644 index 0000000..1910b5c --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueCreate.ts @@ -0,0 +1,264 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { InputError } from '@backstage/errors'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { IssueType } from '../commonGitlabConfig'; +import { examples } from './gitlabIssueCreate.examples'; +import { checkEpicScope, convertDate, getClient, parseRepoUrl } from '../util'; +import { CreateIssueOptions, IssueSchema } from '@gitbeaker/rest'; +import { getErrorMessage } from './helpers'; + +/** + * Creates a `gitlab:issues:create` Scaffolder action. + * + * @param options - Templating configuration. + * @public + */ +export const createGitlabIssueAction = (options: { + integrations: ScmIntegrationRegistry; +}) => { + const { integrations } = options; + return createTemplateAction({ + id: 'gitlab:issues:create', + description: 'Creates a Gitlab issue.', + examples, + schema: { + input: { + repoUrl: z => + z.string({ + description: `Accepts the format 'gitlab.com?repo=project_name&owner=group_name' where 'project_name' is the repository name and 'group_name' is a group or username`, + }), + token: z => + z + .string({ + description: 'The token to use for authorization to GitLab', + }) + .optional(), + projectId: z => + z.number({ + description: 'Project Id', + }), + title: z => + z.string({ + description: 'Title of the issue', + }), + assignees: z => + z + .array(z.number(), { + description: 'IDs of the users to assign the issue to.', + }) + .optional(), + confidential: z => + z + .boolean({ + description: 'Issue Confidentiality', + }) + .optional(), + description: z => + z + .string({ + description: 'Issue description', + }) + .max(1048576) + .optional(), + createdAt: z => + z + .string({ + description: 'Creation date/time', + }) + .regex( + /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?Z$/, + 'Invalid date format. Use YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.SSSZ', + ) + .optional(), + dueDate: z => + z + .string({ + description: 'Due date/time', + }) + .regex( + /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?Z$/, + 'Invalid date format. Use YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.SSSZ', + ) + .optional(), + discussionToResolve: z => + z + .string({ + description: + 'Id of a discussion to resolve. Use in combination with "merge_request_to_resolve_discussions_of"', + }) + .optional(), + epicId: z => + z + .number({ + description: 'Id of the linked Epic', + }) + .min(0, 'Valid values should be equal or greater than zero') + .optional(), + labels: z => + z + .string({ + description: 'Labels to apply', + }) + .optional(), + issueType: z => + z + .nativeEnum(IssueType, { + description: 'Type of the issue', + }) + .optional(), + mergeRequestToResolveDiscussionsOf: z => + z + .number({ + description: + 'IID of a merge request in which to resolve all issues', + }) + .optional(), + milestoneId: z => + z + .number({ + description: 'Global ID of a milestone to assign the issue', + }) + .optional(), + weight: z => + z + .number({ + description: 'The issue weight', + }) + .min(0) + .refine( + value => { + return value >= 0; + }, + { + message: 'Valid values should be equal or greater than zero', + }, + ) + .optional(), + }, + output: { + issueUrl: z => + z.string({ + description: 'Issue Url', + }), + issueId: z => + z.number({ + description: 'Issue Id', + }), + issueIid: z => + z.number({ + description: 'Issue Iid', + }), + }, + }, + async handler(ctx) { + try { + const { + repoUrl, + projectId, + title, + description = '', + confidential = false, + assignees = [], + createdAt = '', + dueDate, + discussionToResolve = '', + epicId, + labels = '', + issueType, + mergeRequestToResolveDiscussionsOf, + milestoneId, + weight, + token, + } = ctx.input; + + const { host } = parseRepoUrl(repoUrl, integrations); + const api = getClient({ host, integrations, token }); + + let isEpicScoped = false; + + isEpicScoped = await ctx.checkpoint({ + key: `is.epic.scoped.${projectId}.${title}`, + fn: async () => { + if (epicId) { + isEpicScoped = await checkEpicScope(api, projectId, epicId); + + if (isEpicScoped) { + ctx.logger.info('Epic is within Project Scope'); + } else { + ctx.logger.warn( + 'Chosen epic is not within the Project Scope. The issue will be created without an associated epic.', + ); + } + } + return isEpicScoped; + }, + }); + + const mappedCreatedAt = convertDate( + String(createdAt), + new Date().toISOString(), + ); + const mappedDueDate = dueDate + ? convertDate(String(dueDate), new Date().toISOString()) + : undefined; + + const issueOptions: CreateIssueOptions = { + description, + assigneeIds: assignees, + confidential, + epicId: isEpicScoped ? epicId : undefined, + labels, + createdAt: mappedCreatedAt, + dueDate: mappedDueDate, + discussionToResolve, + issueType, + mergeRequestToResolveDiscussionsOf, + milestoneId, + weight, + }; + + const response = await ctx.checkpoint({ + key: `issue.${projectId}.${title}`, + fn: async () => { + const issue = (await api.Issues.create( + projectId, + title, + issueOptions, + )) as IssueSchema; + + return { + id: issue.id, + web_url: issue.web_url, + iid: issue.iid, + }; + }, + }); + + ctx.output('issueId', response.id); + ctx.output('issueUrl', response.web_url); + ctx.output('issueIid', response.iid); + } catch (error: any) { + // Handling other errors + throw new InputError( + `Failed to create GitLab issue: ${getErrorMessage(error)}`, + ); + } + }, + }); +}; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.examples.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.examples.test.ts new file mode 100644 index 0000000..fa53609 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.examples.test.ts @@ -0,0 +1,819 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import { ScmIntegrations } from '@backstage/integration'; +import { editGitlabIssueAction } from './gitlabIssueEdit'; +import { examples } from './gitlabIssueEdit.examples'; +import yaml from 'yaml'; +import { mockServices } from '@backstage/backend-test-utils'; + +const mockGitlabClient = { + Issues: { + edit: jest.fn(), + }, +}; +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('gitlab:issue:edit', () => { + beforeEach(() => { + jest.clearAllMocks(); + jest.useFakeTimers({ + now: new Date(1999, 6, 14, 12, 0, 0), + }); + }); + + afterEach(() => { + jest.useRealTimers(); + }); + + const config = mockServices.rootConfig({ + data: { + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'myIntegrationsToken', + apiBaseUrl: 'https://gitlab.com/api/v4', + }, + ], + }, + }, + }); + const integrations = ScmIntegrations.fromConfig(config); + + const action = editGitlabIssueAction({ integrations }); + + it(`Should ${examples[0].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + let input; + try { + input = yaml.parse(examples[0].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(12, 42, { + title: input.title, + issueType: undefined, + addLabels: undefined, + removeLabels: undefined, + description: input.description, + assigneeIds: [], + confidential: false, + discussionLocked: false, + epicId: undefined, + labels: undefined, + updatedAt: new Date().toISOString(), + dueDate: undefined, + milestoneId: undefined, + weight: undefined, + stateEvent: undefined, + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`Should ${examples[1].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + let input; + try { + input = yaml.parse(examples[1].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(12, 42, { + title: input.title, + issueType: undefined, + addLabels: undefined, + removeLabels: undefined, + description: input.description, + assigneeIds: [18], + confidential: false, + discussionLocked: false, + epicId: undefined, + labels: undefined, + updatedAt: '2024-05-10T18:00:00.000Z', + dueDate: '2024-09-28', + milestoneId: undefined, + weight: undefined, + stateEvent: undefined, + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`Should ${examples[2].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + let input; + try { + input = yaml.parse(examples[2].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + epicId: undefined, + }, + }); + + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(12, 42, { + title: input.title, + issueType: undefined, + addLabels: undefined, + removeLabels: undefined, + description: input.description, + assigneeIds: [18, 15], + confidential: false, + discussionLocked: true, + epicId: undefined, + labels: 'phase1:label1,phase2:label2', + updatedAt: '2024-05-10T18:00:00.000Z', + dueDate: '2024-09-28', + milestoneId: undefined, + weight: undefined, + stateEvent: undefined, + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`Should ${examples[2].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + let input; + try { + input = yaml.parse(examples[2].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + epicId: undefined, + }, + }); + + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(12, 42, { + title: input.title, + issueType: undefined, + addLabels: undefined, + removeLabels: undefined, + description: input.description, + assigneeIds: [18, 15], + confidential: false, + discussionLocked: true, + epicId: undefined, + labels: 'phase1:label1,phase2:label2', + updatedAt: '2024-05-10T18:00:00.000Z', + dueDate: '2024-09-28', + milestoneId: undefined, + weight: undefined, + stateEvent: undefined, + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`Should ${examples[3].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + let input; + try { + input = yaml.parse(examples[3].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(12, 42, { + title: 'Computer banks to rule the world', + issueType: undefined, + addLabels: undefined, + removeLabels: undefined, + description: input.description, + assigneeIds: [], + confidential: false, + discussionLocked: false, + epicId: undefined, + labels: undefined, + updatedAt: new Date().toISOString(), + dueDate: undefined, + milestoneId: undefined, + weight: undefined, + stateEvent: 'close', + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`Should ${examples[4].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + let input; + try { + input = yaml.parse(examples[4].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(12, 42, { + title: 'Computer banks to rule the world', + issueType: undefined, + addLabels: undefined, + removeLabels: undefined, + description: input.description, + assigneeIds: [], + confidential: false, + discussionLocked: false, + epicId: undefined, + labels: undefined, + updatedAt: new Date().toISOString(), + dueDate: undefined, + milestoneId: undefined, + weight: undefined, + stateEvent: 'reopen', + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`Should ${examples[5].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + let input; + try { + input = yaml.parse(examples[5].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(12, 42, { + title: input.title, + issueType: undefined, + addLabels: undefined, + removeLabels: undefined, + description: input.description, + assigneeIds: [18, 20], + confidential: false, + discussionLocked: false, + epicId: undefined, + labels: undefined, + updatedAt: new Date().toISOString(), + dueDate: undefined, + milestoneId: input.milestoneId, + weight: undefined, + stateEvent: undefined, + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`Should ${examples[6].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + let input; + try { + input = yaml.parse(examples[6].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(12, 42, { + title: input.title, + issueType: undefined, + addLabels: undefined, + removeLabels: undefined, + description: input.description, + assigneeIds: [], + confidential: false, + discussionLocked: false, + epicId: undefined, + labels: input.labels, + updatedAt: new Date().toISOString(), + dueDate: undefined, + milestoneId: input.milestoneId, + weight: input.weight, + stateEvent: undefined, + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`Should ${examples[7].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + let input; + try { + input = yaml.parse(examples[7].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(12, 42, { + title: input.title, + issueType: undefined, + addLabels: undefined, + removeLabels: undefined, + description: input.description, + assigneeIds: [], + confidential: input.confidential, + discussionLocked: false, + epicId: undefined, + labels: input.labels, + updatedAt: new Date().toISOString(), + dueDate: undefined, + milestoneId: input.milestoneId, + weight: input.weight, + stateEvent: undefined, + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`Should ${examples[8].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + let input; + try { + input = yaml.parse(examples[8].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(12, 42, { + title: input.title, + issueType: undefined, + addLabels: undefined, + removeLabels: undefined, + description: input.description, + assigneeIds: [], + confidential: false, + discussionLocked: input.discussionLocked, + epicId: undefined, + labels: input.labels, + updatedAt: new Date().toISOString(), + dueDate: undefined, + milestoneId: input.milestoneId, + weight: input.weight, + stateEvent: undefined, + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it(`Should ${examples[9].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + let input; + try { + input = yaml.parse(examples[9].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(12, 42, { + title: input.title, + issueType: undefined, + addLabels: undefined, + removeLabels: input.removeLabels, + description: input.description, + assigneeIds: [], + confidential: false, + discussionLocked: false, + epicId: undefined, + labels: input.labels, + updatedAt: new Date().toISOString(), + dueDate: undefined, + milestoneId: input.milestoneId, + weight: input.weight, + stateEvent: undefined, + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + it(`Should ${examples[10].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + let input; + try { + input = yaml.parse(examples[10].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(12, 42, { + title: input.title, + issueType: undefined, + addLabels: undefined, + removeLabels: input.removeLabels, + description: input.description, + assigneeIds: [], + confidential: false, + discussionLocked: false, + epicId: undefined, + labels: input.labels, + updatedAt: new Date().toISOString(), + dueDate: undefined, + milestoneId: input.milestoneId, + weight: input.weight, + stateEvent: undefined, + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + it(`Should ${examples[11].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + let input; + try { + input = yaml.parse(examples[11].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(12, 42, { + title: input.title, + issueType: input.issueType, + addLabels: undefined, + removeLabels: input.removeLabels, + description: input.description, + assigneeIds: [], + confidential: false, + discussionLocked: false, + epicId: undefined, + labels: input.labels, + updatedAt: new Date().toISOString(), + dueDate: undefined, + milestoneId: input.milestoneId, + weight: input.weight, + stateEvent: undefined, + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.examples.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.examples.ts new file mode 100644 index 0000000..8686a66 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.examples.ts @@ -0,0 +1,258 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; +import { commonGitlabConfigExample } from '../commonGitlabConfig'; + +export const examples: TemplateExample[] = [ + { + description: 'Edit a GitLab issue with minimal options', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'EditIssues', + action: 'gitlab:issue:edit', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Modified Test Issue', + description: 'This is a modified description of the issue', + }, + }, + ], + }), + }, + { + description: 'Edit a GitLab issue with assignees and date options', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'EditIssues', + action: 'gitlab:issue:edit', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Test Issue', + assignees: [18], + description: 'This is the edited description of the issue', + updatedAt: '2024-05-10T18:00:00.000Z', + dueDate: '2024-09-28', + }, + }, + ], + }), + }, + { + description: 'Create a GitLab Issue with several options', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'EditIssues', + action: 'gitlab:issue:edit', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Test Edit Issue', + assignees: [18, 15], + description: 'This is the description of the issue', + confidential: false, + updatedAt: '2024-05-10T18:00:00.000Z', + dueDate: '2024-09-28', + discussionLocked: true, + epicId: 1, + labels: 'phase1:label1,phase2:label2', + }, + }, + ], + }), + }, + { + description: 'Edit a gitlab issue to change its state to close', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'EditIssues', + action: 'gitlab:issue:edit', + input: { + ...commonGitlabConfigExample, + projectId: 12, + stateEvent: 'close', + }, + }, + ], + }), + }, + { + description: 'Edit a gitlab issue to change its state to reopened', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'EditIssues', + action: 'gitlab:issue:edit', + input: { + ...commonGitlabConfigExample, + projectId: 12, + stateEvent: 'reopen', + }, + }, + ], + }), + }, + { + description: + 'Edit a gitlab issue to assign it to multiple users and set milestone', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'EditIssues', + action: 'gitlab:issue:edit', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Test issue with milestone', + assignees: [18, 20], + description: 'This issue has milestone set', + milestoneId: 5, + }, + }, + ], + }), + }, + { + description: 'Edit a gitlab issue to add weight and update labels', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'EditIssues', + action: 'gitlab:issue:edit', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Issue with weight and labels', + description: 'This issue has weight and new labels', + weight: 3, + labels: 'bug,urgent', + }, + }, + ], + }), + }, + { + description: 'Edit a gitlab issue to make it confidential', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'EditIssues', + action: 'gitlab:issue:edit', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Confidential Issue', + description: 'This issue is confidential', + confidential: true, + }, + }, + ], + }), + }, + { + description: 'Edit a gitlab issue to lock the discussion', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'EditIssues', + action: 'gitlab:issue:edit', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Locked Discussion Issue', + description: 'This discussion on this issue is locked', + discussionLocked: true, + }, + }, + ], + }), + }, + { + description: 'Edit a gitlab issue to remove labels and update milestone', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'EditIssues', + action: 'gitlab:issue:edit', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Issue with labels removed and milestone updated', + description: 'This issue has labels removed and milestone updated', + removeLabels: 'phase1:label1', + milestoneId: 6, + }, + }, + ], + }), + }, + { + description: 'Edit a gitlab issue to remove some labels and new ones', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'EditIssues', + action: 'gitlab:issue:edit', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Issue with labels updated', + description: 'This issue has labels removed and new ones added', + removeLabels: 'bug,urgent', + labels: 'enhancement:documentation', + }, + }, + ], + }), + }, + { + description: 'Edit a gitlab issue to change issue type and add labels', + example: yaml.stringify({ + steps: [ + { + id: 'gitlabIssue', + name: 'EditIssues', + action: 'gitlab:issue:edit', + input: { + ...commonGitlabConfigExample, + projectId: 12, + title: 'Issue with type and labels', + description: 'This issue has been changes and new labels added', + labels: 'task,high-priority', + issueType: 'task', + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.test.ts new file mode 100644 index 0000000..a16236a --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.test.ts @@ -0,0 +1,213 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import { ScmIntegrations } from '@backstage/integration'; +import { IssueType } from '../commonGitlabConfig'; +import { editGitlabIssueAction } from './gitlabIssueEdit'; +import { mockServices } from '@backstage/backend-test-utils'; + +const mockGitlabClient = { + Issues: { + edit: jest.fn(), + }, +}; +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('gitlab:issue:edit', () => { + beforeEach(() => { + jest.clearAllMocks(); + jest.useFakeTimers({ + now: new Date(1988, 5, 3, 12, 0, 0), + }); + }); + + afterEach(() => { + jest.useRealTimers(); + }); + + const config = mockServices.rootConfig({ + data: { + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'myIntegrationsToken', + apiBaseUrl: 'https://gitlab.com/api/v4', + }, + ], + }, + }, + }); + const integrations = ScmIntegrations.fromConfig(config); + + const action = editGitlabIssueAction({ integrations }); + + it('should return a Gitlab issue when called with minimal input params', async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + title: 'Computer banks to rule the world', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + }); + + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(123, 42, { + title: 'Computer banks to rule the world', + issueType: undefined, + addLabels: undefined, + removeLabels: undefined, + description: undefined, + assigneeIds: [], + confidential: false, + discussionLocked: false, + epicId: undefined, + labels: undefined, + updatedAt: new Date().toISOString(), + dueDate: undefined, + milestoneId: undefined, + weight: undefined, + stateEvent: undefined, + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it('should return a Gitlab issue when called with oAuth Token', async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + title: 'Computer banks to rule the world', + token: 'myAwesomeToken', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + }); + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(123, 42, { + title: 'Computer banks to rule the world', + issueType: undefined, + addLabels: undefined, + removeLabels: undefined, + description: undefined, + assigneeIds: [], + confidential: false, + discussionLocked: false, + epicId: undefined, + labels: undefined, + updatedAt: new Date().toISOString(), + dueDate: undefined, + milestoneId: undefined, + weight: undefined, + stateEvent: undefined, + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); + + it('should return a Gitlab issue when modified with several input params', async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + issueIid: 42, + issueType: IssueType.INCIDENT, + title: 'Computer banks to rule the world', + description: + 'this issue should kickstart research on instruments to sight the stars', + dueDate: '2025-08-20', + token: 'myAwesomeToken', + assignees: [3, 14, 15], + labels: 'operation:mindcrime', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.Issues.edit.mockResolvedValue({ + id: 123, + iid: 42, + web_url: 'https://gitlab.com/hangar18-/issues/42', + }); + + await action.handler({ + ...mockContext, + }); + + expect(mockGitlabClient.Issues.edit).toHaveBeenCalledWith(123, 42, { + title: 'Computer banks to rule the world', + issueType: 'incident', + addLabels: undefined, + removeLabels: undefined, + description: + 'this issue should kickstart research on instruments to sight the stars', + assigneeIds: [3, 14, 15], + confidential: false, + discussionLocked: false, + epicId: undefined, + labels: 'operation:mindcrime', + updatedAt: new Date().toISOString(), + dueDate: '2025-08-20', + milestoneId: undefined, + weight: undefined, + stateEvent: undefined, + }); + + expect(mockContext.output).toHaveBeenCalledWith('issueId', 123); + expect(mockContext.output).toHaveBeenCalledWith('issueIid', 42); + expect(mockContext.output).toHaveBeenCalledWith( + 'issueUrl', + 'https://gitlab.com/hangar18-/issues/42', + ); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.ts new file mode 100644 index 0000000..bb3e717 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabIssueEdit.ts @@ -0,0 +1,310 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { InputError } from '@backstage/errors'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { IssueStateEvent, IssueType } from '../commonGitlabConfig'; +import { examples } from './gitlabIssueEdit.examples'; +import { checkEpicScope, convertDate, getClient, parseRepoUrl } from '../util'; +import { EditIssueOptions, IssueSchema } from '@gitbeaker/rest'; +import { getErrorMessage } from './helpers'; + +/** + * Creates a `gitlab:issue:edit` Scaffolder action. + * + * @param options - Templating configuration. + * @public + */ +export const editGitlabIssueAction = (options: { + integrations: ScmIntegrationRegistry; +}) => { + const { integrations } = options; + return createTemplateAction({ + id: 'gitlab:issue:edit', + description: 'Edit a Gitlab issue.', + examples, + schema: { + input: { + repoUrl: z => + z.string({ + description: `Accepts the format 'gitlab.com?repo=project_name&owner=group_name' where 'project_name' is the repository name and 'group_name' is a group or username`, + }), + token: z => + z + .string({ + description: 'The token to use for authorization to GitLab', + }) + .optional(), + projectId: z => + z.number({ + description: + 'The global ID or URL-encoded path of the project owned by the authenticated user.', + }), + issueIid: z => + z.number({ + description: "The internal ID of a project's issue", + }), + addLabels: z => + z + .string({ + description: + 'Comma-separated label names to add to an issue. If a label does not already exist, this creates a new project label and assigns it to the issue.', + }) + .optional(), + assignees: z => + z + .array(z.number(), { + description: 'IDs of the users to assign the issue to.', + }) + .optional(), + confidential: z => + z + .boolean({ + description: 'Updates an issue to be confidential.', + }) + .optional(), + description: z => + z + .string({ + description: + 'The description of an issue. Limited to 1,048,576 characters.', + }) + .max(1048576) + .optional(), + discussionLocked: z => + z + .boolean({ + description: + 'Flag indicating if the issue discussion is locked. If the discussion is locked only project members can add or edit comments.', + }) + .optional(), + dueDate: z => + z + .string({ + description: + 'The due date. Date time string in the format YYYY-MM-DD, for example 2016-03-11.', + }) + .regex(/^\d{4}-\d{2}-\d{2}$/, 'Invalid date format. Use YYYY-MM-DD') + .optional(), + epicId: z => + z + .number({ + description: + 'ID of the epic to add the issue to. Valid values are greater than or equal to 0.', + }) + .min(0, 'Valid values should be equal or greater than zero') + .optional(), + issueType: z => + z + .nativeEnum(IssueType, { + description: + 'Updates the type of issue. One of issue, incident, test_case or task.', + }) + .optional(), + labels: z => + z + .string({ + description: + 'Comma-separated label names for an issue. Set to an empty string to unassign all labels. If a label does not already exist, this creates a new project label and assigns it to the issue.', + }) + .optional(), + milestoneId: z => + z + .number({ + description: + 'The global ID of a milestone to assign the issue to. Set to 0 or provide an empty value to unassign a milestone', + }) + .optional(), + removeLabels: z => + z + .string({ + description: + 'Comma-separated label names to remove from an issue.', + }) + .optional(), + stateEvent: z => + z + .nativeEnum(IssueStateEvent, { + description: + 'The state event of an issue. To close the issue, use close, and to reopen it, use reopen.', + }) + .optional(), + title: z => + z + .string({ + description: 'The title of an issue.', + }) + .optional(), + updatedAt: z => + z + .string({ + description: + 'When the issue was updated. Date time string, ISO 8601 formatted', + }) + .regex( + /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?Z$/, + 'Invalid date format. Use YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.SSSZ', + ) + .optional(), + weight: z => + z + .number({ + description: 'The issue weight', + }) + .min(0, 'Valid values should be equal or greater than zero') + .max(10, 'Valid values should be equal or less than 10') + .optional(), + }, + output: { + issueUrl: z => + z.string({ + description: 'Issue WebUrl', + }), + projectId: z => + z.number({ + description: 'The project id the issue belongs to WebUrl', + }), + issueId: z => + z.number({ + description: 'The issues Id', + }), + issueIid: z => + z.number({ + description: "The issues internal ID of a project's issue", + }), + state: z => + z.string({ + description: 'The state event of an issue', + }), + title: z => + z.string({ + description: 'The title of an issue.', + }), + updatedAt: z => + z.string({ + description: 'The last updated time of the issue.', + }), + }, + }, + async handler(ctx) { + try { + const { + repoUrl, + projectId, + title, + addLabels, + removeLabels, + issueIid, + description, + confidential = false, + assignees = [], + updatedAt = '', + dueDate, + discussionLocked = false, + epicId, + labels, + issueType, + milestoneId, + stateEvent, + weight, + token, + } = ctx.input; + + const { host } = parseRepoUrl(repoUrl, integrations); + const api = getClient({ host, integrations, token }); + + let isEpicScoped = false; + + isEpicScoped = await ctx.checkpoint({ + key: `issue.edit.is.scoped.${projectId}.${epicId}`, + fn: async () => { + if (epicId) { + const scoped = await checkEpicScope(api, projectId, epicId); + + if (scoped) { + ctx.logger.info('Epic is within Project Scope'); + } else { + ctx.logger.warn( + 'Chosen epic is not within the Project Scope. The issue will be created without an associated epic.', + ); + } + return scoped; + } + return false; + }, + }); + + const mappedUpdatedAt = convertDate( + String(updatedAt), + new Date().toISOString(), + ); + + const editIssueOptions: EditIssueOptions = { + addLabels, + assigneeIds: assignees, + confidential, + description, + discussionLocked, + dueDate, + epicId: isEpicScoped ? epicId : undefined, + issueType, + labels, + milestoneId, + removeLabels, + stateEvent, + title, + updatedAt: mappedUpdatedAt, + weight, + }; + + const editedIssue = await ctx.checkpoint({ + key: `issue.edit.${projectId}.${issueIid}`, + fn: async () => { + const response = (await api.Issues.edit( + projectId, + issueIid, + editIssueOptions, + )) as IssueSchema; + + return { + issueId: response.id, + issueUrl: response.web_url, + projectId: response.project_id, + issueIid: response.iid, + title: response.title, + state: response.state, + updatedAt: response.updated_at, + }; + }, + }); + + ctx.output('issueId', editedIssue.issueId); + ctx.output('projectId', editedIssue.projectId); + ctx.output('issueUrl', editedIssue.issueUrl); + ctx.output('issueIid', editedIssue.issueIid); + ctx.output('title', editedIssue.title); + ctx.output('state', editedIssue.state); + ctx.output('updatedAt', editedIssue.updatedAt); + } catch (error: any) { + // Handling other errors + throw new InputError( + `Failed to edit/modify GitLab issue: ${getErrorMessage(error)}`, + ); + } + }, + }); +}; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.examples.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.examples.test.ts new file mode 100644 index 0000000..27f39fe --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.examples.test.ts @@ -0,0 +1,355 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { TemplateAction } from '@backstage/plugin-scaffolder-node'; +import { createPublishGitlabMergeRequestAction } from './gitlabMergeRequest'; +import { createMockDirectory } from '@backstage/backend-test-utils'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import { examples } from './gitlabMergeRequest.examples'; +import yaml from 'yaml'; + +const mockGitlabClient = { + Namespaces: { + show: jest.fn(), + }, + Branches: { + create: jest.fn(), + }, + Commits: { + create: jest.fn(() => ({ id: 'mockId' })), + }, + MergeRequests: { + create: jest.fn(async (_: any) => { + return { + default_branch: 'main', + }; + }), + show: jest.fn(async (_: any) => { + return { + default_branch: 'main', + }; + }), + edit: jest.fn(async (_: any) => { + return { + default_branch: 'main', + }; + }), + }, + MergeRequestApprovals: { + allApprovalRules: jest.fn(async (_: any) => { + return [ + { + id: 123, + name: 'rule1', + rule_type: 'regular', + eligible_approvers: [ + { + id: 123, + username: 'John Smith', + }, + { + id: 456, + username: 'Jane Doe', + }, + ], + approvals_required: 1, + users: [], + contains_hidden_groups: false, + report_type: null, + section: null, + source_rule: { approvals_required: 1 }, + overridden: false, + }, + { + id: 456, + name: 'All Members', + rule_type: 'any_approver', + eligible_approvers: [], + approvals_required: 1, + users: [], + groups: [], + contains_hidden_groups: false, + report_type: null, + section: null, + source_rule: { approvals_required: 1 }, + overridden: false, + }, + ]; + }), + }, + Projects: { + create: jest.fn(), + show: jest.fn(async (_: any) => { + return { + default_branch: 'main', + }; + }), + }, + Users: { + current: jest.fn(), + all: jest.fn(async (userOptions: { username: string }) => { + const users: string[] = ['John Smith', 'my-assignee']; + if (!users.includes(userOptions.username)) + throw new Error('user does not exist'); + else + return [ + { + id: 123, + }, + ]; + }), + }, +}; + +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('createGitLabMergeRequest', () => { + let instance: TemplateAction; + + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); + + beforeEach(() => { + jest.clearAllMocks(); + + mockDir.clear(); + + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'token', + apiBaseUrl: 'https://api.gitlab.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + instance = createPublishGitlabMergeRequestAction({ integrations }); + }); + + describe('createGitLabMergeRequestWithAssignee', () => { + it(`Should ${examples[0].description}`, async () => { + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const input = yaml.parse(examples[0].example).steps[0].input; + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'This MR is really good', + removeSourceBranch: false, + assigneeId: 123, + }, + ); + }); + + it('assignee is not set when a valid assignee username is not passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'This is an important change', + removeSourceBranch: false, + targetPath: 'Subdirectory', + assingnee: 'John Doe', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'This is an important change', + removeSourceBranch: false, + assigneeId: undefined, + }, + ); + }); + }); + + describe('createGitLabMergeRequestWithRemoveBranch', () => { + it(`Should ${examples[1].description}`, async () => { + const input = yaml.parse(examples[1].example).steps[0].input; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { description: 'This MR is really good', removeSourceBranch: true }, + ); + }); + }); + + describe('createGitLabMergeRequestWithSpecifiedTargetBranch', () => { + it(`Should ${examples[2].description}`, async () => { + const input = yaml.parse(examples[2].example).steps[0].input; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Projects.show).not.toHaveBeenCalled(); + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'test', + ); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'test', + 'Create my new MR', + { description: 'This MR is really good', removeSourceBranch: false }, + ); + expect(ctx.output).toHaveBeenCalledWith('targetBranchName', 'test'); + }); + }); + + describe('createGitLabMergeRequestWithCommitAction', () => { + it(`Should ${examples[3].description}`, async () => { + const input = yaml.parse(examples[3].example).steps[0].input; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'Create my new MR', + [ + { + action: 'create', + filePath: 'source/foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + }); + + it(`Should ${examples[4].description}`, async () => { + const input = yaml.parse(examples[4].example).steps[0].input; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'Create my new MR', + [ + { + action: 'delete', + filePath: 'source/foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + }); + + it(`Should ${examples[5].description}`, async () => { + const input = yaml.parse(examples[5].example).steps[0].input; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'Create my new MR', + [ + { + action: 'update', + filePath: 'source/foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + }); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.examples.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.examples.ts new file mode 100644 index 0000000..8bed461 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.examples.ts @@ -0,0 +1,142 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; + +export const examples: TemplateExample[] = [ + { + description: 'Create a merge request with a specific assignee', + example: yaml.stringify({ + steps: [ + { + id: 'createMergeRequest', + action: 'publish:gitlab:merge-request', + name: 'Create a Merge Request', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + description: 'This MR is really good', + sourcePath: './path/to/my/changes', + branchName: 'new-mr', + assignee: 'my-assignee', + }, + }, + ], + }), + }, + { + description: + 'Create a merge request with removal of source branch after merge', + example: yaml.stringify({ + steps: [ + { + id: 'createMergeRequest', + action: 'publish:gitlab:merge-request', + name: 'Create a Merge Request', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + description: 'This MR is really good', + sourcePath: './path/to/my/changes', + branchName: 'new-mr', + removeSourceBranch: true, + }, + }, + ], + }), + }, + { + description: 'Create a merge request with a target branch', + example: yaml.stringify({ + steps: [ + { + id: 'createMergeRequest', + action: 'publish:gitlab:merge-request', + name: 'Create a Merge Request', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + description: 'This MR is really good', + sourcePath: './path/to/my/changes', + branchName: 'new-mr', + targetBranchName: 'test', + targetPath: 'Subdirectory', + }, + }, + ], + }), + }, + { + description: 'Create a merge request with a commit action as create', + example: yaml.stringify({ + steps: [ + { + id: 'createMergeRequest', + action: 'publish:gitlab:merge-request', + name: 'Create a Merge Request', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'MR description', + commitAction: 'create', + targetPath: 'source', + }, + }, + ], + }), + }, + { + description: 'Create a merge request with a commit action as delete', + example: yaml.stringify({ + steps: [ + { + id: 'createMergeRequest', + action: 'publish:gitlab:merge-request', + name: 'Create a Merge Request', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'MR description', + commitAction: 'delete', + targetPath: 'source', + }, + }, + ], + }), + }, + { + description: 'Create a merge request with a commit action as update', + example: yaml.stringify({ + steps: [ + { + id: 'createMergeRequest', + action: 'publish:gitlab:merge-request', + name: 'Create a Merge Request', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'MR description', + commitAction: 'update', + targetPath: 'source', + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.test.ts new file mode 100644 index 0000000..0cc1ca6 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.test.ts @@ -0,0 +1,1511 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { TemplateAction } from '@backstage/plugin-scaffolder-node'; +import { createPublishGitlabMergeRequestAction } from './gitlabMergeRequest'; +import { createMockDirectory } from '@backstage/backend-test-utils'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; + +const mockGitlabClient = { + Namespaces: { + show: jest.fn(), + }, + Branches: { + create: jest.fn(), + show: jest.fn(async (_repoID: string | number, name: string) => { + if (['main', 'existing-branch'].includes(name)) { + return { + name, + merged: name === 'main', + protected: name === 'main', + default: name === 'main', + developers_can_push: name !== 'main', + developers_can_merge: name !== 'main', + can_push: name !== 'main', + web_url: `https://foo.bar.baz/owner/repo/-/tree/${name}`, + commit: { message: 'last change' }, + }; + } + throw new Error(`Unknown branch ${name}`); + }), + }, + Commits: { + create: jest.fn(() => ({ id: 'mockId' })), + }, + MergeRequests: { + create: jest.fn(async (repoId: string) => { + if (repoId === 'owner/repo-without-approval-rule-license') { + return { + iid: 6, + }; + } + if (repoId === 'owner/repo-without-approvals') { + return { + iid: 5, + }; + } + return { + default_branch: 'main', + iid: 4, + }; + }), + show: jest.fn(async (repoId: string, iid: number) => { + if (repoId === 'owner/repo-without-approval-rule-license' && iid === 6) { + return { + iid: 6, + }; + } + if (repoId === 'owner/repo' && iid === 4) { + return { + iid: 4, + }; + } else if (repoId === 'owner/repo-without-approvals' && iid === 5) { + return { + iid: 5, + }; + } + return { + default_branch: 'main', + }; + }), + edit: jest.fn(async (_: any) => { + return { + default_branch: 'main', + }; + }), + }, + MergeRequestApprovals: { + allApprovalRules: jest.fn( + async (repoId: string, options: { mergerequestIId: number }) => { + if ( + repoId === 'owner/repo-without-approvals' && + options.mergerequestIId === 5 + ) { + return []; + } + if ( + repoId === 'owner/repo-without-approval-rule-license' && + options.mergerequestIId === 6 + ) { + throw new Error('Not Found', { + cause: { + description: '404 Not found', + }, + }); + } + return [ + { + id: 123, + name: 'rule1', + rule_type: 'regular', + eligible_approvers: [ + { + id: 234, + username: 'Bob Vance', + }, + { + id: 345, + username: 'Dina Fox', + }, + ], + approvals_required: 1, + users: [], + contains_hidden_groups: false, + report_type: null, + section: null, + source_rule: { approvals_required: 1 }, + overridden: false, + }, + { + id: 456, + name: 'All Members', + rule_type: 'any_approver', + eligible_approvers: [], + approvals_required: 1, + users: [], + groups: [], + contains_hidden_groups: false, + report_type: null, + section: null, + source_rule: { approvals_required: 1 }, + overridden: false, + }, + ]; + }, + ), + }, + Projects: { + create: jest.fn(), + show: jest.fn(async (_: any) => { + return { + default_branch: 'main', + }; + }), + }, + Users: { + all: jest.fn(async (userOptions: { username: string }) => { + switch (userOptions.username) { + case 'John Smith': + return [ + { + id: 123, + }, + ]; + case 'Bob Vance': + return [ + { + id: 234, + }, + ]; + case 'Jane Doe': + return [ + { + id: 456, + }, + ]; + default: + throw new Error('user does not exist'); + } + }), + }, + Repositories: { + allRepositoryTrees: jest.fn( + async ( + repoID: string | number, + options: { ref: string; recursive: boolean; path: string | undefined }, + ) => { + if (repoID !== 'owner/repo') throw new Error('repo does not exist'); + if (options.recursive === false) throw new Error('malformed options'); + else { + return [ + { + id: 'a1e8f8d745cc87e3a9248358d9352bb7f9a0aeba', + name: 'auto.txt', + type: 'blob', + path: 'source/auto.txt', + mode: '040000', + }, + ]; + } + }, + ), + }, + RepositoryFiles: { + show: jest.fn( + async (repoID: string | number, filePath: string, ref: string) => { + if (repoID !== 'owner/repo') throw new Error('repo does not exist'); + if (filePath !== 'source/auto.txt') + throw new Error('filePath does not exist'); + return { + file_name: 'auto.txt', + file_path: 'source/auto.txt', + size: 11, + encoding: 'base64', + content: 'Zm9vLWJhci1iYXo=', + content_sha256: + '269dce1a5bb90188b2d9cf542a7c30e410c7d8251e34a97bfea56062df51ae23', + ref, + blob_id: 'a1e8f8d745cc87e3a9248358d9352bb7f9a0aeba', + commit_id: 'd5a3ff139356ce33e37e73add446f16869741b50', + last_commit_id: '570e7b2abdd848b95f2f578043fc23bd6f6fd24d', + }; + }, + ), + }, +}; + +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('createGitLabMergeRequest', () => { + let instance: TemplateAction; + + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); + + beforeEach(() => { + jest.clearAllMocks(); + + mockDir.clear(); + + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'token', + apiBaseUrl: 'https://api.gitlab.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + instance = createPublishGitlabMergeRequestAction({ integrations }); + }); + + describe('createGitLabMergeRequestWithSpecifiedTargetBranch', () => { + it('removeSourceBranch is false by default when not passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + targetBranchName: 'test', + description: 'This MR is really good', + targetPath: 'Subdirectory', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + const ctx = createMockActionContext({ + input, + workspacePath, + }); + await instance.handler(ctx); + + expect(mockGitlabClient.Projects.show).not.toHaveBeenCalled(); + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'test', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'test', + 'Create my new MR', + { description: 'This MR is really good', removeSourceBranch: false }, + ); + expect(ctx.output).toHaveBeenCalledWith('targetBranchName', 'test'); + }); + }); + + describe('createGitLabMergeRequestWithoutRemoveBranch', () => { + it('removeSourceBranch is false by default when not passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'This MR is really good', + targetPath: 'Subdirectory', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Projects.show).toHaveBeenCalledWith('owner/repo'); + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { description: 'This MR is really good', removeSourceBranch: false }, + ); + expect(ctx.output).toHaveBeenCalledWith('targetBranchName', 'main'); + }); + }); + + describe('createGitLabMergeRequestWithRemoveBranch', () => { + it('removeSourceBranch is true when true is passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'MR description', + removeSourceBranch: true, + targetPath: 'Subdirectory', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { description: 'MR description', removeSourceBranch: true }, + ); + }); + + it('removeSourceBranch is false when false is passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'other MR description', + removeSourceBranch: false, + targetPath: 'Subdirectory', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'other MR description', + removeSourceBranch: false, + }, + ); + }); + }); + + describe('createGitLabMergeRequestWithAssignee', () => { + it('assignee is set correctly when a valid assignee username is passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'This is an important change', + removeSourceBranch: false, + targetPath: 'Subdirectory', + assignee: 'John Smith', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'This is an important change', + removeSourceBranch: false, + assigneeId: 123, + }, + ); + }); + + it('assignee is not set when a valid assignee username is not passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'This is an important change', + removeSourceBranch: false, + targetPath: 'Subdirectory', + assingnee: 'John Doe', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'This is an important change', + removeSourceBranch: false, + assigneeId: undefined, + }, + ); + }); + }); + describe('createGitLabMergeRequestWithoutAssignee', () => { + it('merge request is successfully created without an assignee when assignee username is not passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'This is an important change', + removeSourceBranch: false, + targetPath: 'Subdirectory', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'This is an important change', + removeSourceBranch: false, + }, + ); + }); + + it('merge request is successfully created without an assignee when assignee is not found in Gitlab', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'This is an important change', + removeSourceBranch: false, + targetPath: 'Subdirectory', + assignee: 'Unknown', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'This is an important change', + removeSourceBranch: false, + }, + ); + }); + + it('use workspacePath as default when no sourcePath or targetPath is specified', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'This MR is really good', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'Create my new MR', + expect.arrayContaining([ + { + action: 'create', + filePath: 'irrelevant/bar.txt', + encoding: 'base64', + content: 'Tm90aGluZyB0byBzZWUgaGVyZQ==', + execute_filemode: false, + }, + { + action: 'create', + filePath: 'source/foo.txt', + encoding: 'base64', + content: 'SGVsbG8gdGhlcmUh', + execute_filemode: false, + }, + ]), + ); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'This MR is really good', + removeSourceBranch: false, + }, + ); + }); + }); + + describe('createGitlabMergeRequestWithReviewers', () => { + it('no dedicated reviewers are set when a no reviewer are passed in options but mr approval reviewers are set when flag activated', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'This is an important change', + removeSourceBranch: false, + targetPath: 'Subdirectory', + assignee: 'John Smith', + assignReviewersFromApprovalRules: true, + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'This is an important change', + removeSourceBranch: false, + assigneeId: 123, + }, + ); + expect( + mockGitlabClient.MergeRequestApprovals.allApprovalRules, + ).toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.edit).toHaveBeenCalledWith( + 'owner/repo', + 4, + { + reviewerIds: [234, 345], // Approval Rule Members + }, + ); + }); + + it('reviewer is set correctly when a valid reviewer username is passed in options in combination with MR approval rules', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'This is an important change', + removeSourceBranch: false, + targetPath: 'Subdirectory', + assignee: 'John Smith', + reviewers: ['Jane Doe', 'Bob Vance'], + assignReviewersFromApprovalRules: true, + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'This is an important change', + removeSourceBranch: false, + assigneeId: 123, + reviewerIds: [456, 234], // Jane Doe and Bob Vance + }, + ); + expect( + mockGitlabClient.MergeRequestApprovals.allApprovalRules, + ).toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.edit).toHaveBeenCalledWith( + 'owner/repo', + 4, + { + reviewerIds: [234, 345, 456], // Approval Rule Members + Jane Doe (individual reviewer) but no duplicates (Bob Vance) + }, + ); + }); + + it('reviewer is set correctly when a valid reviewer username is passed in options in combination with deactivated approval rules', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'This is an important change', + removeSourceBranch: false, + targetPath: 'Subdirectory', + assignee: 'John Smith', + reviewers: ['Jane Doe', 'Bob Vance'], + assignReviewersFromApprovalRules: false, + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'This is an important change', + removeSourceBranch: false, + assigneeId: 123, + reviewerIds: [456, 234], // Jane Doe and Bob Vance + }, + ); + expect( + mockGitlabClient.MergeRequestApprovals.allApprovalRules, + ).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.edit).not.toHaveBeenCalled(); + }); + + it('reviewer is set correctly when a valid reviewer username is passed in options and no MR rules exist and approval rules are activated', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo-without-approvals&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'This is an important change', + removeSourceBranch: false, + targetPath: 'Subdirectory', + assignee: 'John Smith', + reviewers: ['Jane Doe', 'Bob Vance'], + assignReviewersFromApprovalRules: true, + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo-without-approvals', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo-without-approvals', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'This is an important change', + removeSourceBranch: false, + assigneeId: 123, + reviewerIds: [456, 234], // Jane Doe and Bob Vance + }, + ); + expect( + mockGitlabClient.MergeRequestApprovals.allApprovalRules, + ).toHaveBeenCalledWith('owner/repo-without-approvals', { + mergerequestIId: 5, + }); + expect(mockGitlabClient.MergeRequests.edit).not.toHaveBeenCalled(); + }); + + it('reviewer is set correctly when a valid reviewer username is passed in options and MR rules are not included in the Gitlab license (404)', async () => { + const input = { + repoUrl: + 'gitlab.com?repo=repo-without-approval-rule-license&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'This is an important change', + removeSourceBranch: false, + targetPath: 'Subdirectory', + assignee: 'John Smith', + reviewers: ['Jane Doe', 'Bob Vance'], + assignReviewersFromApprovalRules: true, + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + ctx.logger.warn = jest.fn(); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo-without-approval-rule-license', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo-without-approval-rule-license', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'This is an important change', + removeSourceBranch: false, + assigneeId: 123, + reviewerIds: [456, 234], // Jane Doe and Bob Vance + }, + ); + expect( + mockGitlabClient.MergeRequestApprovals.allApprovalRules, + ).toHaveBeenCalledWith('owner/repo-without-approval-rule-license', { + mergerequestIId: 6, + }); + expect(mockGitlabClient.MergeRequests.edit).not.toHaveBeenCalled(); + expect(ctx.logger.warn).toHaveBeenCalledWith( + 'Failed to retrieve approval rules for MR 6: Error: Not Found. Proceeding with MR creation without reviewers from approval rules.', + ); + expect(ctx.output).toHaveBeenCalledWith('targetBranchName', 'main'); // This ensures that the MR scaffolder step finishes successfully and all errors are caught. + }); + + it('assignee is not set when a valid assignee username is not passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'This is an important change', + removeSourceBranch: false, + targetPath: 'Subdirectory', + reviewers: ['John Doe'], + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'This is an important change', + removeSourceBranch: false, + assigneeId: undefined, + reviewerIds: [], + }, + ); + }); + }); + + describe('createGitLabMergeRequestWithoutCommitAction', () => { + it('default commitAction is auto', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'This MR is really good', + targetPath: 'source', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!', 'auto.txt': 'File exist' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'Create my new MR', + expect.arrayContaining([ + { + action: 'update', + filePath: 'source/auto.txt', + content: 'RmlsZSBleGlzdA==', + encoding: 'base64', + execute_filemode: false, + }, + { + action: 'create', + filePath: 'source/foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ]), + ); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'This MR is really good', + removeSourceBranch: false, + }, + ); + }); + }); + + describe('createGitLabMergeRequestWithCommitAction', () => { + it('commitAction is create when create is passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'MR description', + commitAction: 'create', + targetPath: 'source', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'Create my new MR', + [ + { + action: 'create', + filePath: 'source/foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'MR description', + removeSourceBranch: false, + }, + ); + }); + + it('commitAction is update when update is passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'MR description', + commitAction: 'update', + targetPath: 'source', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'Create my new MR', + [ + { + action: 'update', + filePath: 'source/foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'MR description', + removeSourceBranch: false, + }, + ); + }); + + it('commitAction is auto when auto is passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'MR description', + commitAction: 'auto', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!', 'auto.txt': 'File exist' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'Create my new MR', + expect.arrayContaining([ + { + action: 'update', + filePath: 'source/auto.txt', + content: 'RmlsZSBleGlzdA==', + encoding: 'base64', + execute_filemode: false, + }, + { + action: 'create', + filePath: 'source/foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ]), + ); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'MR description', + removeSourceBranch: false, + }, + ); + }); + + it('commitAction is auto when auto is passed in options with targetPath', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'MR description', + commitAction: 'auto', + targetPath: 'source', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!', 'auto.txt': 'File exist' }, + irrelevant: {}, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'Create my new MR', + expect.arrayContaining([ + { + action: 'update', + filePath: 'source/auto.txt', + content: 'RmlsZSBleGlzdA==', + encoding: 'base64', + execute_filemode: false, + }, + { + action: 'create', + filePath: 'source/foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ]), + ); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'MR description', + removeSourceBranch: false, + }, + ); + }); + + it('commitAction is delete when delete is passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'other MR description', + commitAction: 'delete', + targetPath: 'source', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'Create my new MR', + [ + { + action: 'delete', + filePath: 'source/foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'other MR description', + removeSourceBranch: false, + }, + ); + }); + it('commitAction skip skips commit', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'MR description', + commitAction: 'skip', + }; + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'MR description', + removeSourceBranch: false, + }, + ); + }); + it('commitAction skip reuses existing branch', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'existing-branch', + description: 'MR description', + commitAction: 'skip', + }; + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.show).toHaveBeenCalledWith( + 'owner/repo', + 'existing-branch', + ); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'existing-branch', + 'main', + 'Create my new MR', + { + description: 'MR description', + removeSourceBranch: false, + }, + ); + }); + it('commitAction auto skips unmodified files', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'MR description', + commitAction: 'auto', + }; + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!', 'auto.txt': 'foo-bar-baz' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'Create my new MR', + expect.arrayContaining([ + { + action: 'create', + filePath: 'source/foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ]), + ); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'MR description', + removeSourceBranch: false, + }, + ); + }); + }); + + describe('with sourcePath', () => { + it('creates a Merge Request with only relevant files', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'MR description', + sourcePath: 'source', + commitAction: 'create', + }; + + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'Create my new MR', + [ + { + action: 'create', + filePath: 'foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + }); + + it('creates a Merge Request with only relevant files placed under different targetPath', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'MR description', + sourcePath: 'source', + targetPath: 'target', + commitAction: 'create', + }; + + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'Create my new MR', + [ + { + action: 'create', + filePath: 'target/foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + }); + + it('should not allow to use files outside of the workspace', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'MR description', + sourcePath: '../../test', + commitAction: 'create', + }; + + const ctx = createMockActionContext({ input, workspacePath }); + + await expect(instance.handler(ctx)).rejects.toThrow( + 'Relative path is not allowed to refer to a directory outside its parent', + ); + }); + }); + describe('with labels', () => { + it('handles single label', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'MR description', + commitAction: 'skip', + labels: 'single-label', + }; + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'MR description', + removeSourceBranch: false, + labels: 'single-label', + }, + ); + }); + it('handles array of labels', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + description: 'MR description', + commitAction: 'skip', + labels: ['foo', 'bar', 'baz'], + }; + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); + expect(mockGitlabClient.Commits.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + 'Create my new MR', + { + description: 'MR description', + removeSourceBranch: false, + labels: ['foo', 'bar', 'baz'], + }, + ); + }); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.ts new file mode 100644 index 0000000..66c72b4 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.ts @@ -0,0 +1,523 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + createTemplateAction, + parseRepoUrl, + SerializedFile, + serializeDirectoryContents, +} from '@backstage/plugin-scaffolder-node'; +import { + Camelize, + CommitAction, + ExpandedMergeRequestSchema, + Gitlab, + RepositoryTreeSchema, + SimpleUserSchema, +} from '@gitbeaker/rest'; +import path from 'path'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { InputError } from '@backstage/errors'; +import { + LoggerService, + resolveSafeChildPath, +} from '@backstage/backend-plugin-api'; +import { createGitlabApi, getErrorMessage } from './helpers'; +import { examples } from './gitlabMergeRequest.examples'; +import { createHash } from 'crypto'; + +function computeSha256(file: SerializedFile): string { + const hash = createHash('sha256'); + hash.update(file.content); + return hash.digest('hex'); +} + +async function getFileAction( + fileInfo: { file: SerializedFile; targetPath?: string }, + target: { repoID: string; branch: string }, + api: InstanceType, + logger: LoggerService, + remoteFiles: RepositoryTreeSchema[], + defaultCommitAction: + | 'create' + | 'delete' + | 'update' + | 'skip' + | 'auto' = 'auto', +): Promise<'create' | 'delete' | 'update' | 'skip'> { + if (defaultCommitAction === 'auto') { + const filePath = path.join(fileInfo.targetPath ?? '', fileInfo.file.path); + + if (remoteFiles?.some(remoteFile => remoteFile.path === filePath)) { + try { + const targetFile = await api.RepositoryFiles.show( + target.repoID, + filePath, + target.branch, + ); + if (computeSha256(fileInfo.file) === targetFile.content_sha256) { + return 'skip'; + } + } catch (error) { + logger.warn( + `Unable to retrieve detailed information for remote file ${filePath}`, + ); + } + return 'update'; + } + return 'create'; + } + return defaultCommitAction; +} + +async function getReviewersFromApprovalRules( + api: InstanceType, + mergerequestIId: number, + repoID: string, + ctx: any, +): Promise { + try { + // Because we don't know the code owners before the MR is created, we can't check the approval rules beforehand. + // Getting the approval rules beforehand is very difficult, especially, because of the inheritance rules for groups. + // Code owners take a moment to be processed and added to the approval rules after the MR is created. + + let mergeRequest: + | ExpandedMergeRequestSchema + | Camelize = await api.MergeRequests.show( + repoID, + mergerequestIId, + ); + + while ( + mergeRequest.detailed_merge_status === 'preparing' || + mergeRequest.detailed_merge_status === 'approvals_syncing' || + mergeRequest.detailed_merge_status === 'checking' + ) { + mergeRequest = await api.MergeRequests.show(repoID, mergeRequest.iid); + ctx.logger.info(`${mergeRequest.detailed_merge_status}`); + } + + const approvalRules = await api.MergeRequestApprovals.allApprovalRules( + repoID, + { + mergerequestIId: mergeRequest.iid, + }, + ); + + return approvalRules + .filter(rule => rule.eligible_approvers !== undefined) + .map(rule => { + return rule.eligible_approvers as SimpleUserSchema[]; + }) + .flat() + .map(user => user.id); + } catch (e) { + ctx.logger.warn( + `Failed to retrieve approval rules for MR ${mergerequestIId}: ${getErrorMessage( + e, + )}. Proceeding with MR creation without reviewers from approval rules.`, + ); + return []; + } +} + +const commitActions = ['create', 'delete', 'update', 'skip', 'auto'] as const; + +/** + * Create a new action that creates a GitLab merge request. + * + * @public + */ +export const createPublishGitlabMergeRequestAction = (options: { + integrations: ScmIntegrationRegistry; +}) => { + const { integrations } = options; + + return createTemplateAction({ + id: 'publish:gitlab:merge-request', + examples, + schema: { + input: { + repoUrl: z => + z.string().describe(`\ +Accepts the format \`gitlab.com?repo=project_name&owner=group_name\` where \ +\`project_name\` is the repository name and \`group_name\` is a group or username`), + title: z => z.string().describe('The name for the merge request'), + description: z => + z + .string() + .optional() + .describe('The description of the merge request'), + branchName: z => + z.string().describe('The source branch name of the merge request'), + targetBranchName: z => + z + .string() + .optional() + .describe( + 'The target branch name of the merge request (defaults to _default branch of repository_)', + ), + sourcePath: z => + z.string().optional().describe(`\ +Subdirectory of working directory to copy changes from. \ +For reasons of backward compatibility, any specified \`targetPath\` input will \ +be applied in place of an absent/falsy value for this input. \ +Circumvent this behavior using \`.\``), + targetPath: z => + z + .string() + .optional() + .describe('Subdirectory of repository to apply changes to'), + token: z => + z + .string() + .optional() + .describe('The token to use for authorization to GitLab'), + commitAction: z => + z.enum(commitActions).optional().describe(`\ +The action to be used for \`git\` commit. Defaults to the custom \`auto\` action provided by Backstage, +which uses additional API calls in order to detect whether to \`create\`, \`update\` or \`skip\` each source file.`), + /** @deprecated projectID passed as query parameters in the repoUrl */ + projectid: z => + z + .string() + .optional() + .describe( + `\ +Project ID/Name(slug) of the GitLab Project +_deprecated_: \`projectid\` passed as query parameters in the \`repoUrl\``, + ), + removeSourceBranch: z => + z + .boolean() + .optional() + .describe( + 'Option to delete source branch once the MR has been merged. Default: `false`', + ), + assignee: z => + z + .string() + .optional() + .describe('User this merge request will be assigned to'), + reviewers: z => + z + .string() + .array() + .optional() + .describe('Users that will be assigned as reviewers'), + assignReviewersFromApprovalRules: z => + z + .boolean() + .optional() + .describe( + 'Automatically assign reviewers from the approval rules of the MR. Includes `CODEOWNERS`', + ), + labels: z => + z + .string() + .or(z.string().array()) + .optional() + .describe('Labels with which to tag the created merge request'), + }, + output: { + targetBranchName: z => + z.string().describe('Target branch name of the merge request'), + projectid: z => z.string().describe('GitLab Project id/Name(slug)'), + projectPath: z => z.string().describe('GitLab Project path'), + mergeRequestUrl: z => + z.string().describe('Link to the merge request in GitLab'), + }, + }, + async handler(ctx) { + const { + assignee, + reviewers, + branchName, + targetBranchName, + description, + repoUrl, + removeSourceBranch, + targetPath, + sourcePath, + title, + token, + labels, + } = ctx.input; + + const { owner, repo, project } = parseRepoUrl(repoUrl, integrations); + const repoID = project ? project : `${owner}/${repo}`; + + const api = createGitlabApi({ + integrations, + token, + repoUrl, + }); + + let assigneeId: number | undefined = undefined; + + if (assignee !== undefined) { + try { + const assigneeUser = await api.Users.all({ username: assignee }); + assigneeId = assigneeUser[0].id; + } catch (e) { + ctx.logger.warn( + `Failed to find gitlab user id for ${assignee}: ${getErrorMessage( + e, + )}. Proceeding with MR creation without an assignee.`, + ); + } + } + + let reviewerIds: number[] | undefined = undefined; // Explicitly set to undefined. Strangely, passing an empty array to the API will result the other options being undefined also being explicitly passed to the Gitlab API call (e.g. assigneeId) + if (reviewers !== undefined) { + reviewerIds = ( + await Promise.all( + reviewers.map(async reviewer => { + try { + const reviewerUser = await api.Users.all({ + username: reviewer, + }); + return reviewerUser[0].id; + } catch (e) { + ctx.logger.warn( + `Failed to find gitlab user id for ${reviewer}: ${e}. Proceeding with MR creation without reviewer.`, + ); + return undefined; + } + }), + ) + ).filter(id => id !== undefined) as number[]; + } + + let fileRoot: string; + if (sourcePath) { + fileRoot = resolveSafeChildPath(ctx.workspacePath, sourcePath); + } else if (targetPath) { + // for backward compatibility + fileRoot = resolveSafeChildPath(ctx.workspacePath, targetPath); + } else { + fileRoot = ctx.workspacePath; + } + + const fileContents = await serializeDirectoryContents(fileRoot, { + gitignore: true, + }); + + let targetBranch = targetBranchName; + if (!targetBranch) { + const projects = await api.Projects.show(repoID); + const defaultBranch = projects.default_branch ?? projects.defaultBranch; + if (typeof defaultBranch !== 'string' || !defaultBranch) { + throw new InputError( + `The branch creation failed. Target branch was not provided, and could not find default branch from project settings. Project: ${JSON.stringify( + project, + )}`, + ); + } + targetBranch = defaultBranch; + } + + let remoteFiles: RepositoryTreeSchema[] = []; + if ((ctx.input.commitAction ?? 'auto') === 'auto') { + try { + remoteFiles = await api.Repositories.allRepositoryTrees(repoID, { + ref: targetBranch, + recursive: true, + path: targetPath ?? undefined, + }); + } catch (e) { + ctx.logger.warn( + `Could not retrieve the list of files for ${repoID} (branch: ${targetBranch}) : ${getErrorMessage( + e, + )}`, + ); + } + } + const actions: CommitAction[] = + ctx.input.commitAction === 'skip' + ? [] + : ( + ( + await Promise.all( + fileContents.map(async file => { + const action = await getFileAction( + { file, targetPath }, + { repoID, branch: targetBranch! }, + api, + ctx.logger, + remoteFiles, + ctx.input.commitAction, + ); + return { file, action }; + }), + ) + ).filter(o => o.action !== 'skip') as { + file: SerializedFile; + action: CommitAction['action']; + }[] + ).map(({ file, action }) => ({ + action, + filePath: targetPath + ? path.posix.join(targetPath, file.path) + : file.path, + encoding: 'base64', + content: file.content.toString('base64'), + execute_filemode: file.executable, + })); + + let createBranch = actions.length > 0; + + try { + const branch = await api.Branches.show(repoID, branchName); + if (createBranch) { + const mergeRequests = await api.MergeRequests.all({ + projectId: repoID, + source_branch: branchName, + }); + + if (mergeRequests.length > 0) { + // If an open MR exists, include the MR link in the error message + throw new InputError( + `The branch creation failed because the branch already exists at: ${branch.web_url}. Additionally, there is a Merge Request for this branch: ${mergeRequests[0].web_url}`, + ); + } else { + // If no open MR, just notify about the existing branch + throw new InputError( + `The branch creation failed because the branch already exists at: ${branch.web_url}.`, + ); + } + } + + ctx.logger.info( + `Using existing branch ${branchName} without modification.`, + ); + } catch (e) { + if (e instanceof InputError) { + throw e; + } + createBranch = true; + } + + if (createBranch) { + try { + await api.Branches.create(repoID, branchName, String(targetBranch)); + } catch (e) { + throw new InputError( + `The branch creation failed. Please check that your repo does not already contain a branch named '${branchName}'. ${getErrorMessage( + e, + )}`, + ); + } + } + + await ctx.checkpoint({ + key: `commit.to.${repoID}.${branchName}`, + fn: async () => { + if (actions.length) { + try { + const commit = await api.Commits.create( + repoID, + branchName, + title, + actions, + ); + return commit.id; + } catch (e) { + throw new InputError( + `Committing the changes to ${branchName} failed. Please check that none of the files created by the template already exists. ${getErrorMessage( + e, + )}`, + ); + } + } + return null; + }, + }); + + const { mrId, mrWebUrl } = await ctx.checkpoint({ + key: `create.mr.${repoID}.${branchName}`, + fn: async () => { + try { + const mergeRequest = await api.MergeRequests.create( + repoID, + branchName, + String(targetBranch), + title, + { + description, + removeSourceBranch: removeSourceBranch + ? removeSourceBranch + : false, + assigneeId, + reviewerIds, + labels, + }, + ); + return { + mrId: mergeRequest.iid, + mrWebUrl: mergeRequest.web_url ?? mergeRequest.webUrl, + }; + } catch (e) { + throw new InputError( + `Merge request creation failed. ${getErrorMessage(e)}`, + ); + } + }, + }); + + await ctx.checkpoint({ + key: `create.mr.assign.reviewers.${repoID}.${branchName}`, + fn: async () => { + if (ctx.input.assignReviewersFromApprovalRules) { + try { + const reviewersFromApprovalRules = + await getReviewersFromApprovalRules(api, mrId, repoID, ctx); + if (reviewersFromApprovalRules.length > 0) { + const eligibleUserIds = new Set([ + ...reviewersFromApprovalRules, + ...(reviewerIds ?? []), + ]); + + const mergeRequest = await api.MergeRequests.edit( + repoID, + mrId, + { + reviewerIds: Array.from(eligibleUserIds), + }, + ); + return { + mrWebUrl: mergeRequest.web_url ?? mergeRequest.webUrl, + }; + } + } catch (e) { + ctx.logger.warn( + `Failed to assign reviewers from approval rules: ${getErrorMessage( + e, + )}.`, + ); + } + } + return { mrWebUrl }; + }, + }); + + ctx.output('projectid', repoID); + ctx.output('targetBranchName', targetBranch); + ctx.output('projectPath', repoID); + ctx.output('mergeRequestUrl', mrWebUrl as string); + }, + }); +}; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.examples.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.examples.test.ts new file mode 100644 index 0000000..4153547 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.examples.test.ts @@ -0,0 +1,322 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ScmIntegrations } from '@backstage/integration'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import { createTriggerGitlabPipelineAction } from './gitlabPipelineTrigger'; +import { examples } from './gitlabPipelineTrigger.examples'; +import yaml from 'yaml'; +import { mockServices } from '@backstage/backend-test-utils'; + +const mockGitlabClient = { + PipelineTriggerTokens: { + create: jest.fn(), + trigger: jest.fn(), + remove: jest.fn(), + }, +}; +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('gitlab:pipeline:trigger', () => { + beforeEach(() => { + jest.resetModules(); + jest.clearAllMocks(); + jest.useFakeTimers({ + now: new Date(1988, 5, 3, 12, 0, 0), + }); + }); + + afterEach(() => { + jest.useRealTimers(); + }); + + const config = mockServices.rootConfig({ + data: { + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'glpat-abcdef', + apiBaseUrl: 'https://gitlab.com/api/v4', + }, + ], + }, + }, + }); + const integrations = ScmIntegrations.fromConfig(config); + + const action = createTriggerGitlabPipelineAction({ integrations }); + + it(`should ${examples[0].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + tokenDescription: 'Gitlab sample pipeline', + branch: 'main', + }, + workspacePath: 'repository', + }); + + mockGitlabClient.PipelineTriggerTokens.create.mockResolvedValue({ + id: 42, + description: 'Gitlab sample pipeline', + createdAt: new Date().toISOString(), + last_used: null, + token: 'abcdd-ghijkl', + updated_at: new Date().toISOString(), + owner: null, + }); + + mockGitlabClient.PipelineTriggerTokens.trigger.mockResolvedValue({ + id: 99, + web_url: 'https://gitlab.com/hangar18-/pipelines/99', + }); + + let input; + try { + input = yaml.parse(examples[0].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.PipelineTriggerTokens.create).toHaveBeenCalledWith( + input.projectId, + input.tokenDescription, + ); + + expect(mockGitlabClient.PipelineTriggerTokens.trigger).toHaveBeenCalledWith( + input.projectId, + 'main', + 'abcdd-ghijkl', + { variables: input.variables }, + ); + + expect(mockGitlabClient.PipelineTriggerTokens.remove).toHaveBeenCalledWith( + input.projectId, + 42, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'pipelineUrl', + 'https://gitlab.com/hangar18-/pipelines/99', + ); + }); + + it(`should ${examples[1].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + tokenDescription: 'Gitlab sample pipeline', + branch: 'main', + }, + workspacePath: 'repository', + }); + + mockGitlabClient.PipelineTriggerTokens.create.mockResolvedValue({ + id: 42, + description: 'Gitlab sample pipeline', + createdAt: new Date().toISOString(), + last_used: null, + token: 'abcdd-ghijkl', + updated_at: new Date().toISOString(), + owner: null, + }); + + mockGitlabClient.PipelineTriggerTokens.trigger.mockResolvedValue({ + id: 99, + web_url: 'https://gitlab.com/hangar18-/pipelines/99', + }); + + let input; + try { + input = yaml.parse(examples[1].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.PipelineTriggerTokens.create).toHaveBeenCalledWith( + input.projectId, + input.tokenDescription, + ); + + expect(mockGitlabClient.PipelineTriggerTokens.trigger).toHaveBeenCalledWith( + input.projectId, + 'main', + 'abcdd-ghijkl', + { variables: input.variables }, + ); + + expect(mockGitlabClient.PipelineTriggerTokens.remove).toHaveBeenCalledWith( + input.projectId, + 42, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'pipelineUrl', + 'https://gitlab.com/hangar18-/pipelines/99', + ); + }); + it(`should ${examples[2].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + tokenDescription: 'Gitlab sample pipeline', + branch: 'main', + }, + workspacePath: 'repository', + }); + + mockGitlabClient.PipelineTriggerTokens.create.mockResolvedValue({ + id: 42, + description: 'Gitlab sample pipeline', + createdAt: new Date().toISOString(), + last_used: null, + token: 'abcdd-ghijkl', + updated_at: new Date().toISOString(), + owner: null, + }); + + mockGitlabClient.PipelineTriggerTokens.trigger.mockResolvedValue({ + id: 99, + web_url: 'https://gitlab.com/hangar18-/pipelines/99', + }); + + let input; + try { + input = yaml.parse(examples[2].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.PipelineTriggerTokens.create).toHaveBeenCalledWith( + input.projectId, + input.tokenDescription, + ); + + expect(mockGitlabClient.PipelineTriggerTokens.trigger).toHaveBeenCalledWith( + input.projectId, + 'main', + 'abcdd-ghijkl', + { variables: input.variables }, + ); + + expect(mockGitlabClient.PipelineTriggerTokens.remove).toHaveBeenCalledWith( + input.projectId, + 42, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'pipelineUrl', + 'https://gitlab.com/hangar18-/pipelines/99', + ); + }); + it(`should ${examples[3].description}`, async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + tokenDescription: 'Gitlab sample pipeline', + branch: 'main', + }, + workspacePath: 'repository', + }); + + mockGitlabClient.PipelineTriggerTokens.create.mockResolvedValue({ + id: 42, + description: 'Gitlab sample pipeline', + createdAt: new Date().toISOString(), + last_used: null, + token: 'abcdd-ghijkl', + updated_at: new Date().toISOString(), + owner: null, + }); + + mockGitlabClient.PipelineTriggerTokens.trigger.mockResolvedValue({ + id: 99, + web_url: 'https://gitlab.com/hangar18-/pipelines/99', + }); + + let input; + try { + input = yaml.parse(examples[3].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect(mockGitlabClient.PipelineTriggerTokens.create).toHaveBeenCalledWith( + input.projectId, + input.tokenDescription, + ); + + expect(mockGitlabClient.PipelineTriggerTokens.trigger).toHaveBeenCalledWith( + input.projectId, + 'main', + 'abcdd-ghijkl', + { variables: input.variables }, + ); + + expect(mockGitlabClient.PipelineTriggerTokens.remove).toHaveBeenCalledWith( + input.projectId, + 42, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'pipelineUrl', + 'https://gitlab.com/hangar18-/pipelines/99', + ); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.examples.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.examples.ts new file mode 100644 index 0000000..f213fcd --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.examples.ts @@ -0,0 +1,105 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; +import { commonGitlabConfigExample } from '../commonGitlabConfig'; + +export const examples: TemplateExample[] = [ + { + description: 'Trigger a GitLab Project Pipeline', + example: yaml.stringify({ + steps: [ + { + id: 'triggerPipeline', + name: 'Trigger Project Pipeline', + action: 'gitlab:pipeline:trigger', + input: { + ...commonGitlabConfigExample, + projectId: 12, + tokenDescription: + 'This is the text that will appear in the pipeline token', + token: 'glpt-xxxxxxxxxxxx', + branch: 'main', + variables: { var_one: 'one', var_two: 'two' }, + }, + }, + ], + }), + }, + { + description: 'Trigger a GitLab Project Pipeline with No Variables', + example: yaml.stringify({ + steps: [ + { + id: 'triggerPipeline', + name: 'Trigger Project Pipeline', + action: 'gitlab:pipeline:trigger', + input: { + ...commonGitlabConfigExample, + projectId: 12, + tokenDescription: + 'This is the text that will appear in the pipeline token', + token: 'glpt-xxxxxxxxxxxx', + branch: 'main', + variables: {}, + }, + }, + ], + }), + }, + { + description: 'Trigger a GitLab Project Pipeline with Single Variables', + example: yaml.stringify({ + steps: [ + { + id: 'triggerPipeline', + name: 'Trigger Project Pipeline', + action: 'gitlab:pipeline:trigger', + input: { + ...commonGitlabConfigExample, + projectId: 12, + tokenDescription: + 'This is the text that will appear in the pipeline token', + token: 'glpt-xxxxxxxxxxxx', + branch: 'main', + variables: { var_one: 'one' }, + }, + }, + ], + }), + }, + { + description: 'Trigger a GitLab Project Pipeline with Multiple Variables', + example: yaml.stringify({ + steps: [ + { + id: 'triggerPipeline', + name: 'Trigger Project Pipeline', + action: 'gitlab:pipeline:trigger', + input: { + ...commonGitlabConfigExample, + projectId: 12, + tokenDescription: + 'This is the text that will appear in the pipeline token', + token: 'glpt-xxxxxxxxxxxx', + branch: 'main', + variables: { var_one: 'one', var_two: 'two', var_three: 'three' }, + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.test.ts new file mode 100644 index 0000000..89498c5 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.test.ts @@ -0,0 +1,266 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ScmIntegrations } from '@backstage/integration'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import { createTriggerGitlabPipelineAction } from './gitlabPipelineTrigger'; +import { mockServices } from '@backstage/backend-test-utils'; + +const mockGitlabClient = { + PipelineTriggerTokens: { + create: jest.fn(), + trigger: jest.fn(), + remove: jest.fn(), + }, +}; +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('gitlab:pipeline:trigger', () => { + beforeEach(() => { + jest.resetModules(); + jest.clearAllMocks(); + jest.useFakeTimers({ + now: new Date(1988, 5, 3, 12, 0, 0), + }); + }); + + afterEach(() => { + jest.useRealTimers(); + }); + + const config = mockServices.rootConfig({ + data: { + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'glpat-abcdef', + apiBaseUrl: 'https://gitlab.com/api/v4', + }, + ], + }, + }, + }); + const integrations = ScmIntegrations.fromConfig(config); + + const action = createTriggerGitlabPipelineAction({ integrations }); + + it('should return a Pipeline Token Id', async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + tokenDescription: 'My cool pipeline token', + branch: 'main', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.PipelineTriggerTokens.create.mockResolvedValue({ + id: 42, + description: 'My cool pipeline token', + createdAt: new Date().toISOString(), + last_used: null, + token: 'glptt-abcdef', + updated_at: new Date().toISOString(), + owner: null, + }); + + mockGitlabClient.PipelineTriggerTokens.trigger.mockResolvedValue({ + id: 99, + web_url: 'https://gitlab.com/hangar18-/pipelines/99', + }); + + await action.handler({ + ...mockContext, + }); + + expect(mockGitlabClient.PipelineTriggerTokens.create).toHaveBeenCalledWith( + 123, + 'My cool pipeline token', + ); + + expect(mockGitlabClient.PipelineTriggerTokens.trigger).toHaveBeenCalledWith( + 123, + 'main', + 'glptt-abcdef', + { variables: undefined }, + ); + + expect(mockGitlabClient.PipelineTriggerTokens.remove).toHaveBeenCalledWith( + 123, + 42, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'pipelineUrl', + 'https://gitlab.com/hangar18-/pipelines/99', + ); + }); + + it('should throw error if pipeline token cannot be created', async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + tokenDescription: 'My cool pipeline token', + branch: 'main', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.PipelineTriggerTokens.create.mockRejectedValue( + new Error('Failed to create token'), + ); + + await expect( + action.handler({ + ...mockContext, + }), + ).rejects.toThrow('Failed to create token'); + + expect(mockGitlabClient.PipelineTriggerTokens.create).toHaveBeenCalledWith( + 123, + 'My cool pipeline token', + ); + + expect( + mockGitlabClient.PipelineTriggerTokens.trigger, + ).not.toHaveBeenCalled(); + + expect( + mockGitlabClient.PipelineTriggerTokens.remove, + ).not.toHaveBeenCalled(); + }); + + it('throw error if pipeline cannot be triggered', async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + tokenDescription: 'My cool pipeline token', + branch: 'main', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.PipelineTriggerTokens.create.mockResolvedValue({ + id: 42, + description: 'My cool pipeline token', + createdAt: new Date().toISOString(), + last_used: null, + token: 'glptt-abcdef', + updated_at: new Date().toISOString(), + owner: null, + }); + + mockGitlabClient.PipelineTriggerTokens.trigger.mockRejectedValue( + new Error('Failed to trigger pipeline'), + ); + + await expect( + action.handler({ + ...mockContext, + }), + ).rejects.toThrow('Failed to trigger pipeline'); + + expect(mockGitlabClient.PipelineTriggerTokens.create).toHaveBeenCalledWith( + 123, + 'My cool pipeline token', + ); + + expect(mockGitlabClient.PipelineTriggerTokens.trigger).toHaveBeenCalledWith( + 123, + 'main', + 'glptt-abcdef', + { variables: undefined }, + ); + + expect(mockGitlabClient.PipelineTriggerTokens.remove).toHaveBeenCalledWith( + 123, + 42, + ); + }); + + it('should clean up pipeline token on failure', async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + tokenDescription: 'My cool pipeline token', + branch: 'main', + }, + workspacePath: 'seen2much', + }); + + mockGitlabClient.PipelineTriggerTokens.create.mockResolvedValue({ + id: 42, + description: 'My cool pipeline token', + createdAt: new Date().toISOString(), + last_used: null, + token: 'glptt-abcdef', + updated_at: new Date().toISOString(), + owner: null, + }); + + mockGitlabClient.PipelineTriggerTokens.trigger.mockRejectedValue( + new Error('Failed to trigger pipeline'), + ); + + await expect( + action.handler({ + ...mockContext, + }), + ).rejects.toThrow('Failed to trigger pipeline'); + + expect(mockGitlabClient.PipelineTriggerTokens.remove).toHaveBeenCalledWith( + 123, + 42, + ); + }); + + it('should succeed trigger and pass variables', async () => { + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 123, + tokenDescription: 'My cool pipeline token', + branch: 'main', + variables: { var_one: 'val1', var_two: 'val2' }, + }, + workspacePath: 'seen2much', + }); + + await expect( + action.handler({ + ...mockContext, + }), + ).rejects.toThrow('Failed to trigger pipeline'); + + expect(mockGitlabClient.PipelineTriggerTokens.trigger).toHaveBeenCalledWith( + 123, + 'main', + 'glptt-abcdef', + { variables: { var_one: 'val1', var_two: 'val2' } }, + ); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.ts new file mode 100644 index 0000000..ccb29c1 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabPipelineTrigger.ts @@ -0,0 +1,173 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { InputError } from '@backstage/errors'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { + ExpandedPipelineSchema, + PipelineTriggerTokenSchema, +} from '@gitbeaker/rest'; +import { getClient, parseRepoUrl } from '../util'; +import { examples } from './gitlabPipelineTrigger.examples'; +import { getErrorMessage } from './helpers'; + +/** + * Creates a `gitlab:pipeline:trigger` Scaffolder action. + * + * @param options - Templating configuration. + * @public + */ +export const createTriggerGitlabPipelineAction = (options: { + integrations: ScmIntegrationRegistry; +}) => { + const { integrations } = options; + return createTemplateAction({ + id: 'gitlab:pipeline:trigger', + description: 'Triggers a GitLab Pipeline.', + examples, + schema: { + input: { + repoUrl: z => + z.string({ + description: `Accepts the format 'gitlab.com?repo=project_name&owner=group_name' where 'project_name' is the repository name and 'group_name' is a group or username`, + }), + token: z => + z + .string({ + description: 'The token to use for authorization to GitLab', + }) + .optional(), + projectId: z => + z.number({ + description: 'Project Id', + }), + tokenDescription: z => + z.string({ + description: 'Pipeline token description', + }), + branch: z => + z.string({ + description: 'Project branch', + }), + variables: z => + z + .record(z.string(), z.string(), { + description: + 'A object/record of key-valued strings containing the pipeline variables.', + }) + .optional(), + }, + output: { + pipelineUrl: z => + z.string({ + description: 'Pipeline Url', + }), + }, + }, + async handler(ctx) { + let pipelineTriggerToken: string | undefined = undefined; + let pipelineTriggerId: number | undefined = undefined; + + const { repoUrl, projectId, tokenDescription, token, branch, variables } = + ctx.input; + + const { host } = parseRepoUrl(repoUrl, integrations); + const api = getClient({ host, integrations, token }); + + try { + ({ pipelineTriggerToken, pipelineTriggerId } = await ctx.checkpoint({ + key: `create.pipeline.token.${projectId}`, + fn: async () => { + const res = (await api.PipelineTriggerTokens.create( + projectId, + tokenDescription, + )) as PipelineTriggerTokenSchema; + return { + pipelineTriggerToken: res.token, + pipelineTriggerId: res.id, + }; + }, + })); + + if (!pipelineTriggerToken) { + ctx.logger.error( + `Failed to create pipeline token for project ${projectId}.`, + ); + return; + } + ctx.logger.info( + `Pipeline token id ${pipelineTriggerId} created for project ${projectId}.`, + ); + + // Use the pipeline token to trigger the pipeline in the project + const pipelineTriggerResponse = + (await api.PipelineTriggerTokens.trigger( + projectId, + branch, + pipelineTriggerToken, + { variables }, + )) as ExpandedPipelineSchema; + + if (!pipelineTriggerResponse.id) { + ctx.logger.error( + `Failed to trigger pipeline for project ${projectId}.`, + ); + return; + } + + ctx.logger.info( + `Pipeline id ${pipelineTriggerResponse.id} for project ${projectId} triggered.`, + ); + + ctx.output('pipelineUrl', pipelineTriggerResponse.web_url); + } catch (error: any) { + // Handling other errors + throw new InputError( + `Failed to trigger Pipeline: ${getErrorMessage(error)}`, + ); + } finally { + // Delete the pipeline token if it was created + if (pipelineTriggerId) { + try { + await ctx.checkpoint({ + key: `create.delete.token.${projectId}`, + fn: async () => { + if (pipelineTriggerId) { + // to make the current version of TypeScript happy + await api.PipelineTriggerTokens.remove( + projectId, + pipelineTriggerId, + ); + } + }, + }); + ctx.logger.info( + // in version 18.0 of gitlab this was also deleting the pipeline + // this is a problem in gitlab which is fixed in version 18.1 + // https://gitlab.com/gitlab-org/gitlab/-/issues/546669 + `Deleted pipeline trigger token with token id: ${pipelineTriggerId}.`, + ); + } catch (error: any) { + ctx.logger.error( + `Failed to delete pipeline trigger token with token id: ${pipelineTriggerId}.`, + ); + } + } + } + }, + }); +}; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.examples.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.examples.test.ts new file mode 100644 index 0000000..3ad0237 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.examples.test.ts @@ -0,0 +1,449 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import yaml from 'yaml'; +import { createGitlabProjectAccessTokenAction } from './gitlabProjectAccessTokenCreate'; // Adjust the import based on your project structure +import { examples } from './gitlabProjectAccessTokenCreate.examples'; +import { DateTime } from 'luxon'; + +const mockGitlabClient = { + ProjectAccessTokens: { + create: jest.fn(), + }, +}; + +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('gitlab:projectAccessToken:create examples', () => { + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + { + host: 'gitlab.example.com', + apiBaseUrl: 'https://api.gitlab.example.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + const action = createGitlabProjectAccessTokenAction({ integrations }); + + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + }, + }); + + beforeEach(() => { + jest.resetAllMocks(); + }); + + it('Create a GitLab project access token with minimal options.', async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'TOKEN', + username: 'User', + }); + + const input = yaml.parse(examples[0].example).steps[0].input; + await action.handler({ + ...mockContext, + input, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '456', + 'tokenname', + ['read_repository'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('access_token', 'TOKEN'); + }); + + it('Create a GitLab project access token with custom scopes.', async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'TOKEN', + username: 'User', + }); + + const input = yaml.parse(examples[1].example).steps[0].input; + await action.handler({ + ...mockContext, + input, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '789', + 'tokenname', + ['read_registry', 'write_repository'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('access_token', 'TOKEN'); + }); + + it('Create a GitLab project access token with a specified name.', async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'TOKEN', + username: 'User', + }); + + const input = yaml.parse(examples[2].example).steps[0].input; + await action.handler({ + ...mockContext, + input, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '101112', + 'my-custom-token', + ['read_repository'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('access_token', 'TOKEN'); + }); + + it('Create a GitLab project access token with a numeric project ID.', async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'TOKEN', + username: 'User', + }); + + const input = yaml.parse(examples[3].example).steps[0].input; + await action.handler({ + ...mockContext, + input, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + 42, + 'tokenname', + ['read_repository'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('access_token', 'TOKEN'); + }); + + it('Create a GitLab project access token with a specified expired Date.', async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'TOKEN', + username: 'User', + }); + + const input = yaml.parse(examples[4].example).steps[0].input; + await action.handler({ + ...mockContext, + input, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '123', + 'tokenname', + ['read_repository'], + '2024-06-25', + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('access_token', 'TOKEN'); + }); + + it(`should ${examples[5].description}`, async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'personal-access-token', + username: 'gitlab-user', + }); + + const input = yaml.parse(examples[5].example).steps[0].input; + await action.handler({ + ...mockContext, + input, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '456', + 'tokenname', + ['read_repository'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 30, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'access_token', + 'personal-access-token', + ); + }); + + it(`should ${examples[6].description}`, async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'personal-access-token', + username: 'gitlab-user', + }); + + const input = yaml.parse(examples[6].example).steps[0].input; + await action.handler({ + ...mockContext, + input, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '456', + 'full-access-token', + ['read_repository'], + '2024-12-31', + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'access_token', + 'personal-access-token', + ); + }); + + it(`should ${examples[7].description}`, async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'personal-access-token', + username: 'gitlab-user', + }); + + const input = yaml.parse(examples[7].example).steps[0].input; + await action.handler({ + ...mockContext, + input, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '101112', + 'tokenname', + ['read_repository'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'access_token', + 'personal-access-token', + ); + }); + + it(`should ${examples[8].description}`, async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'personal-access-token', + username: 'gitlab-user', + }); + + const input = yaml.parse(examples[8].example).steps[0].input; + await action.handler({ + ...mockContext, + input, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '101112', + 'tokenname', + ['read_repository', 'read_api'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'access_token', + 'personal-access-token', + ); + }); + + it(`should ${examples[9].description}`, async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'personal-access-token', + username: 'gitlab-user', + }); + + const input = yaml.parse(examples[9].example).steps[0].input; + await action.handler({ + ...mockContext, + input, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '101112', + 'tokenname', + ['read_repository'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 10, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'access_token', + 'personal-access-token', + ); + }); + + it(`should ${examples[10].description}`, async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'personal-access-token', + username: 'gitlab-user', + }); + + const input = yaml.parse(examples[10].example).steps[0].input; + await action.handler({ + ...mockContext, + input, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '101112', + 'tokenname', + ['read_repository'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'access_token', + 'personal-access-token', + ); + }); + + it(`should ${examples[11].description}`, async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'personal-access-token', + username: 'gitlab-user', + }); + + const input = yaml.parse(examples[11].example).steps[0].input; + await action.handler({ + ...mockContext, + input, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '101112', + 'tokenname', + ['read_repository'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 50, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'access_token', + 'personal-access-token', + ); + }); + + it(`should ${examples[12].description}`, async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'personal-access-token', + username: 'gitlab-user', + }); + + const input = yaml.parse(examples[12].example).steps[0].input; + await action.handler({ + ...mockContext, + input, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '101112', + 'no-expiry-token', + ['read_repository'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'access_token', + 'personal-access-token', + ); + }); + + it(`should ${examples[13].description}`, async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'personal-access-token', + username: 'gitlab-user', + }); + + const input = yaml.parse(examples[13].example).steps[0].input; + await action.handler({ + ...mockContext, + input, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '101112', + 'tokenname', + ['read_repository'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'access_token', + 'personal-access-token', + ); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.examples.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.examples.ts new file mode 100644 index 0000000..89f8ae6 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.examples.ts @@ -0,0 +1,263 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; + +export const examples: TemplateExample[] = [ + { + description: 'Create a GitLab project access token with minimal options.', + example: yaml.stringify({ + steps: [ + { + id: 'createAccessToken', + action: 'gitlab:projectAccessToken:create', + name: 'Create GitLab Project Access Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '456', + }, + }, + ], + }), + }, + { + description: 'Create a GitLab project access token with custom scopes.', + example: yaml.stringify({ + steps: [ + { + id: 'createAccessToken', + action: 'gitlab:projectAccessToken:create', + name: 'Create GitLab Project Access Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '789', + scopes: ['read_registry', 'write_repository'], + }, + }, + ], + }), + }, + { + description: 'Create a GitLab project access token with a specified name.', + example: yaml.stringify({ + steps: [ + { + id: 'createAccessToken', + action: 'gitlab:projectAccessToken:create', + name: 'Create GitLab Project Access Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '101112', + name: 'my-custom-token', + }, + }, + ], + }), + }, + { + description: + 'Create a GitLab project access token with a numeric project ID.', + example: yaml.stringify({ + steps: [ + { + id: 'createAccessToken', + action: 'gitlab:projectAccessToken:create', + name: 'Create GitLab Project Access Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 42, + }, + }, + ], + }), + }, + { + description: + 'Create a GitLab project access token with a specified expired Date.', + example: yaml.stringify({ + steps: [ + { + id: 'createAccessToken', + action: 'gitlab:projectAccessToken:create', + name: 'Create GitLab Project Access Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '123', + expiresAt: '2024-06-25', + }, + }, + ], + }), + }, + { + description: 'Create a GitLab project access token with an access level', + example: yaml.stringify({ + steps: [ + { + id: 'createAccessToken', + action: 'gitlab:projectAccessToken:create', + name: 'Create GitLab Project Access Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '456', + accessLevel: 30, + }, + }, + ], + }), + }, + { + description: 'Create a GitLab project access token with multiple options', + example: yaml.stringify({ + steps: [ + { + id: 'createAccessToken', + action: 'gitlab:projectAccessToken:create', + name: 'Create GitLab Project Access Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '456', + accessLevel: 40, + name: 'full-access-token', + expiresAt: '2024-12-31', + }, + }, + ], + }), + }, + { + description: + 'Create a GitLab project access token with a token for authorization', + example: yaml.stringify({ + steps: [ + { + id: 'createAccessToken', + action: 'gitlab:projectAccessToken:create', + name: 'Create GitLab Project Access Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '101112', + token: 'personal-access-token', + }, + }, + ], + }), + }, + { + description: 'Create a GitLab project access token with read-only scopes', + example: yaml.stringify({ + steps: [ + { + id: 'createAccessToken', + action: 'gitlab:projectAccessToken:create', + name: 'Create GitLab Project Access Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '101112', + scopes: ['read_repository', 'read_api'], + }, + }, + ], + }), + }, + { + description: 'Create a GitLab project access token with guest access level', + example: yaml.stringify({ + steps: [ + { + id: 'createAccessToken', + action: 'gitlab:projectAccessToken:create', + name: 'Create GitLab Project Access Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '101112', + accessLevel: 10, + }, + }, + ], + }), + }, + { + description: + 'Create a GitLab project access token with maintainer access level', + example: yaml.stringify({ + steps: [ + { + id: 'createAccessToken', + action: 'gitlab:projectAccessToken:create', + name: 'Create GitLab Project Access Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '101112', + accessLevel: 40, + }, + }, + ], + }), + }, + { + description: 'Create a GitLab project access token with owner access level', + example: yaml.stringify({ + steps: [ + { + id: 'createAccessToken', + action: 'gitlab:projectAccessToken:create', + name: 'Create GitLab Project Access Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '101112', + accessLevel: 50, + }, + }, + ], + }), + }, + { + description: + 'Create a GitLab project access token with a specified name and no expiration date', + example: yaml.stringify({ + steps: [ + { + id: 'createAccessToken', + action: 'gitlab:projectAccessToken:create', + name: 'Create GitLab Project Access Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '101112', + name: 'no-expiry-token', + }, + }, + ], + }), + }, + { + description: + 'Create a GitLab project access token for a specific gitlab instance', + example: yaml.stringify({ + steps: [ + { + id: 'createAccessToken', + action: 'gitlab:projectAccessToken:create', + name: 'Create GitLab Project Access Token', + input: { + repoUrl: 'gitlab.example.com?repo=repo&owner=owner', + projectId: '101112', + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.test.ts new file mode 100644 index 0000000..0cbc0fc --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.test.ts @@ -0,0 +1,219 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import { createGitlabProjectAccessTokenAction } from './gitlabProjectAccessTokenCreate'; // Adjust the import based on your project structure +import { DateTime } from 'luxon'; + +const mockGitlabClient = { + ProjectAccessTokens: { + create: jest.fn(), + }, +}; + +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('gitlab:projectAccessToken:create examples', () => { + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'gitlab-token', + apiBaseUrl: 'https://api.gitlab.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + const action = createGitlabProjectAccessTokenAction({ integrations }); + + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + }, + }); + + beforeEach(() => { + jest.resetAllMocks(); + }); + + it('should create a GitLab project access token with minimal options.', async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'gitlab-token', + username: 'gitlab-user', + }); + + await action.handler({ + ...mockContext, + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '987', + }, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '987', + 'tokenname', + ['read_repository'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'access_token', + 'gitlab-token', + ); + }); + + it('should create a GitLab project access token with custom scopes.', async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'gitlab-token', + username: 'gitlab-user', + }); + + await action.handler({ + ...mockContext, + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '987', + scopes: ['read_registry', 'write_repository'], + }, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '987', + 'tokenname', + ['read_registry', 'write_repository'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'access_token', + 'gitlab-token', + ); + }); + + it('should create a GitLab project access token with a specified name.', async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'gitlab-token', + username: 'gitlab-user', + }); + + await action.handler({ + ...mockContext, + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '2110', + name: 'token', + }, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '2110', + 'token', + ['read_repository'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'access_token', + 'gitlab-token', + ); + }); + + it('should create a GitLab project access token with a numeric project ID.', async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'gitlab-token', + username: 'gitlab-user', + }); + + await action.handler({ + ...mockContext, + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 23, + }, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + 23, + 'tokenname', + ['read_repository'], + DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'access_token', + 'gitlab-token', + ); + }); + + it('should create a GitLab project access token with a specified expired Date.', async () => { + mockGitlabClient.ProjectAccessTokens.create.mockResolvedValue({ + token: 'gitlab-token', + username: 'gitlab-user', + }); + + await action.handler({ + ...mockContext, + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '123', + expiresAt: '1999-07-14', + }, + }); + + expect(mockGitlabClient.ProjectAccessTokens.create).toHaveBeenCalledWith( + '123', + 'tokenname', + ['read_repository'], + '1999-07-14', + { + accessLevel: 40, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith( + 'access_token', + 'gitlab-token', + ); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.ts new file mode 100644 index 0000000..47efbda --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectAccessTokenCreate.ts @@ -0,0 +1,145 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { InputError } from '@backstage/errors'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { AccessTokenScopes, Gitlab } from '@gitbeaker/rest'; +import { DateTime } from 'luxon'; +import { getToken } from '../util'; +import { examples } from './gitlabProjectAccessTokenCreate.examples'; + +/** + * Creates a `gitlab:projectAccessToken:create` Scaffolder action. + * + * @param options - Templating configuration. + * @public + */ + +export const createGitlabProjectAccessTokenAction = (options: { + integrations: ScmIntegrationRegistry; +}) => { + const { integrations } = options; + return createTemplateAction({ + id: 'gitlab:projectAccessToken:create', + examples, + schema: { + input: { + projectId: z => + z.union([z.number(), z.string()], { + description: 'Project ID/Name(slug) of the Gitlab Project', + }), + token: z => + z + .string({ + description: 'The token to use for authorization to GitLab', + }) + .optional(), + name: z => + z + .string({ + description: 'Name of Access Key', + }) + .optional(), + repoUrl: z => + z.string({ + description: 'URL to gitlab instance', + }), + accessLevel: z => + z + .number({ + description: + 'Access Level of the Token, 10 (Guest), 20 (Reporter), 30 (Developer), 40 (Maintainer), and 50 (Owner)', + }) + .optional(), + scopes: z => + z + .string({ + description: 'Scopes for a project access token', + }) + .array() + .optional(), + expiresAt: z => + z + .string({ + description: + 'Expiration date of the access token in ISO format (YYYY-MM-DD). If Empty, it will set to the maximum of 365 days.', + }) + .optional(), + }, + output: { + access_token: z => + z.string({ + description: 'Access Token', + }), + }, + }, + async handler(ctx) { + ctx.logger.info(`Creating Token for Project "${ctx.input.projectId}"`); + const { + projectId, + name = 'tokenname', + accessLevel = 40, + scopes = ['read_repository'], + expiresAt, + } = ctx.input; + + const { token, integrationConfig } = getToken(ctx.input, integrations); + + if (!integrationConfig.config.token && token) { + throw new InputError( + `No token available for host ${integrationConfig.config.baseUrl}`, + ); + } + + let api; + + if (!ctx.input.token) { + api = new Gitlab({ + host: integrationConfig.config.baseUrl, + token: token, + }); + } else { + api = new Gitlab({ + host: integrationConfig.config.baseUrl, + oauthToken: token, + }); + } + + const projectAccessToken = await ctx.checkpoint({ + key: `project.access.token.${projectId}.${name}`, + fn: async () => { + const response = await api.ProjectAccessTokens.create( + projectId, + name, + scopes as AccessTokenScopes[], + expiresAt || DateTime.now().plus({ days: 365 }).toISODate()!, + { + accessLevel, + }, + ); + return response.token; + }, + }); + + if (!projectAccessToken) { + throw new Error('Could not create project access token'); + } + + ctx.output('access_token', projectAccessToken); + }, + }); +}; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.examples.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.examples.test.ts new file mode 100644 index 0000000..f94468f --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.examples.test.ts @@ -0,0 +1,189 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import yaml from 'yaml'; +import { createGitlabProjectDeployTokenAction } from './gitlabProjectDeployTokenCreate'; +import { examples } from './gitlabProjectDeployTokenCreate.examples'; + +const mockGitlabClient = { + DeployTokens: { + create: jest.fn(), + }, +}; +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('gitlab:create-deploy-token', () => { + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + const action = createGitlabProjectDeployTokenAction({ integrations }); + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '123', + name: 'tokenname', + username: 'tokenuser', + scopes: ['read_repository'], + }, + }); + + beforeEach(() => { + jest.resetAllMocks(); + }); + + it(`Should ${examples[0].description}`, async () => { + mockGitlabClient.DeployTokens.create.mockResolvedValue({ + token: 'TOKEN', + username: 'User', + }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[0].example).steps[0].input, + }); + + expect(mockGitlabClient.DeployTokens.create).toHaveBeenCalledWith( + 'tokenname', + ['read_registry'], + { + projectId: '456', + username: undefined, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('deploy_token', 'TOKEN'); + expect(mockContext.output).toHaveBeenCalledWith('user', 'User'); + }); + + it(`Should ${examples[1].description}`, async () => { + mockGitlabClient.DeployTokens.create.mockResolvedValue({ + token: 'TOKEN', + username: 'User', + }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[1].example).steps[0].input, + }); + + expect(mockGitlabClient.DeployTokens.create).toHaveBeenCalledWith( + 'tokenname', + ['read_registry', 'write_repository'], + { + projectId: '789', + username: undefined, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('deploy_token', 'TOKEN'); + expect(mockContext.output).toHaveBeenCalledWith('user', 'User'); + }); + + it(`Should ${examples[2].description}`, async () => { + mockGitlabClient.DeployTokens.create.mockResolvedValue({ + token: 'TOKEN', + username: 'User', + }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[2].example).steps[0].input, + }); + + expect(mockGitlabClient.DeployTokens.create).toHaveBeenCalledWith( + 'my-custom-token', + ['read_registry'], + { + projectId: '101112', + username: undefined, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('deploy_token', 'TOKEN'); + expect(mockContext.output).toHaveBeenCalledWith('user', 'User'); + }); + + it(`Should ${examples[3].description}`, async () => { + mockGitlabClient.DeployTokens.create.mockResolvedValue({ + token: 'TOKEN', + username: 'User', + }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[3].example).steps[0].input, + }); + + expect(mockGitlabClient.DeployTokens.create).toHaveBeenCalledWith( + 'tokenname', + ['read_registry'], + { + projectId: 42, + username: undefined, + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('deploy_token', 'TOKEN'); + expect(mockContext.output).toHaveBeenCalledWith('user', 'User'); + }); + + it(`Should ${examples[4].description}`, async () => { + mockGitlabClient.DeployTokens.create.mockResolvedValue({ + token: 'TOKEN', + username: 'User', + }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[4].example).steps[0].input, + }); + + expect(mockGitlabClient.DeployTokens.create).toHaveBeenCalledWith( + 'tokenname', + ['read_registry'], + { + projectId: 42, + username: 'tokenuser', + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('deploy_token', 'TOKEN'); + expect(mockContext.output).toHaveBeenCalledWith('user', 'User'); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.examples.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.examples.ts new file mode 100644 index 0000000..f306ee1 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.examples.ts @@ -0,0 +1,114 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; + +export const examples: TemplateExample[] = [ + { + description: 'Create a GitLab project deploy token with minimal options.', + example: yaml.stringify({ + steps: [ + { + id: 'createDeployToken', + action: 'gitlab:projectDeployToken:create', + name: 'Create GitLab Project Deploy Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '456', + name: 'tokenname', + scopes: ['read_registry'], + }, + }, + ], + }), + }, + { + description: + 'Create a GitLab project deploy token with many custom scopes.', + example: yaml.stringify({ + steps: [ + { + id: 'createDeployToken', + action: 'gitlab:projectDeployToken:create', + name: 'Create GitLab Project Deploy Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '789', + name: 'tokenname', + scopes: ['read_registry', 'write_repository'], + }, + }, + ], + }), + }, + { + description: 'Create a GitLab project deploy token with a specified name.', + example: yaml.stringify({ + steps: [ + { + id: 'createDeployToken', + action: 'gitlab:projectDeployToken:create', + name: 'Create GitLab Project Deploy Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '101112', + name: 'my-custom-token', + scopes: ['read_registry'], + }, + }, + ], + }), + }, + { + description: + 'Create a GitLab project deploy token with a numeric project ID.', + example: yaml.stringify({ + steps: [ + { + id: 'createDeployToken', + action: 'gitlab:projectDeployToken:create', + name: 'Create GitLab Project Deploy Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 42, + name: 'tokenname', + scopes: ['read_registry'], + }, + }, + ], + }), + }, + + { + description: 'Create a GitLab project deploy token with a custom username', + example: yaml.stringify({ + steps: [ + { + id: 'createDeployToken', + action: 'gitlab:projectDeployToken:create', + name: 'Create GitLab Project Deploy Token', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: 42, + name: 'tokenname', + username: 'tokenuser', + scopes: ['read_registry'], + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.test.ts new file mode 100644 index 0000000..4b1c5b5 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.test.ts @@ -0,0 +1,97 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import { createGitlabProjectDeployTokenAction } from './gitlabProjectDeployTokenCreate'; + +const mockGitlabClient = { + DeployTokens: { + create: jest.fn(), + }, +}; +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('gitlab:create-deploy-token', () => { + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + const action = createGitlabProjectDeployTokenAction({ integrations }); + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '123', + name: 'tokenname', + username: 'tokenuser', + scopes: ['read_repository'], + }, + }); + + beforeEach(() => { + jest.resetAllMocks(); + }); + + it('should work when there is a token provided through ctx.input', async () => { + mockGitlabClient.DeployTokens.create.mockResolvedValue({ + token: 'TOKEN', + username: 'User', + }); + + await action.handler({ + ...mockContext, + input: { + repoUrl: 'hosted.gitlab.com?repo=bob&owner=owner', + projectId: '123', + name: 'tokenname', + username: 'tokenuser', + scopes: ['read_repository'], + }, + }); + + expect(mockGitlabClient.DeployTokens.create).toHaveBeenCalledWith( + 'tokenname', + ['read_repository'], + { + projectId: '123', + username: 'tokenuser', + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('deploy_token', 'TOKEN'); + expect(mockContext.output).toHaveBeenCalledWith('user', 'User'); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.ts new file mode 100644 index 0000000..ad7f984 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.ts @@ -0,0 +1,122 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { InputError } from '@backstage/errors'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { DeployTokenScope, Gitlab } from '@gitbeaker/rest'; +import { getToken } from '../util'; +import { examples } from './gitlabProjectDeployTokenCreate.examples'; + +/** + * Creates a `gitlab:projectDeployToken:create` Scaffolder action. + * + * @param options - Templating configuration. + * @public + */ +export const createGitlabProjectDeployTokenAction = (options: { + integrations: ScmIntegrationRegistry; +}) => { + const { integrations } = options; + return createTemplateAction({ + id: 'gitlab:projectDeployToken:create', + examples, + schema: { + input: { + repoUrl: z => + z.string({ + description: `Accepts the format 'gitlab.com?repo=project_name&owner=group_name' where 'project_name' is the repository name and 'group_name' is a group or username`, + }), + token: z => + z + .string({ + description: 'The token to use for authorization to GitLab', + }) + .optional(), + projectId: z => + z.union([z.number(), z.string()], { + description: 'Project ID', + }), + name: z => + z.string({ + description: 'Deploy Token Name', + }), + username: z => + z + .string({ + description: 'Deploy Token Username', + }) + .optional(), + scopes: z => + z.array(z.string(), { + description: 'Scopes', + }), + }, + output: { + deploy_token: z => + z.string({ + description: 'Deploy Token', + }), + user: z => + z.string({ + description: 'User', + }), + }, + }, + async handler(ctx) { + ctx.logger.info(`Creating Token for Project "${ctx.input.projectId}"`); + const { projectId, name, username, scopes } = ctx.input; + const { token, integrationConfig } = getToken(ctx.input, integrations); + + if (scopes.length === 0) { + throw new InputError( + `Could not create token for project "${ctx.input.projectId}": scopes cannot be empty.`, + ); + } + + const api = new Gitlab({ + host: integrationConfig.config.baseUrl, + token: token, + }); + + const { deployToken, deployUsername } = await ctx.checkpoint({ + key: `create.deploy.token.${projectId}.${name}`, + fn: async () => { + const res = await api.DeployTokens.create( + name, + scopes as DeployTokenScope[], + { + projectId, + username, + }, + ); + + if (!res.hasOwnProperty('token')) { + throw new InputError(`No deploy_token given from gitlab instance`); + } + + return { + deployToken: res.token as string, + deployUsername: res.username, + }; + }, + }); + + ctx.output('deploy_token', deployToken); + ctx.output('user', deployUsername); + }, + }); +}; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.examples.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.examples.test.ts new file mode 100644 index 0000000..df99638 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.examples.test.ts @@ -0,0 +1,91 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { TemplateAction } from '@backstage/plugin-scaffolder-node'; +import { createGitlabProjectMigrateAction } from './gitlabProjectMigrate'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import { createMockDirectory } from '@backstage/backend-test-utils'; +import { examples } from './gitlabProjectMigrate.examples'; +import yaml from 'yaml'; + +const mockGitlabClient = { + Migrations: { + create: jest.fn(() => ({ + id: 0, + })), + }, +}; + +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('gitlab:group:migrate', () => { + let instance: TemplateAction; + + beforeEach(() => { + jest.clearAllMocks(); + + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.local.com', + token: 'token', + apiBaseUrl: 'https://api.gitlab.local.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + instance = createGitlabProjectMigrateAction({ integrations }); + }); + + describe('Migrate a gitlab project to a different gitlab instance in another', () => { + const workspacePath = createMockDirectory().resolve('workspace'); + + it(`Execute example ${examples[0].description}`, async () => { + const input = yaml.parse(examples[0].example).steps[0].input; + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Migrations.create).toHaveBeenCalledWith( + { + url: 'https://gitlab.remote.com', + access_token: 'lolstoken', + }, + [ + { + sourceType: 'project_entity', + sourceFullPath: 'my/wonderful-repo', + destinationSlug: 'precious-repo', + destinationNamespace: 'my/local/site', + }, + ], + ); + }); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.examples.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.examples.ts new file mode 100644 index 0000000..9fe53cb --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.examples.ts @@ -0,0 +1,40 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; + +export const examples: TemplateExample[] = [ + { + description: 'Import repo from remote GitLab instance', + example: yaml.stringify({ + steps: [ + { + id: 'importGitLabRepo', + action: 'gitlab:repo:push', + name: 'Push changes to gitlab repository', + input: { + destinationAccessToken: 'tokenslols', + destinationUrl: + 'gitlab.local.com?repo=precious-repo&owner=my%2Flocal%2Fsite', + sourceAccessToken: 'lolstoken', + sourceFullPath: 'my/wonderful-repo', + sourceUrl: 'https://gitlab.remote.com', + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.test.ts new file mode 100644 index 0000000..8163d83 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.test.ts @@ -0,0 +1,96 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { TemplateAction } from '@backstage/plugin-scaffolder-node'; +import { createGitlabProjectMigrateAction } from './gitlabProjectMigrate'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import { createMockDirectory } from '@backstage/backend-test-utils'; + +const mockGitlabClient = { + Migrations: { + create: jest.fn(() => ({ + id: 0, + })), + }, +}; + +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('createGitlabRepoMigrate', () => { + let instance: TemplateAction; + + beforeEach(() => { + jest.clearAllMocks(); + + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'token', + apiBaseUrl: 'https://api.gitlab.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + instance = createGitlabProjectMigrateAction({ integrations }); + }); + + describe('createGitlabRepoImportAction', () => { + const workspacePath = createMockDirectory().resolve('workspace'); + + it('default repo import action is created', async () => { + const input = { + destinationAccessToken: 'moreLOLsToken', + destinationUrl: + 'gitlab.com?owner=migrated%2Ffoo%2Fbar&repo=migrated-go-lang', + sourceUrl: 'https://gitlab.remote.com', + sourceAccessToken: 'lolstoken', + sourceFullPath: 'foo/bar/go-lang', + }; + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Migrations.create).toHaveBeenCalledWith( + { + url: 'https://gitlab.remote.com', + access_token: 'lolstoken', + }, + [ + { + sourceType: 'project_entity', + sourceFullPath: 'foo/bar/go-lang', + destinationSlug: 'migrated-go-lang', + destinationNamespace: 'migrated/foo/bar', + }, + ], + ); + }); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.ts new file mode 100644 index 0000000..5de449d --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectMigrate.ts @@ -0,0 +1,141 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + createTemplateAction, + parseRepoUrl, +} from '@backstage/plugin-scaffolder-node'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { InputError } from '@backstage/errors'; +import { createGitlabApi } from './helpers'; +import { examples } from './gitlabRepoPush.examples'; +import { MigrationEntityOptions } from '@gitbeaker/rest'; + +/** + * Create a new action that imports a gitlab project into another gitlab project (potentially from another gitlab instance). + * + * @public + */ +export const createGitlabProjectMigrateAction = (options: { + integrations: ScmIntegrationRegistry; +}) => { + const { integrations } = options; + + return createTemplateAction({ + id: 'gitlab:group:migrate', + examples, + schema: { + input: { + destinationAccessToken: z => + z.string({ + description: `The token to use for authorization to the target GitLab'`, + }), + destinationUrl: z => + z.string({ + description: `Accepts the format 'gitlab.com?repo=project_name&owner=group_name' where 'project_name' is the repository name and 'group_name' is a group or username`, + }), + sourceAccessToken: z => + z.string({ + description: `The token to use for authorization to the source GitLab'`, + }), + sourceFullPath: z => + z.string({ + description: + 'Full path to the project in the source Gitlab instance', + }), + sourceUrl: z => + z.string({ + description: `Accepts the format 'https://gitlab.com/'`, + }), + }, + output: { + importedRepoUrl: z => + z.string({ + description: 'URL to the newly imported repo', + }), + migrationId: z => + z.number({ + description: 'Id of the migration that imports the project', + }), + }, + }, + + async handler(ctx) { + const { + destinationAccessToken, + destinationUrl, + sourceAccessToken, + sourceFullPath, + sourceUrl, + } = ctx.input; + + const { + host: destinationHost, + repo: destinationSlug, + owner: destinationNamespace, + } = parseRepoUrl(destinationUrl, integrations); + + if (!destinationNamespace) { + throw new InputError( + `Failed to determine target repository to migrate to. Make sure destinationUrl matches the format 'gitlab.myorg.com?repo=project_name&owner=group_name'`, + ); + } + + const api = createGitlabApi({ + integrations, + token: destinationAccessToken, + repoUrl: destinationUrl, + }); + + const migrationEntity: MigrationEntityOptions[] = [ + { + sourceType: 'project_entity', + sourceFullPath: sourceFullPath, + destinationSlug: destinationSlug, + destinationNamespace: destinationNamespace, + }, + ]; + + const sourceConfig = { + url: sourceUrl, + access_token: sourceAccessToken, + }; + + try { + const migrationId = await ctx.checkpoint({ + key: `create.migration.${sourceUrl}`, + fn: async () => { + const migrationStatus = await api.Migrations.create( + sourceConfig, + migrationEntity, + ); + return migrationStatus.id; + }, + }); + + ctx.output( + 'importedRepoUrl', + `${destinationHost}/${destinationNamespace}/${destinationSlug}`, + ); + ctx.output('migrationId', migrationId); + } catch (e: any) { + throw new InputError( + `Failed to transfer repo ${sourceFullPath}. Make sure that ${sourceFullPath} exists in ${sourceUrl}, and token has enough rights.\nError: ${e}`, + ); + } + }, + }); +}; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectVariableCreate.examples.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectVariableCreate.examples.test.ts new file mode 100644 index 0000000..99b2668 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectVariableCreate.examples.test.ts @@ -0,0 +1,237 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import yaml from 'yaml'; +import { createGitlabProjectVariableAction } from './gitlabProjectVariableCreate'; +import { examples } from './gitlabProjectVariableCreate.examples'; + +const mockGitlabClient = { + ProjectVariables: { + create: jest.fn(), + }, +}; +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('gitlab:projectVariableAction: create examples', () => { + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com/api/v4', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + const action = createGitlabProjectVariableAction({ integrations }); + const mockContext = createMockActionContext({ + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '123', + key: 'MY_VARIABLE', + value: 'my_value', + variableType: 'env_var', + }, + }); + + beforeEach(() => { + jest.resetAllMocks(); + }); + + it(`Should ${examples[0].description}`, async () => { + mockGitlabClient.ProjectVariables.create.mockResolvedValue({ + token: 'TOKEN', + }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[0].example).steps[0].input, + }); + + expect(mockGitlabClient.ProjectVariables.create).toHaveBeenCalledWith( + '123', + 'MY_VARIABLE', + 'my_value', + { + variableType: 'env_var', // Correctly using variableType + environmentScope: '*', + masked: false, + protected: false, + raw: false, + }, + ); + }); + + it(`Should ${examples[1].description}`, async () => { + mockGitlabClient.ProjectVariables.create.mockResolvedValue({ + token: 'TOKEN', + }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[1].example).steps[0].input, + }); + + expect(mockGitlabClient.ProjectVariables.create).toHaveBeenCalledWith( + '123', + 'MY_VARIABLE', + 'my-file-content', + { + variableType: 'file', // Correctly using variableType + protected: false, + masked: false, + raw: false, + environmentScope: '*', + }, + ); + }); + + it(`Should ${examples[2].description}`, async () => { + mockGitlabClient.ProjectVariables.create.mockResolvedValue({ + token: 'TOKEN', + }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[2].example).steps[0].input, + }); + + expect(mockGitlabClient.ProjectVariables.create).toHaveBeenCalledWith( + '456', + 'MY_VARIABLE', + 'my_value', + { + masked: false, + raw: false, + environmentScope: '*', + variableType: 'env_var', // Correctly using variableType + protected: true, + }, + ); + }); + + it(`Should ${examples[3].description}`, async () => { + mockGitlabClient.ProjectVariables.create.mockResolvedValue({ + token: 'TOKEN', + }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[3].example).steps[0].input, + }); + + expect(mockGitlabClient.ProjectVariables.create).toHaveBeenCalledWith( + '789', + 'DB_PASSWORD', + 'password123', + { + protected: false, + raw: false, + environmentScope: '*', + variableType: 'env_var', // Correctly using variableType + masked: true, + }, + ); + }); + + it(`Should ${examples[4].description}`, async () => { + mockGitlabClient.ProjectVariables.create.mockResolvedValue({ + token: 'TOKEN', + }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[4].example).steps[0].input, + }); + + expect(mockGitlabClient.ProjectVariables.create).toHaveBeenCalledWith( + '123', + 'MY_VARIABLE', + 'my_value', + { + protected: false, + environmentScope: '*', + variableType: 'env_var', // Correctly using variableType + masked: false, + raw: true, + }, + ); + }); + + it(`Should ${examples[5].description}`, async () => { + mockGitlabClient.ProjectVariables.create.mockResolvedValue({ + token: 'TOKEN', + }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[5].example).steps[0].input, + }); + + expect(mockGitlabClient.ProjectVariables.create).toHaveBeenCalledWith( + '123', + 'MY_VARIABLE', + 'my_value', + { + protected: false, + variableType: 'env_var', // Correctly using variableType + masked: false, + raw: false, + environmentScope: 'production', + }, + ); + }); + + it(`Should ${examples[6].description}`, async () => { + mockGitlabClient.ProjectVariables.create.mockResolvedValue({ + token: 'TOKEN', + }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[6].example).steps[0].input, + }); + + expect(mockGitlabClient.ProjectVariables.create).toHaveBeenCalledWith( + '123', + 'MY_VARIABLE', + 'my_value', + { + protected: false, + variableType: 'env_var', // Correctly using variableType + masked: false, + raw: false, + environmentScope: '*', + }, + ); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectVariableCreate.examples.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectVariableCreate.examples.ts new file mode 100644 index 0000000..81d526f --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectVariableCreate.examples.ts @@ -0,0 +1,160 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; + +export const examples: TemplateExample[] = [ + { + description: 'Creating a GitLab project variable of type env_var', + example: yaml.stringify({ + steps: [ + { + id: 'createVariable', + action: 'gitlab:createGitlabProjectVariableAction', + name: 'Create GitLab Project Variable', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '123', + key: 'MY_VARIABLE', + value: 'my_value', + variableType: 'env_var', + }, + }, + ], + }), + }, + { + description: 'Creating a GitLab project variable of type file', + example: yaml.stringify({ + steps: [ + { + id: 'createVariable', + action: 'gitlab:createGitlabProjectVariableAction', + name: 'Create GitLab Project Variable', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '123', + key: 'MY_VARIABLE', + value: 'my-file-content', + variableType: 'file', + }, + }, + ], + }), + }, + { + description: 'Create a GitLab project variable that is protected.', + example: yaml.stringify({ + steps: [ + { + id: 'createVariable', + action: 'gitlab:createGitlabProjectVariableAction', + name: 'Create GitLab Project Variable', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '456', + key: 'MY_VARIABLE', + value: 'my_value', + variableType: 'env_var', + variableProtected: true, + }, + }, + ], + }), + }, + { + description: 'Create a GitLab project variable with masked flag as true', + example: yaml.stringify({ + steps: [ + { + id: 'createVariable', + action: 'gitlab:createGitlabProjectVariableAction', + name: 'Create GitLab Project Variable', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '789', + key: 'DB_PASSWORD', + value: 'password123', + variableType: 'env_var', + masked: true, + }, + }, + ], + }), + }, + { + description: 'Create a GitLab project variable that is expandable.', + example: yaml.stringify({ + steps: [ + { + id: 'createVariable', + action: 'gitlab:projectVariable:create', + name: 'Create GitLab Project Variable', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '123', + key: 'MY_VARIABLE', + value: 'my_value', + variableType: 'env_var', + raw: true, + }, + }, + ], + }), + }, + { + description: + 'Create a GitLab project variable with a specific environment scope.', + example: yaml.stringify({ + steps: [ + { + id: 'createVariable', + action: 'gitlab:projectVariable:create', + name: 'Create GitLab Project Variable', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '123', + key: 'MY_VARIABLE', + value: 'my_value', + variableType: 'env_var', + environmentScope: 'production', + }, + }, + ], + }), + }, + { + description: + 'Create a GitLab project variable with a wildcard environment scope.', + example: yaml.stringify({ + steps: [ + { + id: 'createVariable', + action: 'gitlab:projectVariable:create', + name: 'Create GitLab Project Variable', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '123', + key: 'MY_VARIABLE', + value: 'my_value', + variableType: 'env_var', + environmentScope: '*', + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectVariableCreate.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectVariableCreate.ts new file mode 100644 index 0000000..824a856 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectVariableCreate.ts @@ -0,0 +1,129 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { VariableType } from '@gitbeaker/rest'; +import { getClient, parseRepoUrl } from '../util'; +import { examples } from './gitlabProjectVariableCreate.examples'; + +/** + * Creates a `gitlab:projectVariable:create` Scaffolder action. + * + * @param options - Templating configuration. + * @public + */ +export const createGitlabProjectVariableAction = (options: { + integrations: ScmIntegrationRegistry; +}) => { + const { integrations } = options; + return createTemplateAction({ + id: 'gitlab:projectVariable:create', + examples, + schema: { + input: { + repoUrl: z => + z.string({ + description: `Accepts the format 'gitlab.com?repo=project_name&owner=group_name' where 'project_name' is the repository name and 'group_name' is a group or username`, + }), + token: z => + z + .string({ + description: 'The token to use for authorization to GitLab', + }) + .optional(), + projectId: z => + z.union([z.number(), z.string()], { + description: 'Project ID', + }), + key: z => + z + .string({ + description: + 'The key of a variable; must have no more than 255 characters; only A-Z, a-z, 0-9, and _ are allowed', + }) + .regex(/^[A-Za-z0-9_]{1,255}$/), + value: z => + z.string({ + description: 'The value of a variable', + }), + variableType: z => + z.string({ + description: 'Variable Type (env_var or file)', + }), + variableProtected: z => + z + .boolean({ + description: 'Whether the variable is protected', + }) + .default(false) + .optional(), + masked: z => + z + .boolean({ + description: 'Whether the variable is masked', + }) + .default(false) + .optional(), + raw: z => + z + .boolean({ + description: 'Whether the variable is expandable', + }) + .default(false) + .optional(), + environmentScope: z => + z + .string({ + description: 'The environment_scope of the variable', + }) + .default('*') + .optional(), + }, + }, + async handler(ctx) { + const { + repoUrl, + projectId, + key, + value, + variableType, + variableProtected = false, + masked = false, + raw = false, + environmentScope = '*', + token, + } = ctx.input; + + const { host } = parseRepoUrl(repoUrl, integrations); + + const api = getClient({ host, integrations, token }); + + await ctx.checkpoint({ + key: `create.project.variables.${projectId}.${key}.${value}`, + fn: async () => { + await api.ProjectVariables.create(projectId, key, value, { + variableType: variableType as VariableType, + protected: variableProtected, + masked, + raw, + environmentScope, + }); + }, + }); + }, + }); +}; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.examples.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.examples.test.ts new file mode 100644 index 0000000..25b6c89 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.examples.test.ts @@ -0,0 +1,184 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { TemplateAction } from '@backstage/plugin-scaffolder-node'; +import { createMockDirectory } from '@backstage/backend-test-utils'; +import { createGitlabRepoPushAction } from './gitlabRepoPush'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import { examples } from './gitlabRepoPush.examples'; +import yaml from 'yaml'; + +const mockGitlabClient = { + Projects: { + create: jest.fn(), + show: jest.fn(async (_: any) => { + return { + default_branch: 'main', + }; + }), + }, + Branches: { + create: jest.fn(), + show: jest.fn(), + }, + Commits: { + create: jest.fn(async (_: any) => ({ + id: 'f8a2c9bd4e2915b0792b43235c779e82ddad54af', + })), + }, +}; + +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('gitlab:repo:push', () => { + let instance: TemplateAction; + + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); + + beforeEach(() => { + mockDir.clear(); + + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'token', + apiBaseUrl: 'https://api.gitlab.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + instance = createGitlabRepoPushAction({ integrations }); + }); + + describe('Push changes to gitlab repository', () => { + it(`Should ${examples[0].description}`, async () => { + const input = yaml.parse(examples[0].example).steps[0].input; + mockDir.setContent({ + [workspacePath]: { + 'abcd.txt': 'Test message', + }, + }); + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(0); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'feature-branch', + 'Initial Commit', + [ + { + action: 'create', + filePath: 'abcd.txt', + content: 'VGVzdCBtZXNzYWdl', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + expect(ctx.output).toHaveBeenCalledWith( + 'commitHash', + 'f8a2c9bd4e2915b0792b43235c779e82ddad54af', + ); + }); + }); + + describe('Push changes to gitlab repository with a specific source and target path', () => { + it(`Should ${examples[1].description}`, async () => { + const input = yaml.parse(examples[1].example).steps[0].input; + mockDir.setContent({ + [workspacePath]: { + 'abcd.txt': 'Test message', + source: { + 'abcd.txt': 'Test message', + }, + }, + }); + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(0); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'feature-branch', + 'Initial Commit', + [ + { + action: 'create', + filePath: 'abcd.txt', + content: 'VGVzdCBtZXNzYWdl', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + expect(ctx.output).toHaveBeenCalledWith( + 'commitHash', + 'f8a2c9bd4e2915b0792b43235c779e82ddad54af', + ); + }); + }); + + describe('Push changes to gitlab repository with a specific commit action', () => { + it(`Should ${examples[2].description}`, async () => { + const input = yaml.parse(examples[2].example).steps[0].input; + mockDir.setContent({ + [workspacePath]: { + 'abcd.txt': 'Test message', + }, + }); + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(0); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'feature-branch', + 'Initial Commit', + [ + { + action: 'update', + filePath: 'abcd.txt', + content: 'VGVzdCBtZXNzYWdl', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + expect(ctx.output).toHaveBeenCalledWith( + 'commitHash', + 'f8a2c9bd4e2915b0792b43235c779e82ddad54af', + ); + }); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.examples.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.examples.ts new file mode 100644 index 0000000..56a59f2 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.examples.ts @@ -0,0 +1,76 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; + +export const examples: TemplateExample[] = [ + { + description: 'Push changes to gitlab repository with minimal changes', + example: yaml.stringify({ + steps: [ + { + id: 'pushChanges', + action: 'gitlab:repo:push', + name: 'Push changes to gitlab repository', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Initial Commit', + branchName: 'feature-branch', + }, + }, + ], + }), + }, + { + description: + 'Push changes to gitlab repository with a specific source and target path', + example: yaml.stringify({ + steps: [ + { + id: 'pushChanges', + action: 'gitlab:repo:push', + name: 'Push changes to gitlab repository', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Initial Commit', + branchName: 'feature-branch', + sourcePath: 'src', + targetPath: 'dest', + }, + }, + ], + }), + }, + { + description: + 'Push changes to gitlab repository with a specific commit action', + example: yaml.stringify({ + steps: [ + { + id: 'pushChanges', + action: 'gitlab:repo:push', + name: 'Push changes to gitlab repository', + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Initial Commit', + branchName: 'feature-branch', + commitAction: 'update', + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts new file mode 100644 index 0000000..8005c07 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts @@ -0,0 +1,450 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { TemplateAction } from '@backstage/plugin-scaffolder-node'; +import { createMockDirectory } from '@backstage/backend-test-utils'; +import { createGitlabRepoPushAction } from './gitlabRepoPush'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; + +const mockGitlabClient = { + Projects: { + create: jest.fn(), + show: jest.fn(async (_: any) => { + return { + default_branch: 'main', + }; + }), + }, + Branches: { + create: jest.fn(), + show: jest.fn(), + }, + Commits: { + create: jest.fn(async (_: any) => ({ + id: 'bb6bce457ed069a38ef8d16ef38602972c7735c5', + })), + }, +}; + +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('createGitLabCommit', () => { + let instance: TemplateAction; + + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); + + beforeEach(() => { + mockDir.clear(); + + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'token', + apiBaseUrl: 'https://api.gitlab.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + instance = createGitlabRepoPushAction({ integrations }); + }); + + describe('createGitLabCommitWithoutCommitAction', () => { + it('default commitAction is create', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Create my new commit', + branchName: 'some-branch', + }; + mockDir.setContent({ + [workspacePath]: { + 'foo.txt': 'Hello there!', + }, + }); + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(0); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'some-branch', + 'Create my new commit', + [ + { + action: 'create', + filePath: 'foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + expect(ctx.output).toHaveBeenCalledWith( + 'commitHash', + 'bb6bce457ed069a38ef8d16ef38602972c7735c5', + ); + }); + }); + + describe('createGitLabCommitWithCommitAction', () => { + it('commitAction is create when create is passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Create my new commit', + branchName: 'some-branch', + commitAction: 'create', + }; + mockDir.setContent({ + [workspacePath]: { + 'foo.txt': 'Hello there!', + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(0); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'some-branch', + 'Create my new commit', + [ + { + action: 'create', + filePath: 'foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + expect(ctx.output).toHaveBeenCalledWith( + 'commitHash', + 'bb6bce457ed069a38ef8d16ef38602972c7735c5', + ); + }); + + it('commitAction is update when update is passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Create my new commit', + branchName: 'some-branch', + commitAction: 'update', + }; + mockDir.setContent({ + [workspacePath]: { + 'foo.txt': 'Hello there!', + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(0); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'some-branch', + 'Create my new commit', + [ + { + action: 'update', + filePath: 'foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + expect(ctx.output).toHaveBeenCalledWith( + 'commitHash', + 'bb6bce457ed069a38ef8d16ef38602972c7735c5', + ); + }); + + it('commitAction is delete when delete is passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Create my new commit', + branchName: 'some-branch', + commitAction: 'delete', + }; + mockDir.setContent({ + [workspacePath]: { + 'foo.txt': 'Hello there!', + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(0); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'some-branch', + 'Create my new commit', + [ + { + action: 'delete', + filePath: 'foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + expect(ctx.output).toHaveBeenCalledWith( + 'commitHash', + 'bb6bce457ed069a38ef8d16ef38602972c7735c5', + ); + }); + }); + + describe('with sourcePath', () => { + it('creates a commit with only relevant files', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Create my new commit', + branchName: 'some-branch', + sourcePath: 'source', + commitAction: 'create', + }; + + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(0); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'some-branch', + 'Create my new commit', + [ + { + action: 'create', + filePath: 'foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + expect(ctx.output).toHaveBeenCalledWith( + 'commitHash', + 'bb6bce457ed069a38ef8d16ef38602972c7735c5', + ); + }); + + it('creates a commit with only relevant files placed under different targetPath', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Create my new commit', + branchName: 'some-branch', + sourcePath: 'source', + targetPath: 'target', + commitAction: 'create', + }; + + mockDir.setContent({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(0); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'some-branch', + 'Create my new commit', + [ + { + action: 'create', + filePath: 'target/foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + expect(ctx.output).toHaveBeenCalledWith( + 'commitHash', + 'bb6bce457ed069a38ef8d16ef38602972c7735c5', + ); + }); + + it('should not allow to use files outside of the workspace', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Create my new commit', + branchName: 'some-branch', + sourcePath: '../../test', + commitAction: 'create', + }; + + const ctx = createMockActionContext({ input, workspacePath }); + + await expect(instance.handler(ctx)).rejects.toThrow( + 'Relative path is not allowed to refer to a directory outside its parent', + ); + }); + }); + + describe('createCommitToBranchThatDoesNotExist', () => { + it('should create a new branch', async () => { + mockGitlabClient.Branches.show.mockRejectedValue({ + cause: { + response: { + status: 404, + }, + }, + }); + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Create my new commit', + branchName: 'some-branch', + }; + mockDir.setContent({ + [workspacePath]: { + 'foo.txt': 'Hello there!', + }, + }); + const ctx = createMockActionContext({ input, workspacePath }); + await instance.handler(ctx); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'some-branch', + 'main', + ); + expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith( + 'owner/repo', + 'some-branch', + 'Create my new commit', + [ + { + action: 'create', + filePath: 'foo.txt', + content: 'SGVsbG8gdGhlcmUh', + encoding: 'base64', + execute_filemode: false, + }, + ], + ); + expect(ctx.output).toHaveBeenCalledWith( + 'commitHash', + 'bb6bce457ed069a38ef8d16ef38602972c7735c5', + ); + }); + }); + + describe('error handling', () => { + it('throws appropriate error for create action when commit fails', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Create my new commit', + branchName: 'some-branch', + commitAction: 'create', + }; + mockDir.setContent({ + [workspacePath]: { + 'foo.txt': 'Hello there!', + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + mockGitlabClient.Commits.create.mockRejectedValue( + new Error('Commit failed'), + ); + + await expect(instance.handler(ctx)).rejects.toThrow( + 'Committing the changes to some-branch failed. Please check that none of the files created by the template already exists. Error: Commit failed', + ); + }); + + it('throws appropriate error for update action when commit fails', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Update my commit', + branchName: 'some-branch', + commitAction: 'update', + }; + mockDir.setContent({ + [workspacePath]: { + 'foo.txt': 'Hello there!', + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + mockGitlabClient.Commits.create.mockRejectedValue( + new Error('Commit failed'), + ); + + await expect(instance.handler(ctx)).rejects.toThrow( + "Committing the changes to some-branch failed. Please verify that all files you're trying to modify exist in the repository. Error: Commit failed", + ); + }); + + it('throws appropriate error for delete action when commit fails', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Delete my commit', + branchName: 'some-branch', + commitAction: 'delete', + }; + mockDir.setContent({ + [workspacePath]: { + 'foo.txt': 'Hello there!', + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + mockGitlabClient.Commits.create.mockRejectedValue( + new Error('Commit failed'), + ); + + await expect(instance.handler(ctx)).rejects.toThrow( + "Committing the changes to some-branch failed. Please verify that all files you're trying to modify exist in the repository. Error: Commit failed", + ); + }); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.ts new file mode 100644 index 0000000..a3ae415 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.ts @@ -0,0 +1,206 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import path from 'path'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { InputError } from '@backstage/errors'; +import { resolveSafeChildPath } from '@backstage/backend-plugin-api'; +import { + createTemplateAction, + parseRepoUrl, + serializeDirectoryContents, +} from '@backstage/plugin-scaffolder-node'; +import { CommitAction } from '@gitbeaker/rest'; +import { createGitlabApi, getErrorMessage } from './helpers'; +import { examples } from './gitlabRepoPush.examples'; + +/** + * Create a new action that commits into a gitlab repository. + * + * @public + */ +export const createGitlabRepoPushAction = (options: { + integrations: ScmIntegrationRegistry; +}) => { + const { integrations } = options; + + return createTemplateAction({ + id: 'gitlab:repo:push', + examples, + schema: { + input: { + repoUrl: z => + z.string({ + description: `Accepts the format 'gitlab.com?repo=project_name&owner=group_name' where 'project_name' is the repository name and 'group_name' is a group or username`, + }), + branchName: z => + z.string({ + description: 'The branch name for the commit', + }), + commitMessage: z => + z.string({ + description: `The commit message`, + }), + sourcePath: z => + z + .string({ + description: + 'Subdirectory of working directory to copy changes from', + }) + .optional(), + targetPath: z => + z + .string({ + description: 'Subdirectory of repository to apply changes to', + }) + .optional(), + token: z => + z + .string({ + description: 'The token to use for authorization to GitLab', + }) + .optional(), + commitAction: z => + z + .enum(['create', 'update', 'delete'], { + description: + 'The action to be used for git commit. Defaults to create, but can be set to update or delete', + }) + .optional(), + }, + output: { + projectid: z => + z.string({ + description: 'Gitlab Project id/Name(slug)', + }), + projectPath: z => + z.string({ + description: 'Gitlab Project path', + }), + commitHash: z => + z.string({ + description: 'The git commit hash of the commit', + }), + }, + }, + async handler(ctx) { + const { + branchName, + repoUrl, + targetPath, + sourcePath, + token, + commitAction, + } = ctx.input; + + const { owner, repo, project } = parseRepoUrl(repoUrl, integrations); + const repoID = project ? project : `${owner}/${repo}`; + + const api = createGitlabApi({ + integrations, + token, + repoUrl, + }); + + let fileRoot: string; + if (sourcePath) { + fileRoot = resolveSafeChildPath(ctx.workspacePath, sourcePath); + } else { + fileRoot = ctx.workspacePath; + } + + const fileContents = await serializeDirectoryContents(fileRoot, { + gitignore: true, + }); + + const actions: CommitAction[] = fileContents.map(file => ({ + action: commitAction ?? 'create', + filePath: targetPath + ? path.posix.join(targetPath, file.path) + : file.path, + encoding: 'base64', + content: file.content.toString('base64'), + execute_filemode: file.executable, + })); + + const branchExists = await ctx.checkpoint({ + key: `branch.exists.${repoID}.${branchName}`, + fn: async () => { + try { + await api.Branches.show(repoID, branchName); + return true; + } catch (e: any) { + if (e.cause?.response?.status !== 404) { + throw new InputError( + `Failed to check status of branch '${branchName}'. Please make sure that branch already exists or Backstage has permissions to create one. ${getErrorMessage( + e, + )}`, + ); + } + } + return false; + }, + }); + + if (!branchExists) { + // create a branch using the default branch as ref + try { + const projects = await api.Projects.show(repoID); + const { default_branch: defaultBranch } = projects; + await api.Branches.create(repoID, branchName, String(defaultBranch)); + } catch (e) { + throw new InputError( + `The branch '${branchName}' was not found and creation failed with error. Please make sure that branch already exists or Backstage has permissions to create one. ${getErrorMessage( + e, + )}`, + ); + } + } + + try { + const commitId = await ctx.checkpoint({ + key: `commit.create.${repoID}.${branchName}`, + fn: async () => { + const commit = await api.Commits.create( + repoID, + branchName, + ctx.input.commitMessage, + actions, + ); + return commit.id; + }, + }); + + ctx.output('projectid', repoID); + ctx.output('projectPath', repoID); + ctx.output('commitHash', commitId); + } catch (e) { + if (commitAction !== 'create') { + throw new InputError( + `Committing the changes to ${branchName} failed. Please verify that all files you're trying to modify exist in the repository. ${getErrorMessage( + e, + )}`, + ); + } + throw new InputError( + `Committing the changes to ${branchName} failed. Please check that none of the files created by the template already exists. ${getErrorMessage( + e, + )}`, + ); + } + }, + }); +}; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/helpers.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/helpers.ts new file mode 100644 index 0000000..59f5601 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/helpers.ts @@ -0,0 +1,70 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { parseRepoUrl } from '@backstage/plugin-scaffolder-node'; +import { ErrorLike, InputError, isError } from '@backstage/errors'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { Gitlab } from '@gitbeaker/rest'; +import { GitbeakerRequestError } from '@gitbeaker/requester-utils'; + +export function createGitlabApi(options: { + integrations: ScmIntegrationRegistry; + token?: string; + repoUrl: string; +}): InstanceType { + const { integrations, token: providedToken, repoUrl } = options; + + const { host } = parseRepoUrl(repoUrl, integrations); + + const integrationConfig = integrations.gitlab.byHost(host); + + if (!integrationConfig) { + throw new InputError( + `No matching integration configuration for host ${host}, please check your integrations config`, + ); + } + + if (!integrationConfig.config.token && !providedToken) { + throw new InputError(`No token available for host ${host}`); + } + + const token = providedToken ?? integrationConfig.config.token!; + const tokenType = providedToken ? 'oauthToken' : 'token'; + + return new Gitlab({ + host: integrationConfig.config.baseUrl, + [tokenType]: token, + }); +} + +interface GitlabError extends ErrorLike { + // Errors from Gitlab may also include a description field that contains additional info + description: string; +} + +function isGitlabError(e: unknown): e is GitlabError { + return isError(e) && 'description' in e && typeof e.description === 'string'; +} + +function isGitbeakerRequestError(e: unknown): e is GitbeakerRequestError { + return isError(e) && e.name === 'GitbeakerRequestError'; +} + +export function getErrorMessage(e: unknown): string { + if (isGitbeakerRequestError(e) && e.cause) + return `${e} - ${e.cause.description}`; + if (isGitlabError(e)) return `${e} - ${e.description}`; + return String(e); +} diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/index.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/index.ts new file mode 100644 index 0000000..c601c46 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/index.ts @@ -0,0 +1,26 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export * from './gitlab'; +export * from './gitlabGroupEnsureExists'; +export * from './gitlabIssueCreate'; +export * from './gitlabIssueEdit'; +export * from './gitlabMergeRequest'; +export * from './gitlabPipelineTrigger'; +export * from './gitlabProjectAccessTokenCreate'; +export * from './gitlabProjectDeployTokenCreate'; +export * from './gitlabProjectVariableCreate'; +export * from './gitlabRepoPush'; +export { IssueType, IssueStateEvent } from '../commonGitlabConfig'; diff --git a/plugins/scaffolder-backend-module-gitlab/src/autocomplete/autocomplete.test.ts b/plugins/scaffolder-backend-module-gitlab/src/autocomplete/autocomplete.test.ts new file mode 100644 index 0000000..a2e2f18 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/autocomplete/autocomplete.test.ts @@ -0,0 +1,152 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { InputError } from '@backstage/errors'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { createHandleAutocompleteRequest } from './autocomplete'; + +const mockGetClient = require('../util').getClient; + +jest.mock('../util', () => ({ + getClient: jest.fn(), +})); + +describe('handleAutocompleteRequest', () => { + const mockIntegrations = {} as ScmIntegrationRegistry; + const mockClient = { + Groups: { + all: jest.fn(), + allProjects: jest.fn(), + }, + Users: { + showCurrentUser: jest.fn(), + allProjects: jest.fn(), + }, + }; + + beforeEach(() => { + jest.clearAllMocks(); + mockGetClient.mockReturnValue(mockClient); + }); + + it('should return groups and current user', async () => { + const handleAutocompleteRequest = createHandleAutocompleteRequest({ + integrations: mockIntegrations, + }); + + mockClient.Groups.all.mockResolvedValueOnce([ + { full_path: 'group1', id: 1 }, + { full_path: 'group2', id: 2 }, + ]); + mockClient.Groups.all.mockResolvedValueOnce([]); + mockClient.Users.showCurrentUser.mockResolvedValue({ + username: 'user1', + id: 3, + }); + + const result = await handleAutocompleteRequest({ + resource: 'groups', + token: 'token', + context: {}, + }); + + expect(result).toEqual({ + results: [ + { title: 'group1', id: '1' }, + { title: 'group2', id: '2' }, + { title: 'user1', id: '3' }, + ], + }); + }); + + it('should return repositories for a group', async () => { + const handleAutocompleteRequest = createHandleAutocompleteRequest({ + integrations: mockIntegrations, + }); + + mockClient.Users.showCurrentUser.mockResolvedValue({ id: 3 }); + mockClient.Groups.allProjects.mockResolvedValue([ + { name: 'Repo 1', path: 'repo-1' }, + { name: 'Repo 2', path: 'repo-2' }, + ]); + + const result = await handleAutocompleteRequest({ + resource: 'repositories', + token: 'token', + context: { id: '1' }, + }); + + expect(result).toEqual({ + results: [ + { title: 'Repo 1', id: 'repo-1' }, + { title: 'Repo 2', id: 'repo-2' }, + ], + }); + }); + + it('should return repositories for a user', async () => { + const handleAutocompleteRequest = createHandleAutocompleteRequest({ + integrations: mockIntegrations, + }); + + mockClient.Users.showCurrentUser.mockResolvedValue({ id: 1 }); + mockClient.Users.allProjects.mockResolvedValue([ + { name: 'Repo 1', path: 'repo-1' }, + { name: 'Repo 2', path: 'repo-2' }, + ]); + + const result = await handleAutocompleteRequest({ + resource: 'repositories', + token: 'token', + context: { id: '1' }, + }); + + expect(result).toEqual({ + results: [ + { title: 'Repo 1', id: 'repo-1' }, + { title: 'Repo 2', id: 'repo-2' }, + ], + }); + }); + + it('should throw an error for invalid resource', async () => { + const handleAutocompleteRequest = createHandleAutocompleteRequest({ + integrations: mockIntegrations, + }); + + await expect( + handleAutocompleteRequest({ + resource: 'invalid', + token: 'token', + context: {}, + }), + ).rejects.toThrow(InputError); + }); + + it('should throw an error if context id is missing for repositories', async () => { + const handleAutocompleteRequest = createHandleAutocompleteRequest({ + integrations: mockIntegrations, + }); + + await expect( + handleAutocompleteRequest({ + resource: 'repositories', + token: 'token', + context: {}, + }), + ).rejects.toThrow(InputError); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/autocomplete/autocomplete.ts b/plugins/scaffolder-backend-module-gitlab/src/autocomplete/autocomplete.ts new file mode 100644 index 0000000..4eddd84 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/autocomplete/autocomplete.ts @@ -0,0 +1,108 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { InputError } from '@backstage/errors'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { getClient } from '../util'; + +export function createHandleAutocompleteRequest(options: { + integrations: ScmIntegrationRegistry; +}) { + return async function handleAutocompleteRequest({ + resource, + token, + context, + }: { + resource: string; + token: string; + context: Record; + }): Promise<{ + results: { + title?: string; + id: string; + }[]; + }> { + const { integrations } = options; + const client = getClient({ + host: context.host ?? 'gitlab.com', + integrations, + token, + }); + + switch (resource) { + case 'groups': { + let groups: any[] = []; + let page = 1; + const perPage = 100; + let response = []; + let continueFetch = true; + while (continueFetch) { + response = await client.Groups.all({ + pagination: 'offset', + page, + perPage, + }); + + groups = groups.concat(response); + if (response.length < perPage) continueFetch = false; + page++; + } + + const result: { + results: { + title: string; + id: string; + }[]; + } = { + results: groups.map(group => ({ + title: group.full_path, + id: group.id.toString(), + })), + }; + // append also user context + const user = await client.Users.showCurrentUser(); + result.results.push({ + title: user.username, + id: user.id.toString(), + }); + + return result; + } + case 'repositories': { + if (!context.id) + throw new InputError('Missing groupId and userId context parameter'); + + let response; + if ( + context.id === (await client.Users.showCurrentUser())?.id.toString() + ) { + response = await client.Users.allProjects(context.id); + } else { + response = await client.Groups.allProjects(context.id); + } + + return { + results: response.map(project => ({ + title: project.name.trim(), + id: project.path, + })), + }; + } + default: + throw new InputError(`Invalid resource: ${resource}`); + } + }; +} diff --git a/plugins/scaffolder-backend-module-gitlab/src/commonGitlabConfig.ts b/plugins/scaffolder-backend-module-gitlab/src/commonGitlabConfig.ts new file mode 100644 index 0000000..5d0528b --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/commonGitlabConfig.ts @@ -0,0 +1,53 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { z } from 'zod'; + +const commonGitlabConfig = z.object({ + repoUrl: z.string({ description: 'Repository Location' }), + token: z + .string({ description: 'The token to use for authorization to GitLab' }) + .optional(), +}); + +export default commonGitlabConfig; + +export const commonGitlabConfigExample = { + repoUrl: 'gitlab.com?owner=namespace-or-owner&repo=project-name', + token: '${{ secrets.USER_OAUTH_TOKEN }}', +}; + +/** + * Gitlab issue types as specified by gitlab api + * + * @public + */ +export enum IssueType { + ISSUE = 'issue', + INCIDENT = 'incident', + TEST = 'test_case', + TASK = 'task', +} + +/** + * Gitlab issue state events for modifications + * + * @public + */ +export enum IssueStateEvent { + CLOSE = 'close', + REOPEN = 'reopen', +} diff --git a/packages/app/e2e-tests/app.test.ts b/plugins/scaffolder-backend-module-gitlab/src/index.ts similarity index 69% rename from packages/app/e2e-tests/app.test.ts rename to plugins/scaffolder-backend-module-gitlab/src/index.ts index d45bc0d..628b892 100644 --- a/packages/app/e2e-tests/app.test.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/index.ts @@ -1,5 +1,5 @@ /* - * Copyright 2020 The Backstage Authors + * Copyright 2023 The Backstage Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,10 +14,11 @@ * limitations under the License. */ -import { test, expect } from '@playwright/test'; - -test('App should render the welcome page', async ({ page }) => { - await page.goto('/'); +/** + * A module for the scaffolder backend that lets you interact with gitlab + * + * @packageDocumentation + */ - await expect(page.getByText('My Company Catalog')).toBeVisible(); -}); +export * from './actions'; +export { gitlabModule as default } from './module'; diff --git a/plugins/scaffolder-backend-module-gitlab/src/module.ts b/plugins/scaffolder-backend-module-gitlab/src/module.ts new file mode 100644 index 0000000..7dbfddf --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/module.ts @@ -0,0 +1,78 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { + coreServices, + createBackendModule, +} from '@backstage/backend-plugin-api'; +import { ScmIntegrations } from '@backstage/integration'; +import { + scaffolderActionsExtensionPoint, + scaffolderAutocompleteExtensionPoint, +} from '@backstage/plugin-scaffolder-node/alpha'; +import { + createGitlabGroupEnsureExistsAction, + createGitlabIssueAction, + createGitlabProjectAccessTokenAction, + createGitlabProjectDeployTokenAction, + createGitlabProjectVariableAction, + createGitlabRepoPushAction, + createPublishGitlabAction, + createPublishGitlabMergeRequestAction, + createTriggerGitlabPipelineAction, + editGitlabIssueAction, +} from './actions'; +import { createGitlabProjectMigrateAction } from './actions/gitlabProjectMigrate'; +import { createHandleAutocompleteRequest } from './autocomplete/autocomplete'; + +/** + * @public + * The GitLab Module for the Scaffolder Backend + */ +export const gitlabModule = createBackendModule({ + pluginId: 'scaffolder', + moduleId: 'gitlab', + register({ registerInit }) { + registerInit({ + deps: { + scaffolder: scaffolderActionsExtensionPoint, + autocomplete: scaffolderAutocompleteExtensionPoint, + config: coreServices.rootConfig, + }, + async init({ scaffolder, autocomplete, config }) { + const integrations = ScmIntegrations.fromConfig(config); + + scaffolder.addActions( + createGitlabGroupEnsureExistsAction({ integrations }), + createGitlabProjectMigrateAction({ integrations }), + createGitlabIssueAction({ integrations }), + createGitlabProjectAccessTokenAction({ integrations }), + createGitlabProjectDeployTokenAction({ integrations }), + createGitlabProjectVariableAction({ integrations }), + createGitlabRepoPushAction({ integrations }), + editGitlabIssueAction({ integrations }), + createPublishGitlabAction({ config, integrations }), + createPublishGitlabMergeRequestAction({ integrations }), + createTriggerGitlabPipelineAction({ integrations }), + ); + + autocomplete.addAutocompleteProvider({ + id: 'gitlab', + handler: createHandleAutocompleteRequest({ integrations }), + }); + }, + }); + }, +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/util.test.ts b/plugins/scaffolder-backend-module-gitlab/src/util.test.ts new file mode 100644 index 0000000..3fa92db --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/util.test.ts @@ -0,0 +1,388 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as util from './util'; +import { Gitlab, GroupSchema } from '@gitbeaker/rest'; +import { InputError } from '@backstage/errors'; + +// Mock the Gitlab client and its methods +const mockGitlabClient = { + Groups: { + show: jest.fn(), + }, + Projects: { + show: jest.fn(), + }, + Epics: { + all: jest.fn(), + }, +}; + +jest.mock('@gitbeaker/rest', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +const mockConfig = { + gitlab: [ + { + host: 'gitlab.com', + token: 'withToken', + apiBaseUrl: 'gitlab.com/api/v4', + }, + { + host: 'gitlab.com', + apiBaseUrl: 'gitlab.com/api/v4', + }, + ], +}; +describe('getTopLevelParentGroup', () => { + afterEach(() => jest.resetAllMocks()); + + // Mocked nested groups + const mockGroups: GroupSchema[] = [ + { + id: 789, + parent_id: 0, + path: '', + description: '', + visibility: 'public', + share_with_group_lock: false, + require_two_factor_authentication: false, + two_factor_grace_period: 0, + project_creation_level: '', + subgroup_creation_level: '', + lfs_enabled: false, + default_branch_protection: 0, + request_access_enabled: false, + created_at: '', + avatar_url: '', + full_name: '', + full_path: '', + web_url: '', + name: '', + }, + { + id: 456, + parent_id: 789, + path: '', + description: '', + visibility: 'public', + share_with_group_lock: false, + require_two_factor_authentication: false, + two_factor_grace_period: 0, + project_creation_level: '', + subgroup_creation_level: '', + lfs_enabled: false, + default_branch_protection: 0, + request_access_enabled: false, + created_at: '', + avatar_url: '', + full_name: '', + full_path: '', + web_url: '', + name: '', + }, + { + id: 123, + parent_id: 456, + path: '', + description: '', + visibility: 'public', + share_with_group_lock: false, + require_two_factor_authentication: false, + two_factor_grace_period: 0, + project_creation_level: '', + subgroup_creation_level: '', + lfs_enabled: false, + default_branch_protection: 0, + request_access_enabled: false, + created_at: '', + avatar_url: '', + full_name: '', + full_path: '', + web_url: '', + name: '', + }, + ]; + + // Top level group + const mockTopParentGroup: GroupSchema = { + id: 789, + parent_id: 0, + path: '', + description: '', + visibility: 'public', + share_with_group_lock: false, + require_two_factor_authentication: false, + two_factor_grace_period: 0, + project_creation_level: '', + subgroup_creation_level: '', + lfs_enabled: false, + default_branch_protection: 0, + request_access_enabled: false, + created_at: '', + avatar_url: '', + full_name: '', + full_path: '', + web_url: '', + name: '', + }; + + it('should return the top-level parent group if the input group has a parent in the hierarchy', async () => { + // Instance with token + const apiClient = new Gitlab({ + host: mockConfig.gitlab[0].host, + token: mockConfig.gitlab[0].token!, + }); + + const showSpy = jest.spyOn(mockGitlabClient.Groups, 'show'); + + // Mock implementation of Groups.show + showSpy.mockImplementation( + async (groupId: string | number): Promise => { + const id = + typeof groupId === 'number' ? groupId : parseInt(groupId, 10); + const mockGroup = mockGroups.find(group => group.id === id) || null; + return mockGroup as GroupSchema; + }, + ); + + const action = util.getTopLevelParentGroup(apiClient, 123); + + const result = await action; + expect(result).toEqual(mockTopParentGroup); + }); + + it('should return the input group if it has no parents in the hierarchy', async () => { + // Instance with token + const apiClient = new Gitlab({ + host: mockConfig.gitlab[0].host, + token: mockConfig.gitlab[0].token!, + }); + + const showSpy = jest.spyOn(mockGitlabClient.Groups, 'show'); + + // Mock implementation of Groups.show + showSpy.mockImplementation( + async (groupId: string | number): Promise => { + const id = + typeof groupId === 'number' ? groupId : parseInt(groupId, 10); + const mockGroup = mockGroups.find(group => group.id === id) || null; + return mockGroup as GroupSchema; + }, + ); + + const action = util.getTopLevelParentGroup(apiClient, 789); + + const result = await action; + expect(result).toEqual(mockTopParentGroup); + }); +}); + +describe('checkEpicScope', () => { + afterEach(() => jest.resetAllMocks()); + + it('should return true if the project is inside the epic scope', async () => { + const apiClient = new Gitlab({ + host: mockConfig.gitlab[0].host, + token: mockConfig.gitlab[0].token!, + }); + + const projectId = 123; + const epicId = 456; + + // Mock project, top-level parent group, and epic + const mockProject = { + id: 123, + name: 'You learn', + namespace: { id: 789 }, + path_with_namespace: 'at-once/you-learn', + }; + const mockTopParentGroup = { + id: 789, + name: 'LivingTwice', + full_path: 'at-once/you-learn', + }; + const mockEpic = { id: epicId, group_id: 789 }; + + mockGitlabClient.Projects.show.mockResolvedValue(mockProject); + mockGitlabClient.Groups.show.mockResolvedValue(mockTopParentGroup); + mockGitlabClient.Epics.all.mockResolvedValue([mockEpic]); + + const result = await util.checkEpicScope(apiClient, projectId, epicId); + + expect(result).toBe(true); + expect(mockGitlabClient.Projects.show).toHaveBeenCalledWith(projectId); + expect(mockGitlabClient.Groups.show).toHaveBeenCalledWith( + mockProject.namespace.id, + ); + expect(mockGitlabClient.Epics.all).toHaveBeenCalledWith( + mockTopParentGroup.id, + ); + }); + + it('should return false if the project is not inside the epic scope', async () => { + const apiClient = new Gitlab({ + host: mockConfig.gitlab[0].host, + token: mockConfig.gitlab[0].token!, + }); + + const projectId = 123; + const epicId = 45; + + // Mock project, top-level parent group, and epic + const mockProject = { + id: 123, + name: 'You learn', + namespace: { id: 32 }, + path_with_namespace: 'at-once/you-learn', + }; + const mockTopParentGroup = { + id: 32, + name: 'TheWalls', + full_path: 'you-built/within', + }; + + const mockEpic = { id: epicId, group_id: 32 }; + + mockGitlabClient.Projects.show.mockResolvedValue(mockProject); + mockGitlabClient.Groups.show.mockResolvedValue(mockTopParentGroup); + mockGitlabClient.Epics.all.mockResolvedValue([mockEpic]); + + const result = await util.checkEpicScope(apiClient, projectId, epicId); + + expect(result).toBe(false); + expect(mockGitlabClient.Projects.show).toHaveBeenCalledWith(projectId); + expect(mockGitlabClient.Groups.show).toHaveBeenCalledWith( + mockProject.namespace.id, + ); + expect(mockGitlabClient.Epics.all).toHaveBeenCalledWith( + mockTopParentGroup.id, + ); + }); + + it('should throw an InputError if the project is not found', async () => { + const apiClient = new Gitlab({ + host: mockConfig.gitlab[0].host, + token: mockConfig.gitlab[0].token!, + }); + + const projectId = 123; + const epicId = 456; + + mockGitlabClient.Projects.show.mockResolvedValue(null); + + await expect( + util.checkEpicScope(apiClient, projectId, epicId), + ).rejects.toThrow(InputError); + expect(mockGitlabClient.Projects.show).toHaveBeenCalledWith(projectId); + }); + + it('should throw an InputError if the top-level parent group is not found', async () => { + const apiClient = new Gitlab({ + host: mockConfig.gitlab[0].host, + token: mockConfig.gitlab[0].token!, + }); + + const projectId = 123; + const epicId = 456; + + mockGitlabClient.Projects.show.mockResolvedValue({ + id: 123, + name: 'You learn', + namespace: { id: 789 }, + path_with_namespace: 'at-once/you-learn', + }); + mockGitlabClient.Groups.show.mockResolvedValue(null); + + await expect( + util.checkEpicScope(apiClient, projectId, epicId), + ).rejects.toThrow(InputError); + expect(mockGitlabClient.Projects.show).toHaveBeenCalledWith(projectId); + expect(mockGitlabClient.Groups.show).toHaveBeenCalledWith(789); + }); + + it('should throw an InputError if the epic is not found', async () => { + const apiClient = new Gitlab({ + host: mockConfig.gitlab[0].host, + token: mockConfig.gitlab[0].token!, + }); + + const projectId = 123; + const epicId = 456; + + mockGitlabClient.Projects.show.mockResolvedValue({ + id: 123, + name: 'You learn', + namespace: { id: 789 }, + path_with_namespace: 'at-once/you-learn', + }); + mockGitlabClient.Groups.show.mockResolvedValue({ + id: 789, + name: 'LivingTwice', + full_path: 'at-once/you-learn', + }); + mockGitlabClient.Epics.all.mockResolvedValue([]); + + await expect( + util.checkEpicScope(apiClient, projectId, epicId), + ).rejects.toThrow(InputError); + expect(mockGitlabClient.Projects.show).toHaveBeenCalledWith(projectId); + expect(mockGitlabClient.Groups.show).toHaveBeenCalledWith(789); + expect(mockGitlabClient.Epics.all).toHaveBeenCalledWith(789); + }); +}); + +describe('convertDate', () => { + it('should convert a valid input date with milliseconds to an ISO string', () => { + const inputDate = '1970-01-01T12:00:00.000Z'; + const defaultDate = '1978-10-09T12:00:00Z'; + + const result = util.convertDate(inputDate, defaultDate); + + expect(result).toEqual('1970-01-01T12:00:00.000Z'); + }); + + it('should convert a valid input date to an ISO string', () => { + const inputDate = '1970-01-01T12:00:00Z'; + const defaultDate = '1978-10-09T12:00:00Z'; + + const result = util.convertDate(inputDate, defaultDate); + + expect(result).toEqual('1970-01-01T12:00:00.000Z'); + }); + + it('should use default date if input date is undefined', () => { + const inputDate = undefined; + const defaultDate = '1970-01-01T12:00:00Z'; + + const result = util.convertDate(inputDate, defaultDate); + + expect(result).toEqual('1970-01-01T12:00:00.000Z'); + }); + + it('should throw an InputError if input date is invalid', () => { + const inputDate = 'invalidDate'; + const defaultDate = '2023-02-01T12:00:00Z'; + + // Expecting an InputError to be thrown + expect(() => util.convertDate(inputDate, defaultDate)).toThrow(InputError); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/util.ts b/plugins/scaffolder-backend-module-gitlab/src/util.ts new file mode 100644 index 0000000..db1468b --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/util.ts @@ -0,0 +1,186 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { InputError } from '@backstage/errors'; +import { + GitLabIntegration, + ScmIntegrationRegistry, +} from '@backstage/integration'; +import { Gitlab, GroupSchema } from '@gitbeaker/rest'; +import { z } from 'zod'; +import commonGitlabConfig from './commonGitlabConfig'; + +export const parseRepoHost = (repoUrl: string): string => { + let parsed; + try { + parsed = new URL(`https://${repoUrl}`); + } catch (error) { + throw new InputError( + `Invalid repo URL passed to publisher, got ${repoUrl}, ${error}`, + ); + } + return parsed.host; +}; + +export const getToken = ( + config: z.infer, + integrations: ScmIntegrationRegistry, +): { token: string; integrationConfig: GitLabIntegration } => { + const host = parseRepoHost(config.repoUrl); + const integrationConfig = integrations.gitlab.byHost(host); + + if (!integrationConfig) { + throw new InputError( + `No matching integration configuration for host ${host}, please check your integrations config`, + ); + } + + const token = config.token || integrationConfig.config.token!; + + return { token: token, integrationConfig: integrationConfig }; +}; + +export type RepoSpec = { + repo: string; + host: string; + owner?: string; +}; + +export const parseRepoUrl = ( + repoUrl: string, + integrations: ScmIntegrationRegistry, +): RepoSpec => { + let parsed; + try { + parsed = new URL(`https://${repoUrl}`); + } catch (error) { + throw new InputError( + `Invalid repo URL passed to publisher, got ${repoUrl}, ${error}`, + ); + } + const host = parsed.host; + const owner = parsed.searchParams.get('owner') ?? undefined; + const repo: string = parsed.searchParams.get('repo')!; + + const type = integrations.byHost(host)?.type; + + if (!type) { + throw new InputError( + `No matching integration configuration for host ${host}, please check your integrations config`, + ); + } + + return { host, owner, repo }; +}; + +export function getClient(props: { + host: string; + token?: string; + integrations: ScmIntegrationRegistry; +}): InstanceType { + const { host, token, integrations } = props; + const integrationConfig = integrations.gitlab.byHost(host); + + if (!integrationConfig) { + throw new InputError( + `No matching integration configuration for host ${host}, please check your integrations config`, + ); + } + + const { config } = integrationConfig; + + if (!config.token && !token) { + throw new InputError(`No token available for host ${host}`); + } + + const requestToken = token || config.token!; + const tokenType = token ? 'oauthToken' : 'token'; + + const gitlabOptions: any = { + host: config.baseUrl, + }; + + gitlabOptions[tokenType] = requestToken; + return new Gitlab(gitlabOptions); +} + +export function convertDate( + inputDate: string | undefined, + defaultDate: string, +) { + try { + return inputDate + ? new Date(inputDate).toISOString() + : new Date(defaultDate).toISOString(); + } catch (error) { + throw new InputError(`Error converting input date - ${error}`); + } +} + +export async function getTopLevelParentGroup( + client: InstanceType, + groupId: number, +): Promise { + try { + const topParentGroup = await client.Groups.show(groupId); + if (topParentGroup.parent_id) { + return getTopLevelParentGroup(client, topParentGroup.parent_id as number); + } + return topParentGroup as GroupSchema; + } catch (error: any) { + throw new InputError( + `Error finding top-level parent group ID: ${error.message}`, + ); + } +} + +export async function checkEpicScope( + client: InstanceType, + projectId: number, + epicId: number, +) { + try { + // If project exists, get the top level group id + const project = await client.Projects.show(projectId); + if (!project) { + throw new InputError( + `Project with id ${projectId} not found. Check your GitLab instance.`, + ); + } + const topParentGroup = await getTopLevelParentGroup( + client, + project.namespace.id, + ); + if (!topParentGroup) { + throw new InputError(`Couldn't find a suitable top-level parent group.`); + } + // Get the epic + const epic = (await client.Epics.all(topParentGroup.id)).find( + (x: any) => x.id === epicId, + ); + if (!epic) { + throw new InputError( + `Epic with id ${epicId} not found in the top-level parent group ${topParentGroup.name}.`, + ); + } + + const epicGroup = await client.Groups.show(epic.group_id as number); + const projectNamespace: string = project.path_with_namespace as string; + return projectNamespace.startsWith(epicGroup.full_path as string); + } catch (error: any) { + throw new InputError(`Could not find epic scope: ${error.message}`); + } +} diff --git a/plugins/terraform-backend/package.json b/plugins/terraform-backend/package.json index 079f630..9291620 100644 --- a/plugins/terraform-backend/package.json +++ b/plugins/terraform-backend/package.json @@ -23,10 +23,10 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "^0.23.2", - "@backstage/backend-defaults": "^0.4.0", - "@backstage/backend-plugin-api": "^0.7.0", - "@backstage/config": "^1.2.0", + "@backstage/backend-common": "^0.25.0", + "@backstage/backend-defaults": "^0.16.0", + "@backstage/backend-plugin-api": "^1.8.0", + "@backstage/config": "^1.3.6", "@types/express": "*", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -36,13 +36,17 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.26.10", - "@backstage/plugin-auth-backend": "^0.22.8", - "@backstage/plugin-auth-backend-module-guest-provider": "^0.1.7", + "@backstage/cli": "^0.36.0", + "@backstage/plugin-auth-backend": "^0.27.3", + "@backstage/plugin-auth-backend-module-guest-provider": "^0.2.17", "@types/supertest": "^2.0.12", "msw": "^1.0.0", "supertest": "^6.2.4" }, + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.ts" + }, "files": [ "dist" ] diff --git a/plugins/terraform-backend/src/alpha.ts b/plugins/terraform-backend/src/alpha.ts new file mode 100644 index 0000000..7079287 --- /dev/null +++ b/plugins/terraform-backend/src/alpha.ts @@ -0,0 +1,7 @@ +/** + * Alpha entry point for the terraform backend plugin. + * Re-exports the plugin for use with the new Backstage backend system. + * + * @alpha + */ +export { terraformPlugin as default } from './plugin'; diff --git a/plugins/terraform/package.json b/plugins/terraform/package.json index cb161a5..e81345e 100644 --- a/plugins/terraform/package.json +++ b/plugins/terraform/package.json @@ -3,6 +3,17 @@ "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.tsx", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": ["src/alpha.tsx"], + "package.json": ["package.json"] + } + }, "license": "Apache-2.0", "private": true, "publishConfig": { @@ -24,22 +35,20 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.14.8", - "@backstage/core-plugin-api": "^1.9.3", - "@backstage/theme": "^0.5.6", - "@material-ui/core": "^4.9.13", - "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.61", + "@backstage/core-components": "^0.18.8", + "@backstage/core-plugin-api": "^1.12.4", + "@backstage/frontend-plugin-api": "^0.15.1", + "@backstage/theme": "^0.7.2", "react-use": "^17.2.4" }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.26.10", - "@backstage/core-app-api": "^1.13.0", - "@backstage/dev-utils": "^1.0.34", - "@backstage/test-utils": "^1.5.7", + "@backstage/cli": "^0.36.0", + "@backstage/core-app-api": "^1.19.6", + "@backstage/dev-utils": "^1.1.21", + "@backstage/test-utils": "^1.7.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/terraform/src/alpha.tsx b/plugins/terraform/src/alpha.tsx new file mode 100644 index 0000000..4c08132 --- /dev/null +++ b/plugins/terraform/src/alpha.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { createFrontendPlugin, PageBlueprint } from '@backstage/frontend-plugin-api'; + +/** + * PageBlueprint extension for the Terraform plugin. + * Registers the main page under /terraform. + */ +const TerraformPage = PageBlueprint.make({ + params: { + path: '/terraform', + loader: () => + import('./components/RootComponent').then(m => ), + }, +}); + +/** + * New frontend system plugin entry point for @internal/plugin-terraform. + * Import via the "/alpha" sub-path export. + */ +export default createFrontendPlugin({ + pluginId: 'terraform', + extensions: [TerraformPage], +}); diff --git a/plugins/terraform/src/components/MainPageComponent/MainPageComponent.tsx b/plugins/terraform/src/components/MainPageComponent/MainPageComponent.tsx index 8825902..35aed3e 100644 --- a/plugins/terraform/src/components/MainPageComponent/MainPageComponent.tsx +++ b/plugins/terraform/src/components/MainPageComponent/MainPageComponent.tsx @@ -1,12 +1,12 @@ import React from 'react'; - -// import { -// Header, -// Page, -// Content, -// } from '@backstage/core-components'; +import { Page, Header, Content } from '@backstage/core-components'; import { MainPageFetchComponent } from '../MainPageFetchComponent'; export const MainPageComponent = () => ( - + +
+ + + + ); \ No newline at end of file diff --git a/plugins/terraform/src/components/MainPageFetchComponent/MainPageFetchComponent.tsx b/plugins/terraform/src/components/MainPageFetchComponent/MainPageFetchComponent.tsx index 00129da..86c25b8 100644 --- a/plugins/terraform/src/components/MainPageFetchComponent/MainPageFetchComponent.tsx +++ b/plugins/terraform/src/components/MainPageFetchComponent/MainPageFetchComponent.tsx @@ -12,8 +12,25 @@ import { } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; import { useEntity } from '@backstage/plugin-catalog-react'; -import { Grid } from '@material-ui/core'; -import Drawer from '@material-ui/core/Drawer'; +// Slide-over panel styles (replaces MUI Drawer) +const drawerOverlayStyle: React.CSSProperties = { + position: 'fixed', + inset: 0, + background: 'rgba(0,0,0,0.3)', + zIndex: 1200, +}; +const drawerPanelStyle: React.CSSProperties = { + position: 'fixed', + top: 0, + right: 0, + bottom: 0, + width: '60%', + padding: '20px', + background: 'var(--backstage-color-background-paper, #fff)', + boxShadow: '-4px 0 24px rgba(0,0,0,0.15)', + zIndex: 1201, + overflowY: 'auto', +}; import { ResponseError } from '@backstage/errors'; import { @@ -81,14 +98,15 @@ export const ResourceTable = ({ resources,setResourceDetail }:{resources:any, se export const TerraformTables = ({ resources,outputs,setResourceDetail }: {resources: any[], outputs: any[], setResourceDetail:Dispatch>}) => { return ( <> - - + {/* CSS grid replaces MUI Grid (MUI removed per BUI migration) */} +
+
- - +
+
- - +
+
); }; @@ -330,12 +348,13 @@ export const MainPageFetchComponent = () => { return <> - setResourceDetail({})} - > - - + {resourceDetail.name && ( + <> +
setResourceDetail({})} /> +
+ +
+ + )} ; }; diff --git a/plugins/terraform/src/index.ts b/plugins/terraform/src/index.ts index 8f2ccf2..18118d6 100644 --- a/plugins/terraform/src/index.ts +++ b/plugins/terraform/src/index.ts @@ -1 +1 @@ -export {isTerraformAvailable, terraformPlugin, TerraformPluginPage} from './plugin'; \ No newline at end of file +export {isTerraformAvailable, terraformPlugin, TerraformPluginPage, EntityTerraformContent} from './plugin'; \ No newline at end of file diff --git a/plugins/terraform/src/plugin.ts b/plugins/terraform/src/plugin.ts index 0f3e194..dc9f4f3 100644 --- a/plugins/terraform/src/plugin.ts +++ b/plugins/terraform/src/plugin.ts @@ -48,3 +48,14 @@ export const TerraformPluginPage = terraformPlugin.provide( mountPoint: rootRouteRef, }), ); + +export const EntityTerraformContent = terraformPlugin.provide( + createRoutableExtension({ + name: 'EntityTerraformContent', + component: () => + import('./components/MainPageFetchComponent').then( + m => m.MainPageFetchComponent, + ), + mountPoint: rootRouteRef, + }), +); diff --git a/tsconfig.json b/tsconfig.json index ba3f901..a46db52 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,8 @@ { "extends": "@backstage/cli/config/tsconfig.json", - "include": [ - "packages/*/src", - "plugins/*/src", - "plugins/*/dev", - "plugins/*/migrations" - ], - "exclude": ["node_modules"], - "compilerOptions": { - "outDir": "dist-types", - "rootDir": "." - } + "include": [], + "references": [ + { "path": "packages/app" }, + { "path": "packages/backend" } + ] } diff --git a/yarn.lock b/yarn.lock index be13326..90a7ce3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,48 +7,127 @@ resolved "https://registry.npmmirror.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== +"@acemir/cssom@^0.9.31": + version "0.9.31" + resolved "https://registry.yarnpkg.com/@acemir/cssom/-/cssom-0.9.31.tgz#bd5337d290fb8be2ac18391f37386bc53778b0bc" + integrity sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA== + "@adobe/css-tools@^4.0.1", "@adobe/css-tools@^4.3.2": version "4.3.3" resolved "https://registry.npmmirror.com/@adobe/css-tools/-/css-tools-4.3.3.tgz#90749bde8b89cd41764224f5aac29cd4138f75ff" integrity sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ== -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" +"@adobe/react-spectrum-ui@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@adobe/react-spectrum-ui/-/react-spectrum-ui-1.2.1.tgz#31651a1c664b014bd7b4f8a2265e26ae418aecec" + integrity sha512-wcrbEE2O/9WnEn6avBnaVRRx88S5PLFsPLr4wffzlbMfXeQsy+RMQwaJd3cbzrn18/j04Isit7f7Emfn0dhrJA== + +"@adobe/react-spectrum-workflow@2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@adobe/react-spectrum-workflow/-/react-spectrum-workflow-2.3.5.tgz#3f5adc5fe2bae25416805b7d92c1ff5bd1e061f0" + integrity sha512-b53VIPwPWKb/T5gzE3qs+QlGP5gVrw/LnWV3xMksDU+CRl3rzOKUwxIGiZO8ICyYh1WiyqY4myGlPU/nAynBUg== + +"@adobe/react-spectrum@3.47.0": + version "3.47.0" + resolved "https://registry.yarnpkg.com/@adobe/react-spectrum/-/react-spectrum-3.47.0.tgz#efc3540225bb73dd94b70499adb61dfe1041b8af" + integrity sha512-EDQuMzz0kUeiMUUlxoeLFQyyxOXaAC7qlBw2PYOUfFLYd87xcV7VVV0JxiYx8zGk1IIY3UgQHgXrS1fv7CgezQ== + dependencies: + "@internationalized/date" "^3.12.1" + "@react-types/shared" "^3.34.0" + "@spectrum-icons/ui" "^3.7.0" + "@spectrum-icons/workflow" "^4.3.0" + "@swc/helpers" "^0.5.0" + client-only "^0.0.1" + clsx "^2.0.0" + react-aria "3.48.0" + react-aria-components "1.17.0" + react-stately "3.46.0" + react-transition-group "^4.4.5" + use-sync-external-store "^1.6.0" -"@apidevtools/json-schema-ref-parser@^9.1.2": - version "9.1.2" - resolved "https://registry.npmmirror.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz#8ff5386b365d4c9faa7c8b566ff16a46a577d9b8" - integrity sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg== +"@apidevtools/json-schema-ref-parser@11.7.2": + version "11.7.2" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.7.2.tgz#cdf3e0aded21492364a70e193b45b7cf4177f031" + integrity sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA== dependencies: "@jsdevtools/ono" "^7.1.3" - "@types/json-schema" "^7.0.6" - call-me-maybe "^1.0.1" + "@types/json-schema" "^7.0.15" js-yaml "^4.1.0" -"@ardatan/sync-fetch@^0.0.1": - version "0.0.1" - resolved "https://registry.npmmirror.com/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz#3385d3feedceb60a896518a1db857ec1e945348f" - integrity sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA== +"@apidevtools/json-schema-ref-parser@^14.2.1": + version "14.2.1" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-14.2.1.tgz#40040f6a9a250b92055723a76e48dde0efb9688b" + integrity sha512-HmdFw9CDYqM6B25pqGBpNeLCKvGPlIx1EbLrVL0zPvj50CJQUHyBNBw45Muk0kEIkogo1VZvOKHajdMuAzSxRg== dependencies: - node-fetch "^2.6.1" + js-yaml "^4.1.0" + +"@apidevtools/openapi-schemas@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz#9fa08017fb59d80538812f03fc7cac5992caaa17" + integrity sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ== -"@asyncapi/avro-schema-parser@^3.0.15": +"@apidevtools/swagger-methods@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz#b789a362e055b0340d04712eafe7027ddc1ac267" + integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg== + +"@apidevtools/swagger-parser@^10.1.0": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-parser/-/swagger-parser-10.1.1.tgz#e29bf17cf94b487a340e06784e9fbe20cb671c45" + integrity sha512-u/kozRnsPO/x8QtKYJOqoGtC4kH6yg1lfYkB9Au0WhYB0FNLpyFusttQtvhlwjtG3rOwiRz4D8DnnXa8iEpIKA== + dependencies: + "@apidevtools/json-schema-ref-parser" "11.7.2" + "@apidevtools/openapi-schemas" "^2.1.0" + "@apidevtools/swagger-methods" "^3.0.2" + "@jsdevtools/ono" "^7.1.3" + ajv "^8.17.1" + ajv-draft-04 "^1.0.0" + call-me-maybe "^1.0.2" + +"@asamuzakjp/css-color@^5.0.1": + version "5.1.11" + resolved "https://registry.yarnpkg.com/@asamuzakjp/css-color/-/css-color-5.1.11.tgz#28a0aac8220a4cc19045ac3bd9a813d4060bd375" + integrity sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg== + dependencies: + "@asamuzakjp/generational-cache" "^1.0.1" + "@csstools/css-calc" "^3.2.0" + "@csstools/css-color-parser" "^4.1.0" + "@csstools/css-parser-algorithms" "^4.0.0" + "@csstools/css-tokenizer" "^4.0.0" + +"@asamuzakjp/dom-selector@^6.8.1": + version "6.8.1" + resolved "https://registry.yarnpkg.com/@asamuzakjp/dom-selector/-/dom-selector-6.8.1.tgz#39b20993672b106f7cd9a3a9a465212e87e0bfd1" + integrity sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ== + dependencies: + "@asamuzakjp/nwsapi" "^2.3.9" + bidi-js "^1.0.3" + css-tree "^3.1.0" + is-potential-custom-element-name "^1.0.1" + lru-cache "^11.2.6" + +"@asamuzakjp/generational-cache@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz#3d0bf6be4fc059851390a7070720c6007af793ec" + integrity sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg== + +"@asamuzakjp/nwsapi@^2.3.9": + version "2.3.9" + resolved "https://registry.yarnpkg.com/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz#ad5549322dfe9d153d4b4dd6f7ff2ae234b06e24" + integrity sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q== + +"@asyncapi/avro-schema-parser@^3.0.24": version "3.0.24" - resolved "https://registry.npmmirror.com/@asyncapi/avro-schema-parser/-/avro-schema-parser-3.0.24.tgz#3379d119db8daf1e874582ba56bd8767c8681148" + resolved "https://registry.yarnpkg.com/@asyncapi/avro-schema-parser/-/avro-schema-parser-3.0.24.tgz#3379d119db8daf1e874582ba56bd8767c8681148" integrity sha512-YMyr2S2heMrWHRyECknjHeejlZl5exUSv9nD1gTejAT13fSf0PqIRydZ9ZuoglCLBg55AeehypR2zLIBu/9kHQ== dependencies: "@asyncapi/parser" "^3.1.0" "@types/json-schema" "^7.0.11" avsc "^5.7.6" -"@asyncapi/openapi-schema-parser@^3.0.15": +"@asyncapi/openapi-schema-parser@^3.0.24": version "3.0.24" - resolved "https://registry.npmmirror.com/@asyncapi/openapi-schema-parser/-/openapi-schema-parser-3.0.24.tgz#efbb0151c4c657107c0ca5ee8dfe21999a9c9446" + resolved "https://registry.yarnpkg.com/@asyncapi/openapi-schema-parser/-/openapi-schema-parser-3.0.24.tgz#efbb0151c4c657107c0ca5ee8dfe21999a9c9446" integrity sha512-7wz2yVDedJMS+TzOuqCvRWJMc6pNHICKZcOhnW6ZvyVLAh7hYIqQE1WA4OoXT4cKVbwSU3V2Q4bZagSsAIQd6Q== dependencies: "@asyncapi/parser" "^3.1.0" @@ -57,7 +136,7 @@ ajv-errors "^3.0.0" ajv-formats "^2.1.1" -"@asyncapi/parser@^3.0.15", "@asyncapi/parser@^3.0.7", "@asyncapi/parser@^3.1.0": +"@asyncapi/parser@^3.1.0": version "3.1.0" resolved "https://registry.npmmirror.com/@asyncapi/parser/-/parser-3.1.0.tgz#2c8122dfa57b6d3de10f933f5a0729cea0b39e9b" integrity sha512-rUd+fsPRE68o+F3gLqk7OaBj5J5VgBiLk9eJBGEXolNmKbVd45mxJm2aBpMkphQEmYHuBvxZyiNYlSCyr1D2fA== @@ -82,29 +161,62 @@ jsonpath-plus "^7.2.0" node-fetch "2.6.7" -"@asyncapi/protobuf-schema-parser@^3.2.4": - version "3.2.13" - resolved "https://registry.npmmirror.com/@asyncapi/protobuf-schema-parser/-/protobuf-schema-parser-3.2.13.tgz#5a56e5a29b117ce6244e2221e8be8d4daaa87f35" - integrity sha512-8h+lLoCadAXi1HynYisgHYPDa2P+hzg03vie/6Ngdzm0h0fbrCMKdLneiv0OO5Ec96W0JgsTeGbs8bk6k63qAw== +"@asyncapi/parser@^3.3.0", "@asyncapi/parser@^3.4.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@asyncapi/parser/-/parser-3.6.0.tgz#89b52d79e8f8856c6eecc849d5f7931d5863b0d4" + integrity sha512-6S0Yr8vI418a1IrpGsOYbfWVo9+aHvSqN2oSkiY0YJltS/C7oDOt9e0mo6hSld8bg+EeKrtgkVmpW4obh1JFvA== dependencies: - "@asyncapi/parser" "^3.0.15" - "@types/protocol-buffers-schema" "^3.4.1" - protobufjs "^7.2.6" + "@asyncapi/specs" "^6.11.1" + "@openapi-contrib/openapi-schema-to-json-schema" "~3.2.0" + "@stoplight/json" "3.21.0" + "@stoplight/json-ref-readers" "^1.2.2" + "@stoplight/json-ref-resolver" "^3.1.5" + "@stoplight/spectral-core" "^1.18.3" + "@stoplight/spectral-functions" "^1.7.2" + "@stoplight/spectral-parsers" "^1.0.2" + "@stoplight/spectral-ref-resolver" "^1.0.3" + "@stoplight/types" "^13.12.0" + "@types/json-schema" "^7.0.11" + "@types/urijs" "^1.19.19" + ajv "^8.17.1" + ajv-errors "^3.0.0" + ajv-formats "^2.1.1" + avsc "^5.7.5" + js-yaml "^4.1.1" + jsonpath-plus "^10.0.7" + node-fetch "2.6.7" -"@asyncapi/react-component@1.3.1": - version "1.3.1" - resolved "https://registry.npmmirror.com/@asyncapi/react-component/-/react-component-1.3.1.tgz#1d1e812bb25c9a913de1847cf55d5ce4e04fcbfe" - integrity sha512-mcJnPQV2SLmtTfKstXwP7A4zmlVjazty4yttyynSZEW4t2KmEu3qk5h79R7adONLC2fIiFdlCENyJqJXkfp+Cg== - dependencies: - "@asyncapi/avro-schema-parser" "^3.0.15" - "@asyncapi/openapi-schema-parser" "^3.0.15" - "@asyncapi/parser" "^3.0.7" - "@asyncapi/protobuf-schema-parser" "^3.2.4" +"@asyncapi/protobuf-schema-parser@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@asyncapi/protobuf-schema-parser/-/protobuf-schema-parser-3.6.0.tgz#b8c0b19981d4cf70b2dbae01aa2a26916f3df8e5" + integrity sha512-z6zVRAMi2bkkgjREoCIvUg7KcacyoEh+VIwQmEni/JPuPFMOD3oPv4kwoftEeiF2+gGiioeIxpkI5x7rmHf2Nw== + dependencies: + "@asyncapi/parser" "^3.4.0" + "@types/protocol-buffers-schema" "^3.4.3" + protobufjs "^7.4.0" + +"@asyncapi/react-component@^2.3.3": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@asyncapi/react-component/-/react-component-2.6.5.tgz#399bd249bfafd87ed1285540ee91394f93f1ca4a" + integrity sha512-+kQyIc337MHGTQ1ZYEuY2vfCyii2J/3o3Pm5/oJFgzWs9jWIz7/momLFl6rsS7Yd7elBam9Ukw0F3oM1AwwyHQ== + dependencies: + "@asyncapi/avro-schema-parser" "^3.0.24" + "@asyncapi/openapi-schema-parser" "^3.0.24" + "@asyncapi/parser" "^3.3.0" + "@asyncapi/protobuf-schema-parser" "^3.6.0" highlight.js "^10.7.2" - isomorphic-dompurify "^0.13.0" + isomorphic-dompurify "^2.14.0" marked "^4.0.14" openapi-sampler "^1.2.1" - use-resize-observer "^8.0.0" + react-error-boundary "^4.1.2" + use-resize-observer "^9.1.0" + +"@asyncapi/specs@^6.11.1": + version "6.11.1" + resolved "https://registry.yarnpkg.com/@asyncapi/specs/-/specs-6.11.1.tgz#c629fe962a241a983f883a56b0e9c901a311becb" + integrity sha512-A3WBLqAKGoJ2+6FWFtpjBlCQ1oFCcs4GxF7zsIGvNqp/klGUHjlA3aAcZ9XMMpLGE8zPeYDz2x9FmO6DSuKraQ== + dependencies: + "@types/json-schema" "^7.0.11" "@asyncapi/specs@^6.7.1": version "6.7.1" @@ -165,6 +277,19 @@ "@aws-sdk/util-utf8-browser" "^3.0.0" tslib "^1.11.1" +"@aws-crypto/sha256-browser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" + integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== + dependencies: + "@aws-crypto/sha256-js" "^5.2.0" + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + "@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": version "3.0.0" resolved "https://registry.npmmirror.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" @@ -174,7 +299,7 @@ "@aws-sdk/types" "^3.222.0" tslib "^1.11.1" -"@aws-crypto/sha256-js@^5.0.0": +"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.0.0", "@aws-crypto/sha256-js@^5.2.0": version "5.2.0" resolved "https://registry.npmmirror.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== @@ -190,6 +315,13 @@ dependencies: tslib "^1.11.1" +"@aws-crypto/supports-web-crypto@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" + integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== + dependencies: + tslib "^2.6.2" + "@aws-crypto/util@^3.0.0": version "3.0.0" resolved "https://registry.npmmirror.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" @@ -264,6 +396,51 @@ tslib "^2.6.2" uuid "^9.0.1" +"@aws-sdk/client-cognito-identity@3.1035.0": + version "3.1035.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.1035.0.tgz#8e0ef08dd08b3c6687b0e204eab8f68f3a14e68e" + integrity sha512-sHjCtR5GdKVXZ/bEXwqUMoGzak9fnI4Ny/NyG7+gAkYC1Z+CIg5Kr4QSrqGjA+N2iwCly8f2/rGAsNo+JGeaNA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "^3.974.4" + "@aws-sdk/credential-provider-node" "^3.972.35" + "@aws-sdk/middleware-host-header" "^3.972.10" + "@aws-sdk/middleware-logger" "^3.972.10" + "@aws-sdk/middleware-recursion-detection" "^3.972.11" + "@aws-sdk/middleware-user-agent" "^3.972.34" + "@aws-sdk/region-config-resolver" "^3.972.13" + "@aws-sdk/types" "^3.973.8" + "@aws-sdk/util-endpoints" "^3.996.8" + "@aws-sdk/util-user-agent-browser" "^3.972.10" + "@aws-sdk/util-user-agent-node" "^3.973.20" + "@smithy/config-resolver" "^4.4.17" + "@smithy/core" "^3.23.16" + "@smithy/fetch-http-handler" "^5.3.17" + "@smithy/hash-node" "^4.2.14" + "@smithy/invalid-dependency" "^4.2.14" + "@smithy/middleware-content-length" "^4.2.14" + "@smithy/middleware-endpoint" "^4.4.31" + "@smithy/middleware-retry" "^4.5.4" + "@smithy/middleware-serde" "^4.2.19" + "@smithy/middleware-stack" "^4.2.14" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/node-http-handler" "^4.6.0" + "@smithy/protocol-http" "^5.3.14" + "@smithy/smithy-client" "^4.12.12" + "@smithy/types" "^4.14.1" + "@smithy/url-parser" "^4.2.14" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-body-length-browser" "^4.2.2" + "@smithy/util-body-length-node" "^4.2.3" + "@smithy/util-defaults-mode-browser" "^4.3.48" + "@smithy/util-defaults-mode-node" "^4.2.53" + "@smithy/util-endpoints" "^3.4.2" + "@smithy/util-middleware" "^4.2.14" + "@smithy/util-retry" "^4.3.3" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + "@aws-sdk/client-cognito-identity@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.502.0.tgz#c95330a44c381339e7f4280a20d1298d46ed582a" @@ -668,6 +845,26 @@ fast-xml-parser "4.2.5" tslib "^2.6.2" +"@aws-sdk/core@^3.974.4": + version "3.974.4" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.974.4.tgz#0bc9a0ff43778abf4d3cb3167fbe086fa4afcd44" + integrity sha512-EbVgyzQ83/Lf6oh1O4vYY47tuYw3Aosthh865LNU77KyotKz+uvEBNmsl/bSVS/vG+IU39mCqcOHrnhmhF4lug== + dependencies: + "@aws-sdk/types" "^3.973.8" + "@aws-sdk/xml-builder" "^3.972.18" + "@smithy/core" "^3.23.16" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/property-provider" "^4.2.14" + "@smithy/protocol-http" "^5.3.14" + "@smithy/signature-v4" "^5.3.14" + "@smithy/smithy-client" "^4.12.12" + "@smithy/types" "^4.14.1" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-middleware" "^4.2.14" + "@smithy/util-retry" "^4.3.3" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + "@aws-sdk/credential-provider-cognito-identity@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.502.0.tgz#251d7d40dbebcf47c397503de222d03474bc7014" @@ -679,6 +876,17 @@ "@smithy/types" "^2.9.1" tslib "^2.5.0" +"@aws-sdk/credential-provider-cognito-identity@^3.972.27": + version "3.972.27" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.972.27.tgz#17912b255560d95956feda83d95e531b09565fba" + integrity sha512-ibA1vjaLhS1c/wNa9SSSOunjz5I72DBfAYrtM4G4sKQ3wPuk8ycfvU3AF8nEJBfefqPu2RhHxW7bEC9wiA/MTA== + dependencies: + "@aws-sdk/nested-clients" "^3.997.2" + "@aws-sdk/types" "^3.973.8" + "@smithy/property-provider" "^4.2.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-env@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.502.0.tgz#800e63b2b9d90b078a120d474d5a3b1ec5b48514" @@ -699,6 +907,17 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-env@^3.972.30": + version "3.972.30" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.30.tgz#7df82f761e8984a1fab6358c3c906f67fbbdbe91" + integrity sha512-dHpeqa29a0cBYq/h59IC2EK3AphLY96nKy4F35kBtiz9GuKDc32UYRTgjZaF8uuJCnqgw9omUZKR+9myyDHC2A== + dependencies: + "@aws-sdk/core" "^3.974.4" + "@aws-sdk/types" "^3.973.8" + "@smithy/property-provider" "^4.2.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-http@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.502.0.tgz#2472433af812da63f6c859d9a1ff803bcd64a113" @@ -729,6 +948,22 @@ "@smithy/util-stream" "^3.0.1" tslib "^2.6.2" +"@aws-sdk/credential-provider-http@^3.972.32": + version "3.972.32" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.32.tgz#a1e6b6bfdf5ff0e5a351794938c43d80877f044d" + integrity sha512-A+ZTT//Mswkf9DFEM6XlngwOtYdD8X4CUcoZ2wdpgI8cCs9mcGeuhgTwbGJvealub/MeONOaUr3FbRPMKmTDjg== + dependencies: + "@aws-sdk/core" "^3.974.4" + "@aws-sdk/types" "^3.973.8" + "@smithy/fetch-http-handler" "^5.3.17" + "@smithy/node-http-handler" "^4.6.0" + "@smithy/property-provider" "^4.2.14" + "@smithy/protocol-http" "^5.3.14" + "@smithy/smithy-client" "^4.12.12" + "@smithy/types" "^4.14.1" + "@smithy/util-stream" "^4.5.24" + tslib "^2.6.2" + "@aws-sdk/credential-provider-ini@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.502.0.tgz#7bfe665689a7c9002d43d0203ecd5a525ac95bd0" @@ -763,6 +998,40 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-ini@^3.972.34": + version "3.972.34" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.34.tgz#13d35406661e073a44bb45dd86a3abe0b2a4fa90" + integrity sha512-MoRc7tLnx3JpFkV2R826enEfBUVN8o9Cc7y3hnbMwiWzL/VJhgfxRQzHkEL9vWorMWP7tibltsRcLoid9fsVdw== + dependencies: + "@aws-sdk/core" "^3.974.4" + "@aws-sdk/credential-provider-env" "^3.972.30" + "@aws-sdk/credential-provider-http" "^3.972.32" + "@aws-sdk/credential-provider-login" "^3.972.34" + "@aws-sdk/credential-provider-process" "^3.972.30" + "@aws-sdk/credential-provider-sso" "^3.972.34" + "@aws-sdk/credential-provider-web-identity" "^3.972.34" + "@aws-sdk/nested-clients" "^3.997.2" + "@aws-sdk/types" "^3.973.8" + "@smithy/credential-provider-imds" "^4.2.14" + "@smithy/property-provider" "^4.2.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-login@^3.972.34": + version "3.972.34" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.34.tgz#e0a9534df7127d3e32f774dae19c496d68786927" + integrity sha512-XVSklkRRQ/CQDmv3VVFdZRl5hTFgncFhZrLyi0Ai4LZk5o3jpY5HIfuTK7ad7tixPKa+iQmL9+vg9qNyYZB+nw== + dependencies: + "@aws-sdk/core" "^3.974.4" + "@aws-sdk/nested-clients" "^3.997.2" + "@aws-sdk/types" "^3.973.8" + "@smithy/property-provider" "^4.2.14" + "@smithy/protocol-http" "^5.3.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-node@3.502.0", "@aws-sdk/credential-provider-node@^3.350.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.502.0.tgz#68929ccd6b99075e19e42a47d2baed84f24b0b05" @@ -798,6 +1067,24 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-node@^3.972.35": + version "3.972.35" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.35.tgz#63b0bcdb7efdf7cfb1d6c49d8e60f128f6b0becd" + integrity sha512-nVrY7AdGfzYgAa/jd9m06p3ES7QQDaB7zN9c+vXnVXxBRkAs9MjRDPB5AKogWuC6phddltfvHGFqLDJmyU9u/A== + dependencies: + "@aws-sdk/credential-provider-env" "^3.972.30" + "@aws-sdk/credential-provider-http" "^3.972.32" + "@aws-sdk/credential-provider-ini" "^3.972.34" + "@aws-sdk/credential-provider-process" "^3.972.30" + "@aws-sdk/credential-provider-sso" "^3.972.34" + "@aws-sdk/credential-provider-web-identity" "^3.972.34" + "@aws-sdk/types" "^3.973.8" + "@smithy/credential-provider-imds" "^4.2.14" + "@smithy/property-provider" "^4.2.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-process@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.502.0.tgz#6c41d8845a1c7073491a064c158363de04640381" @@ -820,6 +1107,18 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-process@^3.972.30": + version "3.972.30" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.30.tgz#f4f86454d64a87cbde420bfe07f68f3705575a51" + integrity sha512-McJPomNTSEo+C6UA3Zq6pFrcyTUaVsoPPBOvbOHAoIFPc8Z2CMLndqFJOnB+9bVFiBTWQLutlVGmrocBbvv4MQ== + dependencies: + "@aws-sdk/core" "^3.974.4" + "@aws-sdk/types" "^3.973.8" + "@smithy/property-provider" "^4.2.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-sso@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.502.0.tgz#0ce95599115afdbbeb030a911b63acd662ba7ebf" @@ -846,6 +1145,20 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-sso@^3.972.34": + version "3.972.34" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.34.tgz#922f5c21efd4e5b069381fc3d72956089d1208cd" + integrity sha512-WngYb2K+/yhkDOmDfAOjoCa9Ja3he0DZiAraboKwgWoVRkajDIcDYBCVbUTxtTUldvQoe7VvHLTrBNxvftN1aQ== + dependencies: + "@aws-sdk/core" "^3.974.4" + "@aws-sdk/nested-clients" "^3.997.2" + "@aws-sdk/token-providers" "3.1035.0" + "@aws-sdk/types" "^3.973.8" + "@smithy/property-provider" "^4.2.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-web-identity@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.502.0.tgz#d45a8e78578f4613dc62275548a7196c01f5ed17" @@ -867,6 +1180,45 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-web-identity@^3.972.34": + version "3.972.34" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.34.tgz#789bb6d9bbe9d9cac7ff817c17de14842062fc56" + integrity sha512-5KLUH+XmSNRj6amJiJSrPsCxU5l/PYDfxyqPa1MxWhHoQC3sxvGPrSib3IE+HQlfRA4e2kO0bnJy7HJdjvpuuA== + dependencies: + "@aws-sdk/core" "^3.974.4" + "@aws-sdk/nested-clients" "^3.997.2" + "@aws-sdk/types" "^3.973.8" + "@smithy/property-provider" "^4.2.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + +"@aws-sdk/credential-providers@3.1035.0": + version "3.1035.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.1035.0.tgz#133461fc4c45324605ada4cb551006049cc8009c" + integrity sha512-HimZ+jVYJzeD6+pwXvhKX2mvx2fScLbjC4+oz1HF9Vuls/3lAWKHssLLVpCIuXL8Ov6cWe1vQIbwpFajuTAmEA== + dependencies: + "@aws-sdk/client-cognito-identity" "3.1035.0" + "@aws-sdk/core" "^3.974.4" + "@aws-sdk/credential-provider-cognito-identity" "^3.972.27" + "@aws-sdk/credential-provider-env" "^3.972.30" + "@aws-sdk/credential-provider-http" "^3.972.32" + "@aws-sdk/credential-provider-ini" "^3.972.34" + "@aws-sdk/credential-provider-login" "^3.972.34" + "@aws-sdk/credential-provider-node" "^3.972.35" + "@aws-sdk/credential-provider-process" "^3.972.30" + "@aws-sdk/credential-provider-sso" "^3.972.34" + "@aws-sdk/credential-provider-web-identity" "^3.972.34" + "@aws-sdk/nested-clients" "^3.997.2" + "@aws-sdk/types" "^3.973.8" + "@smithy/config-resolver" "^4.4.17" + "@smithy/core" "^3.23.16" + "@smithy/credential-provider-imds" "^4.2.14" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/property-provider" "^4.2.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/credential-providers@^3.350.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-providers/-/credential-providers-3.502.0.tgz#6aca7597c5d0a60a7888b13c57d18f41d4383ff0" @@ -959,6 +1311,16 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/middleware-host-header@^3.972.10": + version "3.972.10" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.10.tgz#e63b91959ce46948d789582351b2a44c4876e924" + integrity sha512-IJSsIMeVQ8MMCPbuh1AbltkFhLBLXn7aejzfX5YKT/VLDHn++Dcz8886tXckE+wQssyPUhaXrJhdakO2VilRhg== + dependencies: + "@aws-sdk/types" "^3.973.8" + "@smithy/protocol-http" "^5.3.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/middleware-location-constraint@3.502.0": version "3.502.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.502.0.tgz#188c3bae2e908aff11030af10bc3b64c87905910" @@ -986,6 +1348,15 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/middleware-logger@^3.972.10": + version "3.972.10" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.972.10.tgz#d92b3374dcaddd523930bdff441207946343c270" + integrity sha512-OOuGvvz1Dm20SjZo5oEBePFqxt5nf8AwkNDSyUHvD9/bfNASmstcYxFAHUowy4n6Io7mWUZ04JURZwSBvyQanQ== + dependencies: + "@aws-sdk/types" "^3.973.8" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/middleware-recursion-detection@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.502.0.tgz#c22e2c0c1d551e58c788264687324bb7186af2cc" @@ -1006,6 +1377,17 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/middleware-recursion-detection@^3.972.11": + version "3.972.11" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.11.tgz#5659982a34fa58c69cbd358c2987c32aefd2bd91" + integrity sha512-+zz6f79Kj9V5qFK2P+D8Ehjnw4AhphAlCAsPjUqEcInA9umtSSKMrHbSagEeOIsDNuvVrH98bjRHcyQukTrhaQ== + dependencies: + "@aws-sdk/types" "^3.973.8" + "@aws/lambda-invoke-store" "^0.2.2" + "@smithy/protocol-http" "^5.3.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/middleware-sdk-s3@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.502.0.tgz#a2d968414247fd9cbfc90e1071f29e4375cb25b8" @@ -1021,6 +1403,26 @@ "@smithy/util-config-provider" "^2.2.1" tslib "^2.5.0" +"@aws-sdk/middleware-sdk-s3@^3.972.33": + version "3.972.33" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.33.tgz#51004da8c3155f9ed24f47de52cc2ebfe4b4990a" + integrity sha512-n8Eh/+kq3u/EodLr8n6sQupu03QGjf122RHXCTGLaHSkavz/2beSKpRlq2oDgfmJZNkAkWF113xbyaUmyOd+YA== + dependencies: + "@aws-sdk/core" "^3.974.4" + "@aws-sdk/types" "^3.973.8" + "@aws-sdk/util-arn-parser" "^3.972.3" + "@smithy/core" "^3.23.16" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/protocol-http" "^5.3.14" + "@smithy/signature-v4" "^5.3.14" + "@smithy/smithy-client" "^4.12.12" + "@smithy/types" "^4.14.1" + "@smithy/util-config-provider" "^4.2.2" + "@smithy/util-middleware" "^4.2.14" + "@smithy/util-stream" "^4.5.24" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + "@aws-sdk/middleware-signing@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/middleware-signing/-/middleware-signing-3.502.0.tgz#48b3503147eecb1a53a63633462de353668f635a" @@ -1065,6 +1467,83 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/middleware-user-agent@^3.972.34": + version "3.972.34" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.34.tgz#e5571d48a6f6351c68025131d27deb71993320ad" + integrity sha512-jrmJHyYlTQocR7H4VhvSFhaoedMb2rmlOTvFWD6tNBQ/EVQhTsrNfQUYFuPiOc2wUGxbm5LgCHtnvVmCPgODHw== + dependencies: + "@aws-sdk/core" "^3.974.4" + "@aws-sdk/types" "^3.973.8" + "@aws-sdk/util-endpoints" "^3.996.8" + "@smithy/core" "^3.23.16" + "@smithy/protocol-http" "^5.3.14" + "@smithy/types" "^4.14.1" + "@smithy/util-retry" "^4.3.3" + tslib "^2.6.2" + +"@aws-sdk/nested-clients@^3.997.2": + version "3.997.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.997.2.tgz#becaf989147403f9290113c1938dd36d21b9476b" + integrity sha512-uGGQO08YetrqfInOKG5atRMrCDRQWRuZ9gGfKY6svPmuE4K7ac+XcbCkpWpjcA7yCYsBaKB/Nly4XKgPXUO1PA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "^3.974.4" + "@aws-sdk/middleware-host-header" "^3.972.10" + "@aws-sdk/middleware-logger" "^3.972.10" + "@aws-sdk/middleware-recursion-detection" "^3.972.11" + "@aws-sdk/middleware-user-agent" "^3.972.34" + "@aws-sdk/region-config-resolver" "^3.972.13" + "@aws-sdk/signature-v4-multi-region" "^3.996.21" + "@aws-sdk/types" "^3.973.8" + "@aws-sdk/util-endpoints" "^3.996.8" + "@aws-sdk/util-user-agent-browser" "^3.972.10" + "@aws-sdk/util-user-agent-node" "^3.973.20" + "@smithy/config-resolver" "^4.4.17" + "@smithy/core" "^3.23.16" + "@smithy/fetch-http-handler" "^5.3.17" + "@smithy/hash-node" "^4.2.14" + "@smithy/invalid-dependency" "^4.2.14" + "@smithy/middleware-content-length" "^4.2.14" + "@smithy/middleware-endpoint" "^4.4.31" + "@smithy/middleware-retry" "^4.5.4" + "@smithy/middleware-serde" "^4.2.19" + "@smithy/middleware-stack" "^4.2.14" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/node-http-handler" "^4.6.0" + "@smithy/protocol-http" "^5.3.14" + "@smithy/smithy-client" "^4.12.12" + "@smithy/types" "^4.14.1" + "@smithy/url-parser" "^4.2.14" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-body-length-browser" "^4.2.2" + "@smithy/util-body-length-node" "^4.2.3" + "@smithy/util-defaults-mode-browser" "^4.3.48" + "@smithy/util-defaults-mode-node" "^4.2.53" + "@smithy/util-endpoints" "^3.4.2" + "@smithy/util-middleware" "^4.2.14" + "@smithy/util-retry" "^4.3.3" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + +"@aws-sdk/rds-signer@^3.0.0": + version "3.1035.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/rds-signer/-/rds-signer-3.1035.0.tgz#d787e45a61f9be497453717060b48ce0d9547fcc" + integrity sha512-FrrZh58MbXM0tbXF4tTVz1KV17vQqP9baWmjkqB21E6B3vggmLjzbsKAA0c0J7R7r5eNFULeRmOBvrGr5vOHIQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/credential-providers" "3.1035.0" + "@aws-sdk/util-format-url" "^3.972.10" + "@smithy/config-resolver" "^4.4.17" + "@smithy/hash-node" "^4.2.14" + "@smithy/invalid-dependency" "^4.2.14" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/protocol-http" "^5.3.14" + "@smithy/signature-v4" "^5.3.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/region-config-resolver@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.502.0.tgz#c18a04060879eb03c47c05b05fc296119ee073ba" @@ -1089,6 +1568,17 @@ "@smithy/util-middleware" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/region-config-resolver@^3.972.13": + version "3.972.13" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.13.tgz#bd32748c2d41b62be838fec76c4b87d4370939c6" + integrity sha512-CvJ2ZIjK/jVD/lbOpowBVElJyC1YxLTIJ13yM0AEo0t2v7swOzGjSA6lJGH+DwZXQhcjUjoYwc8bVYCX5MDr1A== + dependencies: + "@aws-sdk/types" "^3.973.8" + "@smithy/config-resolver" "^4.4.17" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/signature-v4-multi-region@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.502.0.tgz#2d3fab86051eb98a4e4216e0f2f3d957a854b42c" @@ -1101,6 +1591,18 @@ "@smithy/types" "^2.9.1" tslib "^2.5.0" +"@aws-sdk/signature-v4-multi-region@^3.996.21": + version "3.996.21" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.21.tgz#eec249ca9f117ae859d333d2c2058175ca96e1c9" + integrity sha512-3EpT+C0QdmTMB5aVeJ5odWSLt9vg2oGzUXl1xvUazKGlkr9OBYnegNWqhhjGgZdv8RmSi5eS8nqqB+euNP2aqA== + dependencies: + "@aws-sdk/middleware-sdk-s3" "^3.972.33" + "@aws-sdk/types" "^3.973.8" + "@smithy/protocol-http" "^5.3.14" + "@smithy/signature-v4" "^5.3.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/signature-v4@^3.347.0": version "3.374.0" resolved "https://registry.npmmirror.com/@aws-sdk/signature-v4/-/signature-v4-3.374.0.tgz#bd727f4c392acb81bc667aa4cfceeba608250771" @@ -1109,6 +1611,19 @@ "@smithy/signature-v4" "^1.0.1" tslib "^2.5.0" +"@aws-sdk/token-providers@3.1035.0": + version "3.1035.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.1035.0.tgz#1b7b4eb594c8aab17be074e9e542ca13a80e97a3" + integrity sha512-E6IO3Cn+OzBe6Sb5pnubd5Y8qSUMAsVKkD5QSwFfIx5fV1g5SkYwUDRDyPlm90RuIVcCo28wpMJU6W8wXH46Aw== + dependencies: + "@aws-sdk/core" "^3.974.4" + "@aws-sdk/nested-clients" "^3.997.2" + "@aws-sdk/types" "^3.973.8" + "@smithy/property-provider" "^4.2.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/token-providers@3.502.0": version "3.502.0" resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.502.0.tgz#d477638d5bd0c47c881e63fa6395b238fe4a021c" @@ -1148,6 +1663,14 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/types@^3.973.8": + version "3.973.8" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.973.8.tgz#7352cb74a5f8bae1218eee63e714cf94302911c5" + integrity sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw== + dependencies: + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/util-arn-parser@3.495.0", "@aws-sdk/util-arn-parser@^3.310.0": version "3.495.0" resolved "https://registry.npmmirror.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.495.0.tgz#539f2d6dfef343a80324348f1f9a1b7eed2390f3" @@ -1155,6 +1678,13 @@ dependencies: tslib "^2.5.0" +"@aws-sdk/util-arn-parser@^3.972.3": + version "3.972.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.3.tgz#ed989862bbb172ce16d9e1cd5790e5fe367219c2" + integrity sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA== + dependencies: + tslib "^2.6.2" + "@aws-sdk/util-endpoints@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/util-endpoints/-/util-endpoints-3.502.0.tgz#aee818c0c53dfedfd49599fc260cd880faea5e82" @@ -1175,6 +1705,27 @@ "@smithy/util-endpoints" "^2.0.1" tslib "^2.6.2" +"@aws-sdk/util-endpoints@^3.996.8": + version "3.996.8" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.996.8.tgz#ad5c4f09b93482c0861d49d8a025edc2b0d2f5ec" + integrity sha512-oOZHcRDihk5iEe5V25NVWg45b3qEA8OpHWVdU/XQh8Zj4heVPAJqWvMphQnU7LkufmUo10EpvFPZuQMiFLJK3g== + dependencies: + "@aws-sdk/types" "^3.973.8" + "@smithy/types" "^4.14.1" + "@smithy/url-parser" "^4.2.14" + "@smithy/util-endpoints" "^3.4.2" + tslib "^2.6.2" + +"@aws-sdk/util-format-url@^3.972.10": + version "3.972.10" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.972.10.tgz#63184b56627b50842cf37cc0e63251944fc234ed" + integrity sha512-DEKiHNJVtNxdyTeQspzY+15Po/kHm6sF0Cs4HV9Q2+lplB63+DrvdeiSoOSdWEWAoO2RcY1veoXVDz2tWxWCgQ== + dependencies: + "@aws-sdk/types" "^3.973.8" + "@smithy/querystring-builder" "^4.2.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/util-locate-window@^3.0.0": version "3.495.0" resolved "https://registry.npmmirror.com/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz#9034fd8db77991b28ed20e067acdd53e8b8f824b" @@ -1202,6 +1753,16 @@ bowser "^2.11.0" tslib "^2.6.2" +"@aws-sdk/util-user-agent-browser@^3.972.10": + version "3.972.10" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.10.tgz#e29be10389db9db12b2d8246ad247a89038f4c60" + integrity sha512-FAzqXvfEssGdSIz8ejatan0bOdx1qefBWKF/gWmVBXIP1HkS7v/wjjaqrAGGKvyihrXTXW00/2/1nTJtxpXz7g== + dependencies: + "@aws-sdk/types" "^3.973.8" + "@smithy/types" "^4.14.1" + bowser "^2.11.0" + tslib "^2.6.2" + "@aws-sdk/util-user-agent-node@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.502.0.tgz#04ac4d0371d4f243f12ddc23b42ca8ceb27dfad9" @@ -1222,6 +1783,18 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/util-user-agent-node@^3.973.20": + version "3.973.20" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.20.tgz#a661a76ba9b5ec2ee7ac014d5e95c955b531abcf" + integrity sha512-owEqyKr0z5hWwk+uHwudwNhyFMZ9f9eSWr/k/XD6yeDCI7hHyc56s4UOY1iBQmoramTbdAY4UCuLLEuKmjVXrg== + dependencies: + "@aws-sdk/middleware-user-agent" "^3.972.34" + "@aws-sdk/types" "^3.973.8" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/types" "^4.14.1" + "@smithy/util-config-provider" "^4.2.2" + tslib "^2.6.2" + "@aws-sdk/util-utf8-browser@^3.0.0": version "3.259.0" resolved "https://registry.npmmirror.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" @@ -1237,6 +1810,20 @@ "@smithy/types" "^2.9.1" tslib "^2.5.0" +"@aws-sdk/xml-builder@^3.972.18": + version "3.972.18" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.972.18.tgz#2620fff23f5f20b25cf5d0ef4d4d1ffc12d741a5" + integrity sha512-BMDNVG1ETXRhl1tnisQiYBef3RShJ1kfZA7x7afivTFMLirfHNTb6U71K569HNXhSXbQZsweHvSDZ6euBw8hPA== + dependencies: + "@smithy/types" "^4.14.1" + fast-xml-parser "5.5.8" + tslib "^2.6.2" + +"@aws/lambda-invoke-store@^0.2.2": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz#802f6a50f6b6589063ef63ba8acdee86fcb9f395" + integrity sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ== + "@azure/abort-controller@^1.0.0", "@azure/abort-controller@^1.1.0": version "1.1.0" resolved "https://registry.npmmirror.com/@azure/abort-controller/-/abort-controller-1.1.0.tgz#788ee78457a55af8a1ad342acb182383d2119249" @@ -1409,7 +1996,7 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.8.3": version "7.23.5" resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== @@ -1425,198 +2012,13 @@ "@babel/highlight" "^7.24.7" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== - -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.19.6": - version "7.23.9" - resolved "https://registry.npmmirror.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" - integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.9" - "@babel/parser" "^7.23.9" - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": - version "7.23.6" - resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== - dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6": - version "7.23.9" - resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.9.tgz#fddfdf51fca28f23d16b9e3935a4732690acfad6" - integrity sha512-B2L9neXTIyPQoXDm+NtovPvG6VOLWnaXu3BIeVDWwdKFgG30oNa6CqVGiJPDWQwIAK49t9gnQI9c6K6RzabiKw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.5.0": - version "0.5.0" - resolved "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" - integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": - version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== - dependencies: - "@babel/types" "^7.23.0" - -"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.22.15": +"@babel/helper-module-imports@^7.16.7": version "7.22.15" resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" - -"@babel/helper-replace-supers@^7.22.20": - version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - "@babel/helper-string-parser@^7.23.4": version "7.23.4" resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" @@ -1632,29 +2034,6 @@ resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== -"@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" - -"@babel/helpers@^7.23.9": - version "7.23.9" - resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" - integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== - dependencies: - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" - "@babel/highlight@^7.0.0", "@babel/highlight@^7.23.4": version "7.23.4" resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" @@ -1674,876 +2053,155 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9": +"@babel/runtime-corejs3@^7.20.7", "@babel/runtime-corejs3@^7.22.15": version "7.23.9" - resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" - integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" - integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" - integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.23.3" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": - version "7.23.7" - resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" - integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" - integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-attributes@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" - integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== + resolved "https://registry.npmmirror.com/@babel/runtime-corejs3/-/runtime-corejs3-7.23.9.tgz#1b43062a13ecb60158aecdd81bc3fab4108b7cbc" + integrity sha512-oeOFTrYWdWXCvXGB5orvMTJ6gCZ9I6FBjR+M38iKNXCsPxr4xT0RTdg5uz1H7QP8pp74IzPtwritEr+JscqHXQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + core-js-pure "^3.30.2" + regenerator-runtime "^0.14.0" -"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== +"@babel/runtime-corejs3@^7.26.10", "@babel/runtime-corejs3@^7.27.1": + version "7.29.2" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.29.2.tgz#cb86ad06e7a1d39224afb12a874301085e071846" + integrity sha512-Lc94FOD5+0aXhdb0Tdg3RUtqT6yWbI/BbFWvlaSJ3gAb9Ks+99nHRDKADVqC37er4eCB0fHyWT+y+K3QOvJKbw== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + core-js-pure "^3.48.0" -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.6", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.8", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.23.9" + resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" + integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + regenerator-runtime "^0.14.0" -"@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.7.2": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" +"@babel/runtime@^7.18.9", "@babel/runtime@^7.20.13", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.26.0", "@babel/runtime@^7.28.4": + version "7.29.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.2.tgz#9a6e2d05f4b6692e1801cd4fb176ad823930ed5e" + integrity sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g== -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== +"@babel/types@^7.22.15": + version "7.23.9" + resolved "https://registry.npmmirror.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" + integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" +"@backstage-community/plugin-github-actions@^0.22.0": + version "0.22.0" + resolved "https://registry.yarnpkg.com/@backstage-community/plugin-github-actions/-/plugin-github-actions-0.22.0.tgz#4957c300ecc62f42b741c77ee2c8bf494669daf5" + integrity sha512-aJEzjt2Of+mhWO4XpQyYoX17ub9czkkI7RPrg/ckb1YhuMuUQKQ2rXvBP2uxQARP2Bnd4VlTGjEhzGj5qv3QZw== + dependencies: + "@backstage/catalog-model" "^1.7.7" + "@backstage/core-compat-api" "^0.5.9" + "@backstage/core-components" "^0.18.8" + "@backstage/core-plugin-api" "^1.12.4" + "@backstage/frontend-plugin-api" "^0.15.1" + "@backstage/integration" "^2.0.0" + "@backstage/integration-react" "^1.2.16" + "@backstage/plugin-catalog-react" "^2.1.0" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + "@material-ui/lab" "4.0.0-alpha.61" + "@octokit/rest" "^19.0.3" + "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" + git-url-parse "^14.0.0" + luxon "^3.0.0" + react-use "^17.2.4" -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== +"@backstage-community/plugin-tech-radar-common@^1.16.0": + version "1.16.0" + resolved "https://registry.yarnpkg.com/@backstage-community/plugin-tech-radar-common/-/plugin-tech-radar-common-1.16.0.tgz#f83d1f5f7dd8aea6954b4658c409eb8cabbb9450" + integrity sha512-qbV62yfjh7Wh9LOhsZDZZM/jNMkWYtijzW9HtmJrXbdf16BNFee6EHJmcbLEvurbp6YdHhkoKjnBHnLBjrtBbQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + zod "^3.20.0" -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" +"@backstage-community/plugin-tech-radar@^1.17.0": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@backstage-community/plugin-tech-radar/-/plugin-tech-radar-1.17.0.tgz#22c8709177ae2fc954fd1921b7d825a1a61a023e" + integrity sha512-dxrNWW1uZScTmy3QCkYAA1fy6r2HsHdIhxO0oLOgfFXniE2bh4Iac8BklI9aryvH8GW9xBMiDbMs22r9grGaoA== + dependencies: + "@backstage-community/plugin-tech-radar-common" "^1.16.0" + "@backstage/core-compat-api" "^0.5.9" + "@backstage/core-components" "^0.18.8" + "@backstage/core-plugin-api" "^1.12.4" + "@backstage/frontend-plugin-api" "^0.15.1" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" + color "^4.0.1" + d3-force "^3.0.0" + react-use "^17.2.4" -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== +"@backstage/app-defaults@^1.7.6", "@backstage/app-defaults@^1.7.7": + version "1.7.7" + resolved "https://registry.yarnpkg.com/@backstage/app-defaults/-/app-defaults-1.7.7.tgz#a25e441704252db60124e11492b328628235339d" + integrity sha512-mhEqwgrxi8/twkzSx5gVPbMxScYXfy7cB2hv3kCUj5eEaNxGXDOSFasNH9XdosO/c7GYRlY2X1zD9/PGAV52zA== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@backstage/core-app-api" "^1.20.0" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/plugin-permission-react" "^0.5.0" + "@backstage/theme" "^0.7.3" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== +"@backstage/backend-app-api@^1.2.7", "@backstage/backend-app-api@^1.3.0", "@backstage/backend-app-api@^1.6.0", "@backstage/backend-app-api@^1.6.1": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@backstage/backend-app-api/-/backend-app-api-1.6.1.tgz#c989e31aa1d9f39a6f591c5f5e7fa408cf8f07b8" + integrity sha512-elRawcs6RcIVL1qMbV+VaZj9NXXixjaeo1JyHqB4+8/IEao/yAJVrpW6hw5r+ZLEfTbWIErtjwEEJD0iOSQeUw== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== +"@backstage/backend-common@^0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@backstage/backend-common/-/backend-common-0.25.0.tgz#11ca616cde67fe27f757a7a95817eaa3b1e33b1c" + integrity sha512-TMQjoZLP80ek/NYBAcFvr8p5fioxuq6rC2Qd9FHXTifTzH9k31yJqmaTUmlJcw4+tz+3h4ss3qCwGGlgfNbGfQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.23.3", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" - integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-async-generator-functions@^7.23.9": - version "7.23.9" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" - integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" - integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== - dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" - -"@babel/plugin-transform-block-scoped-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" - integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-block-scoping@^7.23.4": - version "7.23.4" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" - integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" - integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-static-block@^7.23.4": - version "7.23.4" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" - integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.23.8": - version "7.23.8" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" - integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" - integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.15" - -"@babel/plugin-transform-destructuring@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" - integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dotall-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" - integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-duplicate-keys@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" - integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dynamic-import@^7.23.4": - version "7.23.4" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" - integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" - integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-export-namespace-from@^7.23.4": - version "7.23.4" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" - integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.23.6": - version "7.23.6" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" - integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" - integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== - dependencies: - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-json-strings@^7.23.4": - version "7.23.4" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" - integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" - integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-logical-assignment-operators@^7.23.4": - version "7.23.4" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" - integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" - integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-amd@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" - integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" - integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-systemjs@^7.23.9": - version "7.23.9" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" - integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/plugin-transform-modules-umd@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" - integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" - integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": - version "7.23.4" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" - integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.23.4": - version "7.23.4" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" - integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.23.4": - version "7.23.4" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" - integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== - dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.23.3" - -"@babel/plugin-transform-object-super@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" - integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - -"@babel/plugin-transform-optional-catch-binding@^7.23.4": - version "7.23.4" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" - integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": - version "7.23.4" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" - integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" - integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" - integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-property-in-object@^7.23.4": - version "7.23.4" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" - integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" - integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-constant-elements@^7.18.12": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.23.3.tgz#5efc001d07ef0f7da0d73c3a86c132f73d28e43c" - integrity sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-display-name@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz#70529f034dd1e561045ad3c8152a267f0d7b6200" - integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-jsx-development@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" - -"@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": - version "7.23.4" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" - integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/types" "^7.23.4" - -"@babel/plugin-transform-react-pure-annotations@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz#fabedbdb8ee40edf5da96f3ecfc6958e3783b93c" - integrity sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-regenerator@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" - integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-reserved-words@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" - integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-shorthand-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" - integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" - integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" - integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-template-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" - integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typeof-symbol@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" - integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typescript@^7.23.3": - version "7.23.6" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz#aa36a94e5da8d94339ae3a4e22d40ed287feb34c" - integrity sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.23.3" - -"@babel/plugin-transform-unicode-escapes@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" - integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-property-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" - integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" - integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-sets-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" - integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/preset-env@^7.19.4": - version "7.23.9" - resolved "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.23.9.tgz#beace3b7994560ed6bf78e4ae2073dff45387669" - integrity sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.23.3" - "@babel/plugin-syntax-import-attributes" "^7.23.3" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.9" - "@babel/plugin-transform-async-to-generator" "^7.23.3" - "@babel/plugin-transform-block-scoped-functions" "^7.23.3" - "@babel/plugin-transform-block-scoping" "^7.23.4" - "@babel/plugin-transform-class-properties" "^7.23.3" - "@babel/plugin-transform-class-static-block" "^7.23.4" - "@babel/plugin-transform-classes" "^7.23.8" - "@babel/plugin-transform-computed-properties" "^7.23.3" - "@babel/plugin-transform-destructuring" "^7.23.3" - "@babel/plugin-transform-dotall-regex" "^7.23.3" - "@babel/plugin-transform-duplicate-keys" "^7.23.3" - "@babel/plugin-transform-dynamic-import" "^7.23.4" - "@babel/plugin-transform-exponentiation-operator" "^7.23.3" - "@babel/plugin-transform-export-namespace-from" "^7.23.4" - "@babel/plugin-transform-for-of" "^7.23.6" - "@babel/plugin-transform-function-name" "^7.23.3" - "@babel/plugin-transform-json-strings" "^7.23.4" - "@babel/plugin-transform-literals" "^7.23.3" - "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" - "@babel/plugin-transform-member-expression-literals" "^7.23.3" - "@babel/plugin-transform-modules-amd" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.9" - "@babel/plugin-transform-modules-umd" "^7.23.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" - "@babel/plugin-transform-numeric-separator" "^7.23.4" - "@babel/plugin-transform-object-rest-spread" "^7.23.4" - "@babel/plugin-transform-object-super" "^7.23.3" - "@babel/plugin-transform-optional-catch-binding" "^7.23.4" - "@babel/plugin-transform-optional-chaining" "^7.23.4" - "@babel/plugin-transform-parameters" "^7.23.3" - "@babel/plugin-transform-private-methods" "^7.23.3" - "@babel/plugin-transform-private-property-in-object" "^7.23.4" - "@babel/plugin-transform-property-literals" "^7.23.3" - "@babel/plugin-transform-regenerator" "^7.23.3" - "@babel/plugin-transform-reserved-words" "^7.23.3" - "@babel/plugin-transform-shorthand-properties" "^7.23.3" - "@babel/plugin-transform-spread" "^7.23.3" - "@babel/plugin-transform-sticky-regex" "^7.23.3" - "@babel/plugin-transform-template-literals" "^7.23.3" - "@babel/plugin-transform-typeof-symbol" "^7.23.3" - "@babel/plugin-transform-unicode-escapes" "^7.23.3" - "@babel/plugin-transform-unicode-property-regex" "^7.23.3" - "@babel/plugin-transform-unicode-regex" "^7.23.3" - "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.8" - babel-plugin-polyfill-corejs3 "^0.9.0" - babel-plugin-polyfill-regenerator "^0.5.5" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@^7.18.6": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/preset-react/-/preset-react-7.23.3.tgz#f73ca07e7590f977db07eb54dbe46538cc015709" - integrity sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-react-display-name" "^7.23.3" - "@babel/plugin-transform-react-jsx" "^7.22.15" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.23.3" - -"@babel/preset-typescript@^7.18.6": - version "7.23.3" - resolved "https://registry.npmmirror.com/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz#14534b34ed5b6d435aa05f1ae1c5e7adcc01d913" - integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-typescript" "^7.23.3" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime-corejs3@^7.20.7", "@babel/runtime-corejs3@^7.22.15", "@babel/runtime-corejs3@^7.23.8": - version "7.23.9" - resolved "https://registry.npmmirror.com/@babel/runtime-corejs3/-/runtime-corejs3-7.23.9.tgz#1b43062a13ecb60158aecdd81bc3fab4108b7cbc" - integrity sha512-oeOFTrYWdWXCvXGB5orvMTJ6gCZ9I6FBjR+M38iKNXCsPxr4xT0RTdg5uz1H7QP8pp74IzPtwritEr+JscqHXQ== - dependencies: - core-js-pure "^3.30.2" - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.6", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.8", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.23.9" - resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" - integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.15", "@babel/template@^7.23.9", "@babel/template@^7.3.3": - version "7.23.9" - resolved "https://registry.npmmirror.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" - integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" - -"@babel/traverse@^7.23.9": - version "7.23.9" - resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" - integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.9" - resolved "https://registry.npmmirror.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" - integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@backstage-community/plugin-github-actions@^0.6.16": - version "0.6.19" - resolved "https://registry.yarnpkg.com/@backstage-community/plugin-github-actions/-/plugin-github-actions-0.6.19.tgz#a6bbe1ee306327006f78be2cb01cf21528c235b3" - integrity sha512-9LEaXbI3/Ri672vFOu8avQ7XeERp1Uh2SEU4tg9L44dYWITLokiQJZ26wLxFmlSgehilZth7Ff0mImv9q7Qftw== - dependencies: - "@backstage/catalog-model" "^1.5.0" - "@backstage/core-compat-api" "^0.2.7" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/frontend-plugin-api" "^0.6.7" - "@backstage/integration" "^1.13.0" - "@backstage/integration-react" "^1.1.29" - "@backstage/plugin-catalog-react" "^1.12.2" - "@material-ui/core" "^4.12.2" - "@material-ui/icons" "^4.9.1" - "@material-ui/lab" "4.0.0-alpha.61" - "@octokit/rest" "^19.0.3" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" - git-url-parse "^14.0.0" - luxon "^3.0.0" - react-use "^17.2.4" - -"@backstage-community/plugin-tech-radar@^0.7.4": - version "0.7.6" - resolved "https://registry.yarnpkg.com/@backstage-community/plugin-tech-radar/-/plugin-tech-radar-0.7.6.tgz#415f4ca26236fac055c55be370929795f7b02187" - integrity sha512-24RjWlMWao6SEiy3ldd+TcVchXuZXlQTKMuc9xujEj9t0fcw8wcyBDrOelhSOWc3jGYy1NYyeA3TTmDGBQ94FQ== - dependencies: - "@backstage/core-compat-api" "^0.2.7" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/frontend-plugin-api" "^0.6.7" - "@material-ui/core" "^4.12.2" - "@material-ui/icons" "^4.9.1" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" - color "^4.0.1" - d3-force "^3.0.0" - react-use "^17.2.4" - -"@backstage/app-defaults@^1.5.7", "@backstage/app-defaults@^1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@backstage/app-defaults/-/app-defaults-1.5.9.tgz#1d44ec1f2cb951227d4b6f5d53a867f02bf179c1" - integrity sha512-NLvJFcclXHJEpWuq0om7ndslQdRnGiKFbLj9KG6QX4jxVynMDln3RySL1wNkPJEfxWiRbZNbiLCbfWrZOXJZGw== - dependencies: - "@backstage/core-app-api" "^1.14.1" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/plugin-permission-react" "^0.4.24" - "@backstage/theme" "^0.5.6" - "@material-ui/core" "^4.12.2" - "@material-ui/icons" "^4.9.1" - -"@backstage/backend-app-api@^0.7.0": - version "0.7.9" - resolved "https://registry.yarnpkg.com/@backstage/backend-app-api/-/backend-app-api-0.7.9.tgz#33ea02fd7c10e8a0835b969bd8a3e2b47e7d8766" - integrity sha512-EFmvyJMbtvVFxvtpleDqiFS8si8yBQnhz4KaJ0GGhNSFb3C4yummcEbCGbx0xkK0ktxyIKKOSDP8T4acrvraZw== - dependencies: - "@backstage/backend-common" "^0.23.2" - "@backstage/backend-plugin-api" "^0.6.21" - "@backstage/backend-tasks" "^0.5.26" + "@aws-sdk/abort-controller" "^3.347.0" + "@aws-sdk/client-codecommit" "^3.350.0" + "@aws-sdk/client-s3" "^3.350.0" + "@aws-sdk/credential-providers" "^3.350.0" + "@aws-sdk/types" "^3.347.0" + "@backstage/backend-dev-utils" "^0.1.5" + "@backstage/backend-plugin-api" "^1.0.0" "@backstage/cli-common" "^0.1.14" - "@backstage/cli-node" "^0.2.6" "@backstage/config" "^1.2.0" - "@backstage/config-loader" "^1.8.1" + "@backstage/config-loader" "^1.9.1" "@backstage/errors" "^1.2.4" - "@backstage/plugin-auth-node" "^0.4.16" - "@backstage/plugin-permission-node" "^0.7.32" + "@backstage/integration" "^1.15.0" + "@backstage/integration-aws-node" "^0.1.12" + "@backstage/plugin-auth-node" "^0.5.2" "@backstage/types" "^1.1.1" + "@google-cloud/storage" "^7.0.0" + "@keyv/memcache" "^1.3.5" + "@keyv/redis" "^2.5.3" + "@kubernetes/client-node" "0.20.0" "@manypkg/get-packages" "^1.1.3" + "@octokit/rest" "^19.0.3" "@types/cors" "^2.8.6" + "@types/dockerode" "^3.3.0" "@types/express" "^4.17.6" + "@types/luxon" "^3.0.0" + "@types/webpack-env" "^1.15.2" + archiver "^7.0.0" + base64-stream "^1.0.0" compression "^1.7.4" - cookie "^0.6.0" + concat-stream "^2.0.0" cors "^2.8.5" + dockerode "^4.0.0" express "^4.17.1" express-promise-router "^4.1.0" fs-extra "^11.2.0" + git-url-parse "^14.0.0" helmet "^6.0.0" + isomorphic-git "^1.23.0" jose "^5.0.0" + keyv "^4.5.2" knex "^3.0.0" lodash "^4.17.21" logform "^2.3.2" @@ -2551,422 +2209,793 @@ minimatch "^9.0.0" minimist "^1.2.5" morgan "^1.10.0" - node-fetch "^2.6.7" + mysql2 "^3.0.0" + node-fetch "^2.7.0" node-forge "^1.3.1" - path-to-regexp "^6.2.1" + p-limit "^3.1.0" + path-to-regexp "^8.0.0" + pg "^8.11.3" + pg-format "^1.0.4" + raw-body "^2.4.1" selfsigned "^2.0.0" stoppable "^1.1.0" + tar "^6.1.12" triple-beam "^1.4.1" uuid "^9.0.0" winston "^3.2.1" winston-transport "^4.5.0" + yauzl "^3.0.0" + yn "^4.0.0" -"@backstage/backend-app-api@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@backstage/backend-app-api/-/backend-app-api-0.8.0.tgz#f90b101afb64daedb7e253ec1557eb42c7e00dd7" - integrity sha512-cxX8swAibofTPajFBsOmCo5Q7XowlOWiUA0zQR45fk+egXFzwpfW0Zj1UYhe2h410G5sLKEMtAvUHvyzczO7iw== +"@backstage/backend-defaults@^0.12.1": + version "0.12.3" + resolved "https://registry.yarnpkg.com/@backstage/backend-defaults/-/backend-defaults-0.12.3.tgz#e5a364a8fbba56ebe5da2b0a34d1fdb66552e6f1" + integrity sha512-fRdacIC8IDSeoySjNc+P9GM3mPmwtW+yQbuNgzak7ltWmG+12F/rgy9Q8fXhWgGwHnjHYlZpfkSfg+jUed0yIQ== dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/backend-tasks" "^0.5.27" - "@backstage/cli-common" "^0.1.14" - "@backstage/cli-node" "^0.2.7" - "@backstage/config" "^1.2.0" - "@backstage/config-loader" "^1.8.1" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-auth-node" "^0.4.17" - "@backstage/plugin-permission-node" "^0.8.0" - "@backstage/types" "^1.1.1" + "@aws-sdk/abort-controller" "^3.347.0" + "@aws-sdk/client-codecommit" "^3.350.0" + "@aws-sdk/client-s3" "^3.350.0" + "@aws-sdk/credential-providers" "^3.350.0" + "@aws-sdk/types" "^3.347.0" + "@azure/storage-blob" "^12.5.0" + "@backstage/backend-app-api" "^1.2.7" + "@backstage/backend-dev-utils" "^0.1.5" + "@backstage/backend-plugin-api" "^1.4.3" + "@backstage/cli-node" "^0.2.14" + "@backstage/config" "^1.3.4" + "@backstage/config-loader" "^1.10.4" + "@backstage/errors" "^1.2.7" + "@backstage/integration" "^1.18.0" + "@backstage/integration-aws-node" "^0.1.17" + "@backstage/plugin-auth-node" "^0.6.7" + "@backstage/plugin-events-node" "^0.4.15" + "@backstage/plugin-permission-node" "^0.10.4" + "@backstage/types" "^1.2.2" + "@google-cloud/storage" "^7.0.0" + "@keyv/memcache" "^2.0.1" + "@keyv/redis" "^4.0.1" + "@keyv/valkey" "^1.0.1" "@manypkg/get-packages" "^1.1.3" + "@octokit/rest" "^19.0.3" + "@opentelemetry/api" "^1.9.0" "@types/cors" "^2.8.6" "@types/express" "^4.17.6" + archiver "^7.0.0" + base64-stream "^1.0.0" + better-sqlite3 "^12.0.0" compression "^1.7.4" - cookie "^0.6.0" + concat-stream "^2.0.0" + cookie "^0.7.0" cors "^2.8.5" + cron "^3.0.0" express "^4.17.1" express-promise-router "^4.1.0" + express-rate-limit "^7.5.0" fs-extra "^11.2.0" + git-url-parse "^15.0.0" helmet "^6.0.0" + infinispan "^0.12.0" + is-glob "^4.0.3" jose "^5.0.0" + keyv "^5.2.1" knex "^3.0.0" lodash "^4.17.21" logform "^2.3.2" luxon "^3.0.0" minimatch "^9.0.0" - minimist "^1.2.5" - morgan "^1.10.0" - node-fetch "^2.6.7" + mysql2 "^3.0.0" + node-fetch "^2.7.0" node-forge "^1.3.1" - path-to-regexp "^6.2.1" + p-limit "^3.1.0" + path-to-regexp "^8.0.0" + pg "^8.11.3" + pg-connection-string "^2.3.0" + pg-format "^1.0.4" + rate-limit-redis "^4.2.0" + raw-body "^2.4.1" selfsigned "^2.0.0" - stoppable "^1.1.0" + tar "^7.4.3" triple-beam "^1.4.1" - uuid "^9.0.0" + uuid "^11.0.0" winston "^3.2.1" winston-transport "^4.5.0" + yauzl "^3.0.0" + yn "^4.0.0" + zod "^3.22.4" + zod-to-json-schema "^3.20.4" -"@backstage/backend-common@^0.21.7": - version "0.21.7" - resolved "https://registry.npmmirror.com/@backstage/backend-common/-/backend-common-0.21.7.tgz#5ae796d8adccebc484edeeb2326464c28e14849e" - integrity sha512-wWpnjLYxEstFnAherkfwZIlAazdu1dfJ/5KjK1aSeMZYGyRWcelegs+Dz9MLZ53e/5qtSJ5+caltNfiItda86w== +"@backstage/backend-defaults@^0.13.1": + version "0.13.3" + resolved "https://registry.yarnpkg.com/@backstage/backend-defaults/-/backend-defaults-0.13.3.tgz#0af6147399fcaa0def365a7f2a419d033f031044" + integrity sha512-AhUSLWrsrG9O+1r2+zgfYrkRQMYq4qaoxRwxlfM4vNXnsKMXDB5ci00/FZgJ9S9jQjA9UZu2RMsy2hmyLX6/ng== dependencies: "@aws-sdk/abort-controller" "^3.347.0" "@aws-sdk/client-codecommit" "^3.350.0" "@aws-sdk/client-s3" "^3.350.0" "@aws-sdk/credential-providers" "^3.350.0" "@aws-sdk/types" "^3.347.0" - "@backstage/backend-app-api" "^0.7.0" - "@backstage/backend-dev-utils" "^0.1.4" - "@backstage/backend-plugin-api" "^0.6.17" - "@backstage/cli-common" "^0.1.13" - "@backstage/config" "^1.2.0" - "@backstage/config-loader" "^1.8.0" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.10.0" - "@backstage/integration-aws-node" "^0.1.12" - "@backstage/plugin-auth-node" "^0.4.12" - "@backstage/types" "^1.1.1" + "@azure/storage-blob" "^12.5.0" + "@backstage/backend-app-api" "^1.3.0" + "@backstage/backend-dev-utils" "^0.1.5" + "@backstage/backend-plugin-api" "^1.5.0" + "@backstage/cli-node" "^0.2.15" + "@backstage/config" "^1.3.6" + "@backstage/config-loader" "^1.10.6" + "@backstage/errors" "^1.2.7" + "@backstage/integration" "^1.18.2" + "@backstage/integration-aws-node" "^0.1.19" + "@backstage/plugin-auth-node" "^0.6.9" + "@backstage/plugin-events-node" "^0.4.17" + "@backstage/plugin-permission-node" "^0.10.6" + "@backstage/types" "^1.2.2" "@google-cloud/storage" "^7.0.0" - "@keyv/memcache" "^1.3.5" - "@keyv/redis" "^2.5.3" - "@kubernetes/client-node" "0.20.0" + "@keyv/memcache" "^2.0.1" + "@keyv/redis" "^4.0.1" + "@keyv/valkey" "^1.0.1" "@manypkg/get-packages" "^1.1.3" "@octokit/rest" "^19.0.3" + "@opentelemetry/api" "^1.9.0" "@types/cors" "^2.8.6" - "@types/dockerode" "^3.3.0" "@types/express" "^4.17.6" - "@types/luxon" "^3.0.0" - "@types/webpack-env" "^1.15.2" - archiver "^6.0.0" + archiver "^7.0.0" base64-stream "^1.0.0" + better-sqlite3 "^12.0.0" compression "^1.7.4" concat-stream "^2.0.0" + cookie "^0.7.0" cors "^2.8.5" - dockerode "^4.0.0" + cron "^3.0.0" express "^4.17.1" express-promise-router "^4.1.0" + express-rate-limit "^7.5.0" fs-extra "^11.2.0" - git-url-parse "^14.0.0" + git-url-parse "^15.0.0" helmet "^6.0.0" - isomorphic-git "^1.23.0" + infinispan "^0.12.0" + is-glob "^4.0.3" jose "^5.0.0" - keyv "^4.5.2" + keyv "^5.2.1" knex "^3.0.0" lodash "^4.17.21" logform "^2.3.2" luxon "^3.0.0" minimatch "^9.0.0" mysql2 "^3.0.0" - node-fetch "^2.6.7" + node-fetch "^2.7.0" + node-forge "^1.3.1" p-limit "^3.1.0" + path-to-regexp "^8.0.0" pg "^8.11.3" + pg-connection-string "^2.3.0" + pg-format "^1.0.4" + rate-limit-redis "^4.2.0" raw-body "^2.4.1" - tar "^6.1.12" - uuid "^9.0.0" + selfsigned "^2.0.0" + tar "^7.4.3" + triple-beam "^1.4.1" + uuid "^11.0.0" winston "^3.2.1" winston-transport "^4.5.0" yauzl "^3.0.0" yn "^4.0.0" + zod "^3.22.4" + zod-to-json-schema "^3.20.4" -"@backstage/backend-common@^0.23.2", "@backstage/backend-common@^0.23.3": - version "0.23.3" - resolved "https://registry.yarnpkg.com/@backstage/backend-common/-/backend-common-0.23.3.tgz#bba71a3f932a88481ab8e09f4406fc551fb47aec" - integrity sha512-/OZRnxlNokdMfoQEfDRrjIuojPi6UL80smHuNpcvP/93fXkrYiMwISulDQPxCfm1Rm9JW8mnRORGFihKIALNpQ== +"@backstage/backend-defaults@^0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@backstage/backend-defaults/-/backend-defaults-0.16.0.tgz#2d7638287bc46eb6757c217d546f0d2967f12732" + integrity sha512-h9/Z63mFdCWEvlG77yhWfHZiTs0SGsoo/GBdhtrW+w+lp6EMfNoc7ujiPcSjEqUKw/fty8jRHth4wx+21fYRKg== dependencies: "@aws-sdk/abort-controller" "^3.347.0" "@aws-sdk/client-codecommit" "^3.350.0" "@aws-sdk/client-s3" "^3.350.0" "@aws-sdk/credential-providers" "^3.350.0" "@aws-sdk/types" "^3.347.0" - "@backstage/backend-dev-utils" "^0.1.4" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/cli-common" "^0.1.14" - "@backstage/config" "^1.2.0" - "@backstage/config-loader" "^1.8.1" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.13.0" - "@backstage/integration-aws-node" "^0.1.12" - "@backstage/plugin-auth-node" "^0.4.17" - "@backstage/types" "^1.1.1" + "@azure/identity" "^4.0.0" + "@azure/storage-blob" "^12.5.0" + "@backstage/backend-app-api" "^1.6.0" + "@backstage/backend-dev-utils" "^0.1.7" + "@backstage/backend-plugin-api" "^1.8.0" + "@backstage/cli-node" "^0.3.0" + "@backstage/config" "^1.3.6" + "@backstage/config-loader" "^1.10.9" + "@backstage/errors" "^1.2.7" + "@backstage/integration" "^2.0.0" + "@backstage/integration-aws-node" "^0.1.20" + "@backstage/plugin-auth-node" "^0.6.14" + "@backstage/plugin-events-node" "^0.4.20" + "@backstage/plugin-permission-common" "^0.9.7" + "@backstage/plugin-permission-node" "^0.10.11" + "@backstage/types" "^1.2.2" "@google-cloud/storage" "^7.0.0" - "@keyv/memcache" "^1.3.5" - "@keyv/redis" "^2.5.3" - "@kubernetes/client-node" "0.20.0" + "@keyv/memcache" "^2.0.1" + "@keyv/redis" "^4.0.1" + "@keyv/valkey" "^1.0.1" "@manypkg/get-packages" "^1.1.3" "@octokit/rest" "^19.0.3" + "@opentelemetry/api" "^1.9.0" "@types/cors" "^2.8.6" - "@types/dockerode" "^3.3.0" "@types/express" "^4.17.6" - "@types/luxon" "^3.0.0" - "@types/webpack-env" "^1.15.2" - archiver "^6.0.0" + archiver "^7.0.0" base64-stream "^1.0.0" compression "^1.7.4" concat-stream "^2.0.0" + cookie "^0.7.0" cors "^2.8.5" - dockerode "^4.0.0" - express "^4.17.1" + cron "^3.0.0" + express "^4.22.0" express-promise-router "^4.1.0" + express-rate-limit "^8.2.2" fs-extra "^11.2.0" - git-url-parse "^14.0.0" + git-url-parse "^15.0.0" helmet "^6.0.0" - isomorphic-git "^1.23.0" + infinispan "^0.12.0" + is-glob "^4.0.3" jose "^5.0.0" - keyv "^4.5.2" + keyv "^5.2.1" knex "^3.0.0" lodash "^4.17.21" logform "^2.3.2" luxon "^3.0.0" - minimatch "^9.0.0" - minimist "^1.2.5" - morgan "^1.10.0" + minimatch "^10.2.1" mysql2 "^3.0.0" - node-fetch "^2.6.7" - node-forge "^1.3.1" + node-fetch "^2.7.0" + node-forge "^1.3.2" p-limit "^3.1.0" - path-to-regexp "^6.2.1" + path-to-regexp "^8.0.0" pg "^8.11.3" + pg-connection-string "^2.3.0" + pg-format "^1.0.4" + rate-limit-redis "^4.2.0" raw-body "^2.4.1" selfsigned "^2.0.0" - stoppable "^1.1.0" - tar "^6.1.12" + tar "^7.5.6" triple-beam "^1.4.1" - uuid "^9.0.0" + uuid "^11.0.0" winston "^3.2.1" winston-transport "^4.5.0" - yauzl "^3.0.0" + yauzl "^3.2.1" yn "^4.0.0" + zod "^3.25.76 || ^4.0.0" + zod-to-json-schema "^3.25.1" -"@backstage/backend-defaults@^0.4.0": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@backstage/backend-defaults/-/backend-defaults-0.4.1.tgz#072f5bbd2bb8a8c4998f6baba7e1134d7171a8dc" - integrity sha512-dLuFjJCPsWDJQzdauNQMdPjinV2YB+k6Jx2JSx04l3SCspjdmBRnZf/jwIrPcQyzgQrCQhupHeprYq7wJSXgbA== +"@backstage/backend-defaults@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@backstage/backend-defaults/-/backend-defaults-0.17.0.tgz#229689d2305cb7816b1a331ff75ae3786710552c" + integrity sha512-EMSCZpYJEy37DOrpNPFi8u8IF4H6tBTDE+0R3/GSyT/+43FnCnrtu/OXNQfxBpg08zRF6cXR7VeTSJPNB2IENg== dependencies: "@aws-sdk/abort-controller" "^3.347.0" "@aws-sdk/client-codecommit" "^3.350.0" "@aws-sdk/client-s3" "^3.350.0" "@aws-sdk/credential-providers" "^3.350.0" + "@aws-sdk/rds-signer" "^3.0.0" "@aws-sdk/types" "^3.347.0" - "@backstage/backend-app-api" "^0.8.0" - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-dev-utils" "^0.1.4" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/cli-common" "^0.1.14" - "@backstage/config" "^1.2.0" - "@backstage/config-loader" "^1.8.1" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.13.0" - "@backstage/integration-aws-node" "^0.1.12" - "@backstage/plugin-auth-node" "^0.4.17" - "@backstage/plugin-events-node" "^0.3.8" - "@backstage/plugin-permission-node" "^0.8.0" - "@backstage/types" "^1.1.1" + "@azure/identity" "^4.0.0" + "@azure/storage-blob" "^12.5.0" + "@backstage/backend-app-api" "^1.6.1" + "@backstage/backend-dev-utils" "^0.1.7" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/cli-node" "^0.3.1" + "@backstage/config" "^1.3.7" + "@backstage/config-loader" "^1.10.10" + "@backstage/errors" "^1.3.0" + "@backstage/integration" "^2.0.1" + "@backstage/integration-aws-node" "^0.1.21" + "@backstage/plugin-auth-node" "^0.7.0" + "@backstage/plugin-events-node" "^0.4.21" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-permission-node" "^0.10.12" + "@backstage/types" "^1.2.2" "@google-cloud/storage" "^7.0.0" - "@keyv/memcache" "^1.3.5" - "@keyv/redis" "^2.5.3" + "@keyv/memcache" "^2.0.1" + "@keyv/redis" "^4.0.1" + "@keyv/valkey" "^1.0.1" "@manypkg/get-packages" "^1.1.3" "@octokit/rest" "^19.0.3" - "@opentelemetry/api" "^1.3.0" + "@opentelemetry/api" "^1.9.0" "@types/cors" "^2.8.6" "@types/express" "^4.17.6" - archiver "^6.0.0" + archiver "^7.0.0" base64-stream "^1.0.0" - better-sqlite3 "^11.0.0" compression "^1.7.4" concat-stream "^2.0.0" - cookie "^0.6.0" + cookie "^0.7.0" cors "^2.8.5" cron "^3.0.0" - express "^4.17.1" + express "^4.22.0" express-promise-router "^4.1.0" + express-rate-limit "^8.2.2" fs-extra "^11.2.0" - git-url-parse "^14.0.0" + git-url-parse "^15.0.0" helmet "^6.0.0" - isomorphic-git "^1.23.0" + infinispan "^0.12.0" + is-glob "^4.0.3" jose "^5.0.0" - keyv "^4.5.2" + keyv "^5.2.1" knex "^3.0.0" lodash "^4.17.21" logform "^2.3.2" luxon "^3.0.0" - minimatch "^9.0.0" - minimist "^1.2.5" - morgan "^1.10.0" + minimatch "^10.2.1" mysql2 "^3.0.0" - node-fetch "^2.6.7" - node-forge "^1.3.1" + node-fetch "^2.7.0" + node-forge "^1.3.2" p-limit "^3.1.0" - path-to-regexp "^6.2.1" + path-to-regexp "^8.0.0" pg "^8.11.3" pg-connection-string "^2.3.0" + pg-format "^1.0.4" + rate-limit-redis "^4.2.0" raw-body "^2.4.1" selfsigned "^2.0.0" - stoppable "^1.1.0" - tar "^6.1.12" + tar "^7.5.6" triple-beam "^1.4.1" - uuid "^9.0.0" + uuid "^11.0.0" winston "^3.2.1" winston-transport "^4.5.0" - yauzl "^3.0.0" + yauzl "^3.2.1" + yn "^4.0.0" + zod "^3.25.76 || ^4.0.0" + zod-to-json-schema "^3.25.1" + +"@backstage/backend-dev-utils@^0.1.5", "@backstage/backend-dev-utils@^0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@backstage/backend-dev-utils/-/backend-dev-utils-0.1.7.tgz#8fd5737936128c4e663e6ad23fe5f158021290ae" + integrity sha512-05lbgXZGofBHcs/Yz2TTI3Brn98BcUU8ZFVx/sCz1EXG8/eFoZSEjr7F2cA1x2UKTIYIt7HGZEYxF1+1lqxNDQ== + +"@backstage/backend-openapi-utils@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@backstage/backend-openapi-utils/-/backend-openapi-utils-0.6.8.tgz#7c929d287f367d0c73d9d10b68be9d01e1942f8f" + integrity sha512-nfg9XkrgnzCIHHWeylTMGJypumxFeljFK/yLs1t7daqnGZH8SMCT2skMW9YrDQ5n7zZm1b4KR+WdJgUtq1znPw== + dependencies: + "@apidevtools/swagger-parser" "^10.1.0" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/errors" "^1.3.0" + "@backstage/types" "^1.2.2" + "@types/express" "^4.17.6" + "@types/express-serve-static-core" "^4.17.5" + ajv "^8.16.0" + express "^4.22.0" + express-openapi-validator "^5.5.8" + express-promise-router "^4.1.0" + get-port "^5.1.1" + json-schema-to-ts "^3.0.0" + lodash "^4.17.21" + mockttp "^3.13.0" + openapi-merge "^1.3.2" + openapi3-ts "^3.1.2" + +"@backstage/backend-plugin-api@^1.0.0", "@backstage/backend-plugin-api@^1.1.1", "@backstage/backend-plugin-api@^1.4.0", "@backstage/backend-plugin-api@^1.4.3", "@backstage/backend-plugin-api@^1.4.4", "@backstage/backend-plugin-api@^1.5.0", "@backstage/backend-plugin-api@^1.6.0", "@backstage/backend-plugin-api@^1.7.0", "@backstage/backend-plugin-api@^1.8.0", "@backstage/backend-plugin-api@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@backstage/backend-plugin-api/-/backend-plugin-api-1.9.0.tgz#0376e100cab371e3a5bea2feb4123a83f34d3a9e" + integrity sha512-rdkfvodsoyuRylr/xOQSI0fOzUqZbm/hw7A3W8R3js6bb/8BoRpzIhbcj2jgOLNRI7PooHv1+laZSk7sMffgCw== + dependencies: + "@backstage/cli-common" "^0.2.1" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/plugin-auth-node" "^0.7.0" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-permission-node" "^0.10.12" + "@backstage/types" "^1.2.2" + "@types/express" "^4.17.6" + "@types/json-schema" "^7.0.6" + "@types/luxon" "^3.0.0" + json-schema "^0.4.0" + knex "^3.0.0" + luxon "^3.0.0" + zod "^3.25.76 || ^4.0.0" + +"@backstage/backend-test-utils@^1.11.1": + version "1.11.2" + resolved "https://registry.yarnpkg.com/@backstage/backend-test-utils/-/backend-test-utils-1.11.2.tgz#581f1c152e4e290e807d932ce21ea5e81892fbcd" + integrity sha512-TUMcYrgnyapBa9UBOE+h0kth0wlxr579Oi5824cMPvnTqmP16hdHOrw/bxC662LnG5PfL6ZZk3tE6QVaarTxIQ== + dependencies: + "@backstage/backend-app-api" "^1.6.1" + "@backstage/backend-defaults" "^0.17.0" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/plugin-auth-node" "^0.7.0" + "@backstage/plugin-events-node" "^0.4.21" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/types" "^1.2.2" + "@keyv/memcache" "^2.0.1" + "@keyv/redis" "^4.0.1" + "@keyv/valkey" "^1.0.1" + "@types/express" "^4.17.6" + "@types/express-serve-static-core" "^4.17.5" + "@types/keyv" "^4.2.0" + "@types/qs" "^6.9.6" + better-sqlite3 "^12.0.0" + cookie "^0.7.0" + express "^4.22.0" + fs-extra "^11.0.0" + keyv "^5.2.1" + knex "^3.0.0" + lodash "^4.17.21" + mysql2 "^3.0.0" + pg "^8.11.3" + pg-connection-string "^2.3.0" + testcontainers "^11.9.0" + text-extensions "^2.4.0" + uuid "^11.0.0" + yn "^4.0.0" + zod "^3.25.76 || ^4.0.0" + zod-to-json-schema "^3.25.1" + +"@backstage/catalog-client@^1.12.1", "@backstage/catalog-client@^1.14.0", "@backstage/catalog-client@^1.15.0", "@backstage/catalog-client@^1.9.1": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@backstage/catalog-client/-/catalog-client-1.15.0.tgz#1ac861891e9c79ac9498911e45bb4db1cc47b929" + integrity sha512-esQTkAyi1110zFkS5pxWWGLU43YuaGjgCv4uhmLmEhhQM5u7MIjdA6UGJBVS1k4WdE2zmPEq842iVf8SKm9y1A== + dependencies: + "@backstage/catalog-model" "^1.8.0" + "@backstage/errors" "^1.3.0" + "@backstage/filter-predicates" "^0.1.2" + cross-fetch "^4.0.0" + lodash "^4.17.21" + uri-template "^2.0.0" + +"@backstage/catalog-model@^1.7.3", "@backstage/catalog-model@^1.7.5", "@backstage/catalog-model@^1.7.6", "@backstage/catalog-model@^1.7.7", "@backstage/catalog-model@^1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@backstage/catalog-model/-/catalog-model-1.8.0.tgz#6b6207c3d362ac2356aca3c6697b0270f519ecb9" + integrity sha512-Fn2n07ryTelxwe3OcWqAm8EM2hHlb1FxR818nlhsxemad4L2qrWFnaHfH+5xVAKHviaa7Vr66id8u2cWsQzaAA== + dependencies: + "@backstage/errors" "^1.3.0" + "@backstage/types" "^1.2.2" + ajv "^8.10.0" + ajv-errors "^3.0.0" + lodash "^4.17.21" + zod "^3.25.76" + +"@backstage/cli-common@^0.1.14": + version "0.1.14" + resolved "https://registry.yarnpkg.com/@backstage/cli-common/-/cli-common-0.1.14.tgz#2291520acfbac860a05dd48fc3b876d5cd789b76" + integrity sha512-4kGWGrFuxoaCne2aHCOVW+vi8y2MLEMEj785SEApMG2J8jXJXUuIOzWw0MrN0pM1FqBXDb6aeQd+bmQMK/Ci+w== + +"@backstage/cli-common@^0.1.18": + version "0.1.18" + resolved "https://registry.yarnpkg.com/@backstage/cli-common/-/cli-common-0.1.18.tgz#1aacaa648dc0ac6a5238cec52c6712e8582f3ad3" + integrity sha512-6Ks0tnqJpZPppwq4F6Ft3AvmUUe7NAqzKtXMKSmePjBtGgoqVn/dB8HJSZcW4UMooiGGDjGEz2bpWQ/qH3bWQw== + dependencies: + "@backstage/errors" "^1.2.7" + cross-spawn "^7.0.3" + global-agent "^3.0.0" + undici "^7.2.3" + +"@backstage/cli-common@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@backstage/cli-common/-/cli-common-0.2.1.tgz#5480d0da87848eae0f9629703822397b6d9237ec" + integrity sha512-KPA63gz7FArlogWIKeJaq8sdm6LQXKIk0YIY90FPYKtxOX508LjiGkHaKYyVuKASIaSXMK0HNJ2U1xUqYkcXlQ== + dependencies: + "@backstage/errors" "^1.3.0" + cross-spawn "^7.0.3" + global-agent "^3.0.0" + undici "^7.24.5" + +"@backstage/cli-defaults@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@backstage/cli-defaults/-/cli-defaults-0.1.1.tgz#bac2c80830d23127a61877aedf764fc284534ce9" + integrity sha512-6ehdl1UthXsotp2VQA6KlCfweBdVNXuX73JLsC6wSOiG2E36tnnoGg2jHnrJrNju5+3oYvi/+qnEuvAvEO+B6A== + dependencies: + "@backstage/cli-module-actions" "^0.1.0" + "@backstage/cli-module-auth" "^0.1.1" + "@backstage/cli-module-build" "^0.1.1" + "@backstage/cli-module-config" "^0.1.1" + "@backstage/cli-module-github" "^0.1.1" + "@backstage/cli-module-info" "^0.1.1" + "@backstage/cli-module-lint" "^0.1.1" + "@backstage/cli-module-maintenance" "^0.1.1" + "@backstage/cli-module-migrate" "^0.1.1" + "@backstage/cli-module-new" "^0.1.2" + "@backstage/cli-module-test-jest" "^0.1.1" + "@backstage/cli-module-translations" "^0.1.1" + +"@backstage/cli-module-actions@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@backstage/cli-module-actions/-/cli-module-actions-0.1.0.tgz#1e096b8297e8e9227541c18d52484cab61ab2178" + integrity sha512-GcDxgYVnm5TCId7lu+op+En6QiLeeF4e7PIPx3+jo5RbPAOMT+c15oecNZ2hYAU67Ye8mLqlmrRPi5gfbYkdHA== + dependencies: + "@backstage/cli-node" "^0.3.1" + "@backstage/errors" "^1.3.0" + chalk "^4.0.0" + cleye "^2.3.0" + marked "^15.0.12" + marked-terminal "^7.3.0" + strip-ansi "^7.1.0" + zod "^3.25.76 || ^4.0.0" + +"@backstage/cli-module-auth@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@backstage/cli-module-auth/-/cli-module-auth-0.1.1.tgz#5ffd1288fd32f3c13e1213351a0dcf91e2866024" + integrity sha512-4qeZeo/j8k3RkUOgNkEEja0H7HEH23nmSm8NF6mP/mySlGNVmtN0RfP1htPRFscJvNF6wnvFBWr7wKVS1pJ7XA== + dependencies: + "@backstage/cli-node" "^0.3.1" + "@backstage/errors" "^1.3.0" + cleye "^2.3.0" + fs-extra "^11.2.0" + glob "^13.0.0" + inquirer "^8.2.0" + proper-lockfile "^4.1.2" + yaml "^2.0.0" + zod "^3.25.76" + optionalDependencies: + keytar "^7.9.0" + +"@backstage/cli-module-build@^0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@backstage/cli-module-build/-/cli-module-build-0.1.2.tgz#303295a1222dccdf2e604e2a8462aec6ab805a09" + integrity sha512-NEthcYRe7es2eds6U9ZzUVS4GbHaEVY0sBJN0CF5+1Ps7J99OTboWelVVCxlhy0+lKklowRAlLiQLWWtjb/5Jg== + dependencies: + "@backstage/cli-common" "^0.2.1" + "@backstage/cli-node" "^0.3.1" + "@backstage/config" "^1.3.7" + "@backstage/config-loader" "^1.10.10" + "@backstage/errors" "^1.3.0" + "@backstage/module-federation-common" "^0.1.3" + "@manypkg/get-packages" "^1.1.3" + "@module-federation/enhanced" "^0.21.6" + "@pmmmwh/react-refresh-webpack-plugin" "^0.6.0" + "@rollup/plugin-commonjs" "^26.0.0" + "@rollup/plugin-json" "^6.0.0" + "@rollup/plugin-node-resolve" "^15.0.0" + "@rollup/plugin-yaml" "^4.0.0" + "@rspack/core" "^1.4.11" + "@rspack/dev-server" "^1.1.4" + "@rspack/plugin-react-refresh" "^1.4.3" + "@swc/core" "^1.15.6" + bfj "^9.0.2" + buffer "^6.0.3" + chalk "^4.0.0" + chokidar "^3.3.1" + cleye "^2.3.0" + cross-spawn "^7.0.3" + css-loader "^6.5.1" + ctrlc-windows "^2.1.0" + esbuild-loader "^4.0.0" + eslint-rspack-plugin "^4.2.1" + eslint-webpack-plugin "^4.2.0" + fork-ts-checker-webpack-plugin "^9.0.0" + fs-extra "^11.2.0" + glob "^13.0.0" + html-webpack-plugin "^5.6.3" + lodash "^4.17.21" + mini-css-extract-plugin "^2.4.2" + node-stdlib-browser "^1.3.1" + npm-packlist "^5.0.0" + p-queue "^6.6.2" + portfinder "^1.0.32" + postcss "^8.1.0" + postcss-import "^16.1.0" + process "^0.11.10" + raw-loader "^4.0.2" + react-dev-utils "^12.0.0-next.60" + react-refresh "^0.18.0" + rollup "^4.59.0" + rollup-plugin-dts "^6.1.0" + rollup-plugin-esbuild "^6.1.1" + rollup-plugin-postcss "^4.0.0" + rollup-pluginutils "^2.8.2" + shell-quote "^1.8.1" + style-loader "^3.3.1" + swc-loader "^0.2.3" + tar "^7.5.6" + ts-checker-rspack-plugin "^1.1.5" + ts-morph "^24.0.0" + util "^0.12.3" + webpack "~5.105.0" + webpack-dev-server "^5.0.0" + yml-loader "^2.1.0" yn "^4.0.0" - zod "^3.22.4" -"@backstage/backend-dev-utils@^0.1.4": - version "0.1.4" - resolved "https://registry.npmmirror.com/@backstage/backend-dev-utils/-/backend-dev-utils-0.1.4.tgz#65d204939c49b5df6a2148e8ad4dc718ccd1df07" - integrity sha512-5YgAPz4CRtnqdaUlYCHwGmXvpkGQ1jaUMoDtiQ81WDxQrf+0iYZCwS4ftVyQmB0Ga6BaGOUf6GG/OuFA56Y5mA== +"@backstage/cli-module-config@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@backstage/cli-module-config/-/cli-module-config-0.1.1.tgz#8a46a0052af8d7396bbc803564da1b87e54372ed" + integrity sha512-RAvKNJWEU9eAx/aIWhRqQn78Qlsy8LddkNHYCgwfwwuUp1NgRALKLXbi7AopMyJGDhaFUJhhmfAvYZSSBZcJkg== + dependencies: + "@backstage/cli-common" "^0.2.1" + "@backstage/cli-node" "^0.3.1" + "@backstage/config" "^1.3.7" + "@backstage/config-loader" "^1.10.10" + "@backstage/types" "^1.2.2" + "@manypkg/get-packages" "^1.1.3" + chalk "^4.0.0" + cleye "^2.3.0" + json-schema "^0.4.0" + react-dev-utils "^12.0.0-next.60" + yaml "^2.0.0" -"@backstage/backend-openapi-utils@^0.1.15": - version "0.1.15" - resolved "https://registry.yarnpkg.com/@backstage/backend-openapi-utils/-/backend-openapi-utils-0.1.15.tgz#d96fa4b24011c3d1aae5c80ee77b3d49ef95728d" - integrity sha512-cZ1ptQsogkok0KE3rrUA7wYtoF8rBqG3NHRjVf6WY4fwxlPD0T1Cbrdca+oebJQKPGJc817bIh5UvD1O/KvLgA== +"@backstage/cli-module-github@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@backstage/cli-module-github/-/cli-module-github-0.1.1.tgz#6ab8c8cda1344fd68efc6323409a8102875226bc" + integrity sha512-gLr6UM9gQp0BFHMPBetEi6Swb04ATs6TUhHjnR0dHMsouZYJhcTWKVwGcXuzcVtAJ17kHYnIXGARiBG9+YHbAw== dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/errors" "^1.2.4" - "@types/express" "^4.17.6" - "@types/express-serve-static-core" "^4.17.5" - express "^4.17.1" - express-openapi-validator "^5.0.4" - express-promise-router "^4.1.0" - json-schema-to-ts "^3.0.0" - lodash "^4.17.21" - openapi-merge "^1.3.2" - openapi3-ts "^3.1.2" + "@backstage/cli-common" "^0.2.1" + "@backstage/cli-node" "^0.3.1" + "@octokit/request" "^8.0.0" + chalk "^4.0.0" + cleye "^2.3.0" + express "^4.22.0" + fs-extra "^11.2.0" + inquirer "^8.2.0" + react-dev-utils "^12.0.0-next.60" + yaml "^2.0.0" -"@backstage/backend-plugin-api@^0.6.17", "@backstage/backend-plugin-api@^0.6.21": - version "0.6.21" - resolved "https://registry.yarnpkg.com/@backstage/backend-plugin-api/-/backend-plugin-api-0.6.21.tgz#0d1b9222a8e69cfd500a0789edaff7d14a77dffe" - integrity sha512-Cek3jgJmUY6oGDAYd7o/M6fezSnOIHzCBEsJHeE4vakdZ2vYOGVWPGIQmWSylEhK/oEL54JUslB5VjHo1onL9A== +"@backstage/cli-module-info@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@backstage/cli-module-info/-/cli-module-info-0.1.1.tgz#ca933352ad1c08ac74fd8310842ef6109ef2e159" + integrity sha512-ICpTuWThsf9bnBKieEIqkLWCklPjzz2c7Cz/y7jGexOPDd0MBh0gW9RxjOTQdk5HAg/EiozYnKMcUjq2Z7Wkrg== dependencies: - "@backstage/cli-common" "^0.1.14" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-auth-node" "^0.4.16" - "@backstage/plugin-permission-common" "^0.7.14" - "@backstage/types" "^1.1.1" - "@types/express" "^4.17.6" - "@types/luxon" "^3.0.0" - express "^4.17.1" - knex "^3.0.0" - luxon "^3.0.0" + "@backstage/cli-common" "^0.2.1" + "@backstage/cli-node" "^0.3.1" + cleye "^2.3.0" + fs-extra "^11.2.0" + minimatch "^10.2.1" -"@backstage/backend-plugin-api@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@backstage/backend-plugin-api/-/backend-plugin-api-0.7.0.tgz#1a95a8fb5703856e08fef0e94b12f4a50e77ea68" - integrity sha512-cq93C7UkS1t/D6VP3XZ8gLD8o3cRmbeSsIUGk+AYiUm0e8aSCWSAlBBiFYrylVOAuQXzEIgE9Gb3MNNFbl+Qug== +"@backstage/cli-module-lint@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@backstage/cli-module-lint/-/cli-module-lint-0.1.1.tgz#2fabcdb8576101efc5c45f30d50f2e008443b8a0" + integrity sha512-T9GaEY3eLb/MyEAlqsu1NOvadZJ4oIOTKhGgA0UFyWmOfhNjTcKokE88O/CoqwOTuzzo0pU6+ByekJXJv11fCg== dependencies: - "@backstage/cli-common" "^0.1.14" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-auth-node" "^0.4.17" - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/types" "^1.1.1" - "@types/express" "^4.17.6" - "@types/luxon" "^3.0.0" - express "^4.17.1" - knex "^3.0.0" - luxon "^3.0.0" + "@backstage/cli-common" "^0.2.1" + "@backstage/cli-node" "^0.3.1" + chalk "^4.0.0" + cleye "^2.3.0" + eslint "^8.6.0" + eslint-formatter-friendly "^7.0.0" + fs-extra "^11.2.0" + globby "^11.1.0" + shell-quote "^1.8.1" -"@backstage/backend-tasks@^0.5.26", "@backstage/backend-tasks@^0.5.27": - version "0.5.27" - resolved "https://registry.yarnpkg.com/@backstage/backend-tasks/-/backend-tasks-0.5.27.tgz#e79517412135ddc2716152decf8e3fd6296c3a88" - integrity sha512-xR9PeO9pmm12PqJRLOpHzhh4wZpZiCXQs2Tw6t9vm4/wJSn7nEuc2Qt0CKi/ssAG6iDONA3vVtH85no5CDoJUQ== +"@backstage/cli-module-maintenance@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@backstage/cli-module-maintenance/-/cli-module-maintenance-0.1.1.tgz#c812ec36a8214e648356c3ae6db27b7075ad6226" + integrity sha512-UE5qU7JLYzlZ89FN2+5luoNsO+Xwe1AFVjDFgT411Wx939N+W8mN01vP3nJ+ae9rw9aIGPhboEB9Fx3dz56rPA== dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/types" "^1.1.1" - "@opentelemetry/api" "^1.3.0" - "@types/luxon" "^3.0.0" - cron "^3.0.0" - knex "^3.0.0" - lodash "^4.17.21" - luxon "^3.0.0" - uuid "^9.0.0" - zod "^3.22.4" + "@backstage/cli-common" "^0.2.1" + "@backstage/cli-node" "^0.3.1" + chalk "^4.0.0" + cleye "^2.3.0" + eslint "^8.6.0" + fs-extra "^11.2.0" -"@backstage/catalog-client@^1.6.4", "@backstage/catalog-client@^1.6.5": - version "1.6.5" - resolved "https://registry.npmmirror.com/@backstage/catalog-client/-/catalog-client-1.6.5.tgz#f27c933abf8c7bf8bcbd090b4b550a7eb1957686" - integrity sha512-powm86JuibW0GtxtVYwO/xj3SjwV8AWMbL/D9C3Yl3mZ+4sp8lwXTTlKR+IdNHnFlDfwHiNH7LKT4BMgtTZbtA== +"@backstage/cli-module-migrate@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@backstage/cli-module-migrate/-/cli-module-migrate-0.1.1.tgz#6a07e1d48ad8b547241ae55d759830135dea6f49" + integrity sha512-i0gWQIBsYd0iMb0oACWLEFoeytK4Uqn0WnuNrnQLwsp8T0nLNuvVLWsjnfCH1Ajlal43p6r+zjw8ZyGw44tUXg== dependencies: - "@backstage/catalog-model" "^1.5.0" - "@backstage/errors" "^1.2.4" - cross-fetch "^4.0.0" - uri-template "^2.0.0" + "@backstage/cli-common" "^0.2.1" + "@backstage/cli-node" "^0.3.1" + "@backstage/errors" "^1.3.0" + "@backstage/release-manifests" "^0.0.13" + "@manypkg/get-packages" "^1.1.3" + chalk "^4.0.0" + cleye "^2.3.0" + fs-extra "^11.2.0" + minimatch "^10.2.1" + ora "^5.3.0" + replace-in-file "^7.1.0" + semver "^7.5.3" -"@backstage/catalog-model@^1.4.3", "@backstage/catalog-model@^1.5.0": - version "1.5.0" - resolved "https://registry.npmmirror.com/@backstage/catalog-model/-/catalog-model-1.5.0.tgz#7f5c4a80a3341555db5209fbc6fc2d25f6500707" - integrity sha512-CfLO5/DMGahneuLU4KTQEs1tgNhBciUtyGUDZB4Ii9i1Uha1poWcqp4HKg61lj1hmXNDUHmlbFqY9W7kmzRC0A== +"@backstage/cli-module-new@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@backstage/cli-module-new/-/cli-module-new-0.1.2.tgz#e88a55084202caf7ad9dfde61a066d9119abd472" + integrity sha512-zspMn72FesOyBvK6qz38PWm+2Vvi6nG0HoDrB0Sr/sHfpD/ovJEa+YlJcfGRbQGz/YryfoJMeqvJiB2UU40qUg== dependencies: - "@backstage/errors" "^1.2.4" - "@backstage/types" "^1.1.1" - ajv "^8.10.0" + "@backstage/cli-common" "^0.2.1" + "@backstage/cli-node" "^0.3.1" + "@backstage/errors" "^1.3.0" + chalk "^4.0.0" + cleye "^2.3.0" + fs-extra "^11.2.0" + handlebars "^4.7.3" + inquirer "^8.2.0" lodash "^4.17.21" + ora "^5.3.0" + recursive-readdir "^2.2.2" + semver "^7.5.3" + yaml "^2.0.0" + zod "^3.25.76" + zod-validation-error "^4.0.2" -"@backstage/cli-common@^0.1.13", "@backstage/cli-common@^0.1.14": - version "0.1.14" - resolved "https://registry.yarnpkg.com/@backstage/cli-common/-/cli-common-0.1.14.tgz#2291520acfbac860a05dd48fc3b876d5cd789b76" - integrity sha512-4kGWGrFuxoaCne2aHCOVW+vi8y2MLEMEj785SEApMG2J8jXJXUuIOzWw0MrN0pM1FqBXDb6aeQd+bmQMK/Ci+w== +"@backstage/cli-module-test-jest@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@backstage/cli-module-test-jest/-/cli-module-test-jest-0.1.1.tgz#72e0cd16157ac02676fa7f836242a763b3fea654" + integrity sha512-4ohoP51bufBOp7W1zL1QPH6pM9a4WSALJc3Fb1P2LRp19KELCXeZ2EkcwMqZRdZGTQtEroFghH6sozJAMNWypQ== + dependencies: + "@backstage/cli-common" "^0.2.1" + "@backstage/cli-node" "^0.3.1" + "@swc/core" "^1.15.6" + "@swc/jest" "^0.2.39" + cleye "^2.3.0" + cross-fetch "^4.0.0" + fs-extra "^11.2.0" + glob "^13.0.0" + jest-css-modules "^2.1.0" + sucrase "^3.20.2" + yargs "^16.2.0" -"@backstage/cli-node@^0.2.6", "@backstage/cli-node@^0.2.7": - version "0.2.7" - resolved "https://registry.yarnpkg.com/@backstage/cli-node/-/cli-node-0.2.7.tgz#8f104698c9ae9bf2602572681b07e141aa7ce8f4" - integrity sha512-fmGjmDFNMrc78qqOEnvpXmIErGq1hJ61A4yJU8iWzT/msEZNCt48Mza/D+nv53rfapsgJm1zYdhhqZRQpP5OkA== +"@backstage/cli-module-translations@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@backstage/cli-module-translations/-/cli-module-translations-0.1.1.tgz#255252fdcfd17c4c6a8d64af369bff339a1d8ceb" + integrity sha512-WV/uxM+oVeZ2ViugdbmzMPR1orbdKMTdmTAeV7+PWGYu+dKCR889Kl9dXX2ZzobasF5hEvbm68bJeI3ijM1fOQ== dependencies: - "@backstage/cli-common" "^0.1.14" - "@backstage/errors" "^1.2.4" - "@backstage/types" "^1.1.1" + "@backstage/cli-common" "^0.2.1" + "@backstage/cli-node" "^0.3.1" + cleye "^2.3.0" + fs-extra "^11.2.0" + ts-morph "^24.0.0" + +"@backstage/cli-node@^0.2.14", "@backstage/cli-node@^0.2.15", "@backstage/cli-node@^0.2.18": + version "0.2.18" + resolved "https://registry.yarnpkg.com/@backstage/cli-node/-/cli-node-0.2.18.tgz#5b932590a6dd3a437b6f203e4ed985d9505a11b0" + integrity sha512-C03YFlfHzobLEWJMA4x0OcZqIfthFMKW//1QuzSIQstr5of558BpK0ZyYlOdYdy+c7H8kjIk4fhc+ev7liqspQ== + dependencies: + "@backstage/cli-common" "^0.1.18" + "@backstage/errors" "^1.2.7" + "@backstage/types" "^1.2.2" "@manypkg/get-packages" "^1.1.3" "@yarnpkg/parsers" "^3.0.0" fs-extra "^11.2.0" semver "^7.5.3" - zod "^3.22.4" + zod "^3.25.76" -"@backstage/cli@^0.26.10": - version "0.26.11" - resolved "https://registry.yarnpkg.com/@backstage/cli/-/cli-0.26.11.tgz#7b0af99608cec9e867f00c9c4797829925ac53b1" - integrity sha512-HBvLNEMDBtQ3pd3pvNbxXUoP2zTexElw64mNs2PMYpPSvnyvtx0wsoFDdSUtFF+vnYlfqvg2FaNqLbSKEJjSjQ== +"@backstage/cli-node@^0.3.0", "@backstage/cli-node@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@backstage/cli-node/-/cli-node-0.3.1.tgz#3546bbe86c0cb58757fbb6c22d0a5625c3e54231" + integrity sha512-rZEgs0ZbqyFl+IOFt5t5n8P6cJZ7iMP06Da/oH7DbTPoO8xYKmQMTVR8vDEsDquJ6fnFkHy24twF8z83Eqo7bA== dependencies: - "@backstage/catalog-model" "^1.5.0" - "@backstage/cli-common" "^0.1.14" - "@backstage/cli-node" "^0.2.7" - "@backstage/config" "^1.2.0" - "@backstage/config-loader" "^1.8.1" - "@backstage/errors" "^1.2.4" - "@backstage/eslint-plugin" "^0.1.8" - "@backstage/integration" "^1.13.0" - "@backstage/release-manifests" "^0.0.11" - "@backstage/types" "^1.1.1" + "@backstage/cli-common" "^0.2.1" + "@backstage/errors" "^1.3.0" + "@backstage/types" "^1.2.2" "@manypkg/get-packages" "^1.1.3" - "@module-federation/enhanced" "^0.1.19" - "@octokit/graphql" "^5.0.0" - "@octokit/graphql-schema" "^13.7.0" - "@octokit/oauth-app" "^4.2.0" - "@octokit/request" "^6.0.0" - "@pmmmwh/react-refresh-webpack-plugin" "^0.5.7" - "@rollup/plugin-commonjs" "^25.0.0" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "^3.0.0" + chalk "^4.0.0" + commander "^12.0.0" + fs-extra "^11.2.0" + pirates "^4.0.6" + proper-lockfile "^4.1.2" + semver "^7.5.3" + yaml "^2.0.0" + zod "^3.25.76 || ^4.0.0" + optionalDependencies: + keytar "^7.9.0" + +"@backstage/cli@^0.35.0": + version "0.35.4" + resolved "https://registry.yarnpkg.com/@backstage/cli/-/cli-0.35.4.tgz#45597a524306742e7dd871840c4588a29b5d3f27" + integrity sha512-PcUtErbuH2P+J+QYBkxZMENBzaGU3a+61ubLFB9NdZrIKahu0B9ZuzpytdezEpqa9eOTedD4UB9DkvCYno9wIg== + dependencies: + "@backstage/catalog-model" "^1.7.6" + "@backstage/cli-common" "^0.1.18" + "@backstage/cli-node" "^0.2.18" + "@backstage/config" "^1.3.6" + "@backstage/config-loader" "^1.10.8" + "@backstage/errors" "^1.2.7" + "@backstage/eslint-plugin" "^0.2.1" + "@backstage/integration" "^1.20.0" + "@backstage/module-federation-common" "^0.1.0" + "@backstage/release-manifests" "^0.0.13" + "@backstage/types" "^1.2.2" + "@manypkg/get-packages" "^1.1.3" + "@module-federation/enhanced" "^0.21.6" + "@octokit/request" "^8.0.0" + "@rollup/plugin-commonjs" "^26.0.0" "@rollup/plugin-json" "^6.0.0" "@rollup/plugin-node-resolve" "^15.0.0" "@rollup/plugin-yaml" "^4.0.0" + "@rspack/core" "^1.4.11" + "@rspack/dev-server" "^1.1.4" + "@rspack/plugin-react-refresh" "^1.4.3" "@spotify/eslint-config-base" "^15.0.0" "@spotify/eslint-config-react" "^15.0.0" "@spotify/eslint-config-typescript" "^15.0.0" - "@sucrase/webpack-loader" "^2.0.0" - "@svgr/core" "6.5.x" - "@svgr/plugin-jsx" "6.5.x" - "@svgr/plugin-svgo" "6.5.x" - "@svgr/rollup" "6.5.x" - "@svgr/webpack" "6.5.x" - "@swc/core" "^1.3.46" - "@swc/helpers" "^0.5.0" - "@swc/jest" "^0.2.22" - "@types/jest" "^29.5.11" + "@swc/core" "^1.15.6" + "@swc/helpers" "^0.5.17" + "@swc/jest" "^0.2.39" "@types/webpack-env" "^1.15.2" - "@typescript-eslint/eslint-plugin" "^6.12.0" - "@typescript-eslint/parser" "^6.7.2" + "@typescript-eslint/eslint-plugin" "^8.17.0" + "@typescript-eslint/parser" "^8.16.0" "@yarnpkg/lockfile" "^1.1.0" "@yarnpkg/parsers" "^3.0.0" bfj "^8.0.0" @@ -2978,80 +3007,115 @@ cross-spawn "^7.0.3" css-loader "^6.5.1" ctrlc-windows "^2.1.0" - diff "^5.0.0" - esbuild "^0.21.0" - esbuild-loader "^4.0.0" + esbuild "^0.27.0" eslint "^8.6.0" eslint-config-prettier "^9.0.0" eslint-formatter-friendly "^7.0.0" - eslint-plugin-deprecation "^2.0.0" - eslint-plugin-import "^2.25.4" - eslint-plugin-jest "^27.0.0" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "^7.28.0" - eslint-plugin-react-hooks "^4.3.0" - eslint-plugin-unused-imports "^3.0.0" - eslint-webpack-plugin "^4.0.0" - express "^4.17.1" - fork-ts-checker-webpack-plugin "^9.0.0" + eslint-plugin-deprecation "^3.0.0" + eslint-plugin-import "^2.31.0" + eslint-plugin-jest "^28.9.0" + eslint-plugin-jsx-a11y "^6.10.2" + eslint-plugin-react "^7.37.2" + eslint-plugin-react-hooks "^5.0.0" + eslint-plugin-unused-imports "^4.1.4" + eslint-rspack-plugin "^4.2.1" + express "^4.22.0" fs-extra "^11.2.0" - git-url-parse "^14.0.0" + git-url-parse "^15.0.0" glob "^7.1.7" global-agent "^3.0.0" + globby "^11.1.0" handlebars "^4.7.3" - html-webpack-plugin "^5.3.1" + html-webpack-plugin "^5.6.3" inquirer "^8.2.0" - jest "^29.7.0" jest-css-modules "^2.1.0" - jest-environment-jsdom "^29.0.2" - jest-runtime "^29.0.2" json-schema "^0.4.0" lodash "^4.17.21" - mini-css-extract-plugin "^2.4.2" minimatch "^9.0.0" - node-fetch "^2.6.7" - node-libs-browser "^2.2.1" + node-stdlib-browser "^1.3.1" npm-packlist "^5.0.0" ora "^5.3.0" - p-limit "^3.1.0" p-queue "^6.6.2" pirates "^4.0.6" postcss "^8.1.0" + postcss-import "^16.1.0" process "^0.11.10" + raw-loader "^4.0.2" react-dev-utils "^12.0.0-next.60" - react-refresh "^0.14.0" + react-refresh "^0.17.0" recursive-readdir "^2.2.2" replace-in-file "^7.1.0" - rollup "^4.0.0" + rollup "^4.27.3" rollup-plugin-dts "^6.1.0" rollup-plugin-esbuild "^6.1.1" rollup-plugin-postcss "^4.0.0" rollup-pluginutils "^2.8.2" - run-script-webpack-plugin "^0.2.0" semver "^7.5.3" style-loader "^3.3.1" sucrase "^3.20.2" swc-loader "^0.2.3" - tar "^6.1.12" - terser-webpack-plugin "^5.1.3" + tar "^7.5.6" + ts-checker-rspack-plugin "^1.1.5" + ts-morph "^24.0.0" + undici "^7.2.3" util "^0.12.3" - webpack "^5.70.0" - webpack-dev-server "^5.0.0" - webpack-node-externals "^3.0.0" yaml "^2.0.0" + yargs "^16.2.0" yml-loader "^2.1.0" yn "^4.0.0" - zod "^3.22.4" + zod "^3.25.76" + zod-validation-error "^4.0.2" + +"@backstage/cli@^0.36.0": + version "0.36.1" + resolved "https://registry.yarnpkg.com/@backstage/cli/-/cli-0.36.1.tgz#305b47894df43300c5f5019e44ab99c8fc1e9b47" + integrity sha512-7M9ss4cccqQOF4Xf/IDPj03PnePzQ4QqnSz/E+lpUXS3iJol/Ofdm+nujsvCgqOWTu59CfRTLvX6Hbip+z6S2Q== + dependencies: + "@backstage/cli-common" "^0.2.1" + "@backstage/cli-defaults" "^0.1.1" + "@backstage/cli-module-build" "^0.1.1" + "@backstage/cli-module-test-jest" "^0.1.1" + "@backstage/cli-node" "^0.3.1" + "@backstage/errors" "^1.3.0" + "@backstage/eslint-plugin" "^0.2.3" + "@manypkg/get-packages" "^1.1.3" + "@spotify/eslint-config-base" "^15.0.0" + "@spotify/eslint-config-react" "^15.0.0" + "@spotify/eslint-config-typescript" "^15.0.0" + "@swc/core" "^1.15.6" + "@swc/jest" "^0.2.39" + "@types/webpack-env" "^1.15.2" + "@typescript-eslint/eslint-plugin" "^8.17.0" + "@typescript-eslint/parser" "^8.16.0" + chalk "^4.0.0" + commander "^14.0.3" + cross-fetch "^4.0.0" + eslint "^8.6.0" + eslint-config-prettier "^9.0.0" + eslint-plugin-deprecation "^3.0.0" + eslint-plugin-import "^2.31.0" + eslint-plugin-jest "^28.9.0" + eslint-plugin-jsx-a11y "^6.10.2" + eslint-plugin-react "^7.37.2" + eslint-plugin-react-hooks "^5.0.0" + eslint-plugin-unused-imports "^4.1.4" + fs-extra "^11.2.0" + glob "^13.0.0" + jest-css-modules "^2.1.0" + pirates "^4.0.6" + postcss "^8.1.0" + sucrase "^3.20.2" + yaml "^2.0.0" -"@backstage/config-loader@^1.8.0", "@backstage/config-loader@^1.8.1": - version "1.8.1" - resolved "https://registry.yarnpkg.com/@backstage/config-loader/-/config-loader-1.8.1.tgz#4383309ffe0488fa6c9dac33f3bec96181750e42" - integrity sha512-oPT+TZK1ppBjQXgOJ+pfsfE/Lov596WlBc5po9wElgnbQ720OsyAmystLKecvZ1HAjC/IGLKrPZMh9OAy/k36Q== +"@backstage/config-loader@^1.10.10", "@backstage/config-loader@^1.10.4", "@backstage/config-loader@^1.10.6", "@backstage/config-loader@^1.10.8", "@backstage/config-loader@^1.10.9", "@backstage/config-loader@^1.9.1": + version "1.10.10" + resolved "https://registry.yarnpkg.com/@backstage/config-loader/-/config-loader-1.10.10.tgz#e052a9d8ad266a75eef2e318056d197ac79b0567" + integrity sha512-ERV8eyPZI+co74By9HNaTsff9WksC4ikF+hKiljkoOyKGl0g4ieCasDH+jkwUONZKGHzgSPavg1zyAxybxTzTQ== dependencies: - "@backstage/cli-common" "^0.1.14" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/types" "^1.1.1" + "@backstage/cli-common" "^0.2.1" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/types" "^1.2.2" "@types/json-schema" "^7.0.6" ajv "^8.10.0" chokidar "^3.5.2" @@ -3061,11 +3125,10 @@ json-schema-traverse "^1.0.0" lodash "^4.17.21" minimist "^1.2.5" - node-fetch "^2.6.7" - typescript-json-schema "^0.63.0" + typescript-json-schema "^0.67.0" yaml "^2.0.0" -"@backstage/config@^1.1.1", "@backstage/config@^1.2.0": +"@backstage/config@^1.2.0": version "1.2.0" resolved "https://registry.npmmirror.com/@backstage/config/-/config-1.2.0.tgz#6a4d93197d0586ee3a40f9e4877c5cfd76c128f3" integrity sha512-tW8hNzDTClotYmpOrUrutymzZ0Zimx/WeU2+5tLv+ZI8ssRV64KGRe8hi7PuQz2lARVF1DxjwV//Bq2VjR5veA== @@ -3073,110 +3136,83 @@ "@backstage/errors" "^1.2.4" "@backstage/types" "^1.1.1" -"@backstage/core-app-api@^1.13.0", "@backstage/core-app-api@^1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@backstage/core-app-api/-/core-app-api-1.14.1.tgz#d998ba2b9b2fd80db762a933c5e2d9985c14c1ac" - integrity sha512-I3Hbc36dTjKNL5yhY16yNamv1nFxfzDxd6Y42apDq+IEAueZrodR/+qCeMq2QtcpZ9GOfowKoJhccA8GMUXpQQ== +"@backstage/config@^1.3.2", "@backstage/config@^1.3.4", "@backstage/config@^1.3.5", "@backstage/config@^1.3.6", "@backstage/config@^1.3.7": + version "1.3.7" + resolved "https://registry.yarnpkg.com/@backstage/config/-/config-1.3.7.tgz#7586019f369b9924ccd24e431948283f46afc987" + integrity sha512-vT2PE+R9Yt9i/nwtReKVtvXSB5vEdxwhtwHuIy5+TyDB8i9fBPdBN0pedy+iQsaTCXcDWcq/lLHaJ3t1nKc8MQ== dependencies: - "@backstage/config" "^1.2.0" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/types" "^1.1.1" - "@backstage/version-bridge" "^1.0.8" + "@backstage/errors" "^1.3.0" + "@backstage/types" "^1.2.2" + ms "^2.1.3" + +"@backstage/core-app-api@^1.19.4", "@backstage/core-app-api@^1.19.6", "@backstage/core-app-api@^1.20.0": + version "1.20.0" + resolved "https://registry.yarnpkg.com/@backstage/core-app-api/-/core-app-api-1.20.0.tgz#8f2ef2126edb66a21a4b9642ce3eab481f0ae7b4" + integrity sha512-fXisRnDJqyfI8poSGJcGUDKYmzqN5I31WNcwzfEFF7QAjyB75XZ2LCiq5v71mxJpoX0YoV+73OKmJfUbGwhgtw== + dependencies: + "@backstage/config" "^1.3.7" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/types" "^1.2.2" + "@backstage/ui" "^0.14.0" + "@backstage/version-bridge" "^1.0.12" "@types/prop-types" "^15.7.3" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" history "^5.0.0" i18next "^22.4.15" lodash "^4.17.21" prop-types "^15.7.2" react-use "^17.2.4" zen-observable "^0.10.0" - zod "^3.22.4" + zod "^3.25.76 || ^4.0.0" -"@backstage/core-compat-api@^0.2.7": - version "0.2.7" - resolved "https://registry.yarnpkg.com/@backstage/core-compat-api/-/core-compat-api-0.2.7.tgz#5b58f5984e2d54489dc6389fb48296afc2586149" - integrity sha512-At+mkjrIUrvAPK2bLVtdCFhCGY4VK9i2cKvaOeFRyVJuHU8f7WEKaHjDV8afLVddllUjq6j1uDeFRfiMMPtXqw== - dependencies: - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/frontend-plugin-api" "^0.6.7" - "@backstage/version-bridge" "^1.0.8" - "@types/react" "^16.13.1 || ^17.0.0" - -"@backstage/core-components@^0.13.8": - version "0.13.10" - resolved "https://registry.npmmirror.com/@backstage/core-components/-/core-components-0.13.10.tgz#f423b56c81cade3df20ec5eccb209f0315320290" - integrity sha512-njqtxt0J4eHBcU+tuZgL0yba8Fhie/OtefVwCx5K6+vPWLGQNMnXzJCX7Q/4iLtwBXoMyP+pk3r90sDja3ZV9Q== - dependencies: - "@backstage/config" "^1.1.1" - "@backstage/core-plugin-api" "^1.8.2" - "@backstage/errors" "^1.2.3" - "@backstage/theme" "^0.5.0" - "@backstage/version-bridge" "^1.0.7" - "@date-io/core" "^1.3.13" - "@material-table/core" "^3.1.0" - "@material-ui/core" "^4.12.2" - "@material-ui/icons" "^4.9.1" - "@material-ui/lab" "4.0.0-alpha.61" - "@react-hookz/web" "^23.0.0" - "@types/react" "^16.13.1 || ^17.0.0" - "@types/react-sparklines" "^1.7.0" - "@types/react-text-truncate" "^0.14.0" - ansi-regex "^6.0.1" - classnames "^2.2.6" - d3-selection "^3.0.0" - d3-shape "^3.0.0" - d3-zoom "^3.0.0" - dagre "^0.8.5" - linkify-react "4.1.3" - linkifyjs "4.1.3" +"@backstage/core-compat-api@^0.5.10", "@backstage/core-compat-api@^0.5.3", "@backstage/core-compat-api@^0.5.7", "@backstage/core-compat-api@^0.5.9": + version "0.5.10" + resolved "https://registry.yarnpkg.com/@backstage/core-compat-api/-/core-compat-api-0.5.10.tgz#45f0c6cab83b1156b3e0e23d6c7ff386a47d8209" + integrity sha512-/im5aCaF/UfXuNLioN4VaO8xalgjiYQwu7+8c2llGsXIli/vklZ8f7nuByL0nv44bWrw4Tmr/0GRr9t6Q6xPsA== + dependencies: + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/errors" "^1.3.0" + "@backstage/filter-predicates" "^0.1.2" + "@backstage/frontend-plugin-api" "^0.16.0" + "@backstage/plugin-app-react" "^0.2.2" + "@backstage/plugin-catalog-react" "^2.1.2" + "@backstage/types" "^1.2.2" + "@backstage/version-bridge" "^1.0.12" lodash "^4.17.21" - pluralize "^8.0.0" - qs "^6.9.4" - rc-progress "3.5.1" - react-helmet "6.1.0" - react-hook-form "^7.12.2" - react-idle-timer "5.6.2" - react-markdown "^8.0.0" - react-sparklines "^1.7.0" - react-syntax-highlighter "^15.4.5" - react-text-truncate "^0.19.0" - react-use "^17.3.2" - react-virtualized-auto-sizer "^1.0.11" - react-window "^1.8.6" - remark-gfm "^3.0.1" - zen-observable "^0.10.0" - zod "^3.22.4" - -"@backstage/core-components@^0.14.8", "@backstage/core-components@^0.14.9": - version "0.14.9" - resolved "https://registry.yarnpkg.com/@backstage/core-components/-/core-components-0.14.9.tgz#bb1f40be18d8241b70538383d324aec233586382" - integrity sha512-tcwDUeQBMIKtM+EuLMl6BdwjWdjjTnvvUuQCJISdy5ot+Yp/znQK+d4KIA97wq3Fu/ufy1+tAAwGGaifHMRf1g== - dependencies: - "@backstage/config" "^1.2.0" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/errors" "^1.2.4" - "@backstage/theme" "^0.5.6" - "@backstage/version-bridge" "^1.0.8" + zod "^3.25.76 || ^4.0.0" + +"@backstage/core-components@^0.18.1", "@backstage/core-components@^0.18.2", "@backstage/core-components@^0.18.6", "@backstage/core-components@^0.18.8", "@backstage/core-components@^0.18.9": + version "0.18.9" + resolved "https://registry.yarnpkg.com/@backstage/core-components/-/core-components-0.18.9.tgz#93f9b13e0c5e95689934efef7b4ea8ec60b73dca" + integrity sha512-ZzmSb5qyNex1DXvgmcU9nLxNdrxNZUafYH3tL9XYGat0fwQxx7tPp4Fla8dAUkJhKWwiVhRmY3WJy1NxSuJGpA== + dependencies: + "@backstage/config" "^1.3.7" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/errors" "^1.3.0" + "@backstage/theme" "^0.7.3" + "@backstage/version-bridge" "^1.0.12" + "@dagrejs/dagre" "^1.1.4" "@date-io/core" "^1.3.13" "@material-table/core" "^3.1.0" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.61" "@react-hookz/web" "^24.0.0" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" + "@testing-library/react" "^16.0.0" "@types/react-sparklines" "^1.7.0" ansi-regex "^6.0.1" classnames "^2.2.6" d3-selection "^3.0.0" d3-shape "^3.0.0" d3-zoom "^3.0.0" - dagre "^0.8.5" - linkify-react "4.1.3" - linkifyjs "4.1.3" + js-yaml "^4.1.0" + linkify-react "4.3.2" + linkifyjs "4.3.2" lodash "^4.17.21" + parse5 "^6.0.0" pluralize "^8.0.0" qs "^6.9.4" rc-progress "3.5.1" + react-full-screen "^1.1.1" react-helmet "6.1.0" react-hook-form "^7.12.2" react-idle-timer "5.7.2" @@ -3186,49 +3222,44 @@ react-use "^17.3.2" react-virtualized-auto-sizer "^1.0.11" react-window "^1.8.6" + rehype-raw "^6.0.0" + rehype-sanitize "^5.0.0" remark-gfm "^3.0.1" zen-observable "^0.10.0" - zod "^3.22.4" - -"@backstage/core-plugin-api@^1.8.0", "@backstage/core-plugin-api@^1.8.2", "@backstage/core-plugin-api@^1.9.3": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@backstage/core-plugin-api/-/core-plugin-api-1.9.3.tgz#66b4b7dc620823c66b123c8a2d6db088e2936027" - integrity sha512-MV/RQv8nAPYVkVX926Z+VPW2W4ZzU9VN2s9NhWSWqoYuOzsmA4FgmfNDuwiPEAUKW7AlVCGI4A0deUZ22Orgyw== - dependencies: - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/types" "^1.1.1" - "@backstage/version-bridge" "^1.0.8" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" + zod "^3.25.76 || ^4.0.0" + +"@backstage/core-plugin-api@^1.11.0", "@backstage/core-plugin-api@^1.11.1", "@backstage/core-plugin-api@^1.12.1", "@backstage/core-plugin-api@^1.12.2", "@backstage/core-plugin-api@^1.12.4", "@backstage/core-plugin-api@^1.12.5": + version "1.12.5" + resolved "https://registry.yarnpkg.com/@backstage/core-plugin-api/-/core-plugin-api-1.12.5.tgz#3900907b4d4bd76a50d92bbbac117e59c0c15e77" + integrity sha512-2SJFXbKXiGd0/hxsL0WoMyccMs26Vm3C91RJTXc0cvaWCcCVpbtNWrd0b8KBE/1RJJoE+FfdsyYXBJScZmCVXg== + dependencies: + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/frontend-plugin-api" "^0.16.0" + "@backstage/types" "^1.2.2" + "@backstage/version-bridge" "^1.0.12" history "^5.0.0" - -"@backstage/dev-utils@^1.0.34": - version "1.0.36" - resolved "https://registry.yarnpkg.com/@backstage/dev-utils/-/dev-utils-1.0.36.tgz#a52b4f54c1eaea42606c58a8e1b66f45deaba041" - integrity sha512-WeD6rBLCwhOm3Mp3trVPNQSEgZ/ci/tFjv7/4r9dXQpM+tStDcv9ElHi0CjMnuGdyg0ZtFe435Rtijwd6+1ntA== - dependencies: - "@backstage/app-defaults" "^1.5.9" - "@backstage/catalog-model" "^1.5.0" - "@backstage/core-app-api" "^1.14.1" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/integration-react" "^1.1.29" - "@backstage/plugin-catalog-react" "^1.12.2" - "@backstage/theme" "^0.5.6" + zod "^3.25.76 || ^4.0.0" + +"@backstage/dev-utils@^1.1.21": + version "1.1.22" + resolved "https://registry.yarnpkg.com/@backstage/dev-utils/-/dev-utils-1.1.22.tgz#984d918d10d104392fe5dd7c87851bc21a36dba0" + integrity sha512-+9MOccEpFJnd47AoC/p85xvghsSSBQZfEQMIiE9Api4hm95bWEhEG8jMlYn/mh5Wg3f6i2pdPV/mB08uNIRa9w== + dependencies: + "@backstage/app-defaults" "^1.7.7" + "@backstage/catalog-model" "^1.8.0" + "@backstage/core-app-api" "^1.20.0" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/integration-react" "^1.2.17" + "@backstage/plugin-catalog-react" "^2.1.2" + "@backstage/theme" "^0.7.3" + "@backstage/ui" "^0.14.0" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" react-use "^17.2.4" -"@backstage/e2e-test-utils@^0.1.1": - version "0.1.1" - resolved "https://registry.npmmirror.com/@backstage/e2e-test-utils/-/e2e-test-utils-0.1.1.tgz#309164a5006593da711f55f430dc4d11a3036514" - integrity sha512-g5knWOQT/vEv3RwMtN3sCz7m43r+jFoO35y7FBuruhGJfzJY4Q4qK+wSGwJ/hSZ7Uj6WBNRsyw8oauMPKiRA5A== - dependencies: - "@manypkg/get-packages" "^1.1.3" - fs-extra "^11.0.0" - -"@backstage/errors@^1.2.3", "@backstage/errors@^1.2.4": +"@backstage/errors@^1.2.4": version "1.2.4" resolved "https://registry.npmmirror.com/@backstage/errors/-/errors-1.2.4.tgz#2ba79c6308e87b0de99edf499e1c82477d3d6e8a" integrity sha512-JBhKn9KwZTzp/AaOC0vBncKCM1vI9Z8rKKyr9vj3wt3SSgCnDPxNwVz7SlXa2Rc9TOQq0Yk3olkmQE9U+S5uWg== @@ -3236,29 +3267,157 @@ "@backstage/types" "^1.1.1" serialize-error "^8.0.1" -"@backstage/eslint-plugin@^0.1.8": - version "0.1.8" - resolved "https://registry.npmmirror.com/@backstage/eslint-plugin/-/eslint-plugin-0.1.8.tgz#4c554916ae9bdce17ab7082a5c341646f170c9b7" - integrity sha512-pYAGh3LoTlM0JhW+5ujEim+AjGs6xnGJcZAlnQ0jnlqdItSvMklL1mIkpwgY2i9NM6AxYzoYnXF8AQxnz6RSTg== +"@backstage/errors@^1.2.7", "@backstage/errors@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@backstage/errors/-/errors-1.3.0.tgz#59d2ba252bd8c0fc0774386f53f618d00bc895a1" + integrity sha512-l12MWUDWfoVg0YFjrPbwR7R5OlLSma7n5bQSwmtk5WS6JVQVWhZzMCOvGR6tF8qae/pAjaDGHM5+saTAYAjf/w== + dependencies: + "@backstage/types" "^1.2.2" + serialize-error "^8.0.1" + +"@backstage/eslint-plugin@^0.2.1", "@backstage/eslint-plugin@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@backstage/eslint-plugin/-/eslint-plugin-0.2.3.tgz#dff8c0bf8cd1a3cf462baecdc4c5c35e15feccac" + integrity sha512-ot5ZG9Lbc6AYwoJm9DinLlJ6SfQ/E0/YLo1Iice2aM85fWLRlSamTmKup1VrHsAHa8wqknp5QuRD/E8nxqveEg== dependencies: "@manypkg/get-packages" "^1.1.3" - minimatch "^9.0.0" + minimatch "^10.2.1" -"@backstage/frontend-plugin-api@^0.6.7": - version "0.6.7" - resolved "https://registry.yarnpkg.com/@backstage/frontend-plugin-api/-/frontend-plugin-api-0.6.7.tgz#73bbc30f6f1b5acc31b9f17fd31d957498f497fb" - integrity sha512-hXXRuo4GxA/XSfQuSYJ/X59ShJKPf9KM76sXnVczsGeSFyORX3SRHKy8An0M3qQ/P9C9Z9LOBc38gghOtrUiGA== +"@backstage/filter-predicates@^0.1.1", "@backstage/filter-predicates@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@backstage/filter-predicates/-/filter-predicates-0.1.2.tgz#33aec7d94232f4e9955c49f2bbd23a831823c134" + integrity sha512-2+bFlIyUHhtsd3H1K0vKjLgP0ZtlctSCVRuIsDJhH3hgPMW5J2KMqTO8Va8gHfnNjWM4H+ZQtFGCPR19VHlVPA== dependencies: - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/types" "^1.1.1" - "@backstage/version-bridge" "^1.0.8" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/types" "^1.2.2" + zod "^3.25.76 || ^4.0.0" + zod-validation-error "^4.0.2" + +"@backstage/frontend-app-api@^0.14.1": + version "0.14.1" + resolved "https://registry.yarnpkg.com/@backstage/frontend-app-api/-/frontend-app-api-0.14.1.tgz#be668ffbaca3ee1530a34b306aedd460e7e28b97" + integrity sha512-d01J9XfhTq1yBWPcUmlr6BfNPv4Ykb9zJFGTfDn3OtnCb06J3o3miENL8+V/CpW7COHa1trfWYvDDCI/7RJYbg== + dependencies: + "@backstage/config" "^1.3.6" + "@backstage/core-app-api" "^1.19.4" + "@backstage/core-plugin-api" "^1.12.2" + "@backstage/errors" "^1.2.7" + "@backstage/frontend-defaults" "^0.3.6" + "@backstage/frontend-plugin-api" "^0.13.4" + "@backstage/types" "^1.2.2" + "@backstage/version-bridge" "^1.0.11" + lodash "^4.17.21" + zod "^3.25.76" + +"@backstage/frontend-app-api@^0.16.2": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@backstage/frontend-app-api/-/frontend-app-api-0.16.2.tgz#9239fb6510c2cd4cfa10e189554a718319cd31b8" + integrity sha512-ldIhomMBbrnLoJhvqVhfOToLy3gjmKb9vKMnyx1px6ZqpYb2PjDSj/24R0dft7obh6/Q/i8Bu2MlyRrAWag6zQ== + dependencies: + "@backstage/config" "^1.3.7" + "@backstage/core-app-api" "^1.20.0" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/errors" "^1.3.0" + "@backstage/filter-predicates" "^0.1.2" + "@backstage/frontend-defaults" "^0.5.1" + "@backstage/frontend-plugin-api" "^0.16.0" + "@backstage/types" "^1.2.2" + "@backstage/version-bridge" "^1.0.12" + lodash "^4.17.21" + zod "^3.25.76 || ^4.0.0" + +"@backstage/frontend-defaults@^0.3.6": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@backstage/frontend-defaults/-/frontend-defaults-0.3.6.tgz#2c365952e56b9ae1ea4796d38f0924d71f21d113" + integrity sha512-oZjBc/9J2IGuS2smsXvRqR/zzkseUH/zJG9oUK53PW+Oy5fgj0YJbAVRQRnTGlLjNUSO1zwKa1ASwSi+Bnpwmg== + dependencies: + "@backstage/config" "^1.3.6" + "@backstage/core-components" "^0.18.6" + "@backstage/errors" "^1.2.7" + "@backstage/frontend-app-api" "^0.14.1" + "@backstage/frontend-plugin-api" "^0.13.4" + "@backstage/plugin-app" "^0.3.5" + "@react-hookz/web" "^24.0.0" + +"@backstage/frontend-defaults@^0.5.0", "@backstage/frontend-defaults@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@backstage/frontend-defaults/-/frontend-defaults-0.5.1.tgz#08e4e2444f398d276f64e4cdbd7fd743dae1416e" + integrity sha512-tfriJSVBG52T0u7WFTa9xzq1YDcwuUNGl8ccatpF/A6eiucwWE5ckQN4gZx8kTWfWRc6Nzz9H7WZVjmcW37azg== + dependencies: + "@backstage/config" "^1.3.7" + "@backstage/core-components" "^0.18.9" + "@backstage/errors" "^1.3.0" + "@backstage/frontend-app-api" "^0.16.2" + "@backstage/frontend-plugin-api" "^0.16.0" + "@backstage/plugin-app" "^0.4.3" + "@react-hookz/web" "^24.0.0" + +"@backstage/frontend-plugin-api@^0.12.0", "@backstage/frontend-plugin-api@^0.12.1": + version "0.12.1" + resolved "https://registry.yarnpkg.com/@backstage/frontend-plugin-api/-/frontend-plugin-api-0.12.1.tgz#9e82a626665e5a8c54adb22bb49deea4f702d309" + integrity sha512-BhnQrsr28OsG3sXOWdXFiMpU7IYXPpCqtnxb/d7uCdMzegCLURXPScVcJLE1oVUcIXvId+ODzGjG6Eic5uqtvQ== + dependencies: + "@backstage/core-components" "^0.18.2" + "@backstage/core-plugin-api" "^1.11.1" + "@backstage/types" "^1.2.2" + "@backstage/version-bridge" "^1.0.11" "@material-ui/core" "^4.12.4" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" lodash "^4.17.21" zod "^3.22.4" zod-to-json-schema "^3.21.4" +"@backstage/frontend-plugin-api@^0.13.3", "@backstage/frontend-plugin-api@^0.13.4": + version "0.13.4" + resolved "https://registry.yarnpkg.com/@backstage/frontend-plugin-api/-/frontend-plugin-api-0.13.4.tgz#8b965a06934539db55dc85de495839883aa5708b" + integrity sha512-IkzS5ltuxj5cl4OG/6FWZmkr7lcA9rZ4j1LaACA8W9//Av7lYVagvyqK2kuQfQmo2burzVTQMj25YV08h+QX7A== + dependencies: + "@backstage/errors" "^1.2.7" + "@backstage/types" "^1.2.2" + "@backstage/version-bridge" "^1.0.11" + zod "^3.25.76" + zod-to-json-schema "^3.25.1" + +"@backstage/frontend-plugin-api@^0.15.0", "@backstage/frontend-plugin-api@^0.15.1": + version "0.15.1" + resolved "https://registry.yarnpkg.com/@backstage/frontend-plugin-api/-/frontend-plugin-api-0.15.1.tgz#fe1768086576565f70ff2f356db7c4cc74bae8c0" + integrity sha512-WaVRhR0c/HIimxtn6s3AIPSLKOEyG9AG2vIndgbgn1hHp6Uonx7Avv+UjuHmZS6CgQiDtaR+yAsmvy0HUWRV0g== + dependencies: + "@backstage/errors" "^1.2.7" + "@backstage/filter-predicates" "^0.1.1" + "@backstage/types" "^1.2.2" + "@backstage/version-bridge" "^1.0.12" + zod "^3.25.76 || ^4.0.0" + zod-to-json-schema "^3.25.1" + +"@backstage/frontend-plugin-api@^0.16.0", "@backstage/frontend-plugin-api@^0.16.2": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@backstage/frontend-plugin-api/-/frontend-plugin-api-0.16.2.tgz#e6cb4bd9c64fcdaf11bcb1fad61f114981880a83" + integrity sha512-G6WYcQZPaO1roK/yMu3WPVT3Z/M3fE/8YsfUV/mP+ouMRZGRanKRfDyiA80MEje3c78KMGqAbrInHiMJ/HN05A== + dependencies: + "@backstage/errors" "^1.3.0" + "@backstage/filter-predicates" "^0.1.2" + "@backstage/types" "^1.2.2" + "@backstage/version-bridge" "^1.0.12" + "@standard-schema/spec" "^1.1.0" + zod "^4.0.0" + zod-to-json-schema "^3.25.1" + +"@backstage/frontend-test-utils@^0.4.5": + version "0.4.5" + resolved "https://registry.yarnpkg.com/@backstage/frontend-test-utils/-/frontend-test-utils-0.4.5.tgz#0c3ed9e4584b1c9d3ea864ad6f64711640eab58b" + integrity sha512-5B9zvB5IiRUr5UaP3To/JQC+AcgLGFiZzaIoy7+sMSvgKWVrlwK7EtVOLB9B4/4peJIPCOMzuXWkUJaP3jSK9A== + dependencies: + "@backstage/config" "^1.3.6" + "@backstage/frontend-app-api" "^0.14.1" + "@backstage/frontend-plugin-api" "^0.13.4" + "@backstage/plugin-app" "^0.3.5" + "@backstage/plugin-app-react" "^0.1.0" + "@backstage/test-utils" "^1.7.14" + "@backstage/types" "^1.2.2" + "@backstage/version-bridge" "^1.0.11" + zod "^3.25.76" + "@backstage/integration-aws-node@^0.1.12": version "0.1.12" resolved "https://registry.npmmirror.com/@backstage/integration-aws-node/-/integration-aws-node-0.1.12.tgz#d2c5ac7c81cd6c2733dcfd24544ad21931ea815d" @@ -3272,75 +3431,111 @@ "@backstage/config" "^1.2.0" "@backstage/errors" "^1.2.4" -"@backstage/integration-react@^1.1.28", "@backstage/integration-react@^1.1.29": - version "1.1.29" - resolved "https://registry.yarnpkg.com/@backstage/integration-react/-/integration-react-1.1.29.tgz#6fe02bc88c64a7584a09b66cc321597e525ef347" - integrity sha512-Dns8BPZkhtEZnM9fhBX/bI2YvjvwZ0W1DIiGQOXOYEDCYy68YFGWD3qn3HEtsRhTSWecX8eUatL+VVLqRIYy9g== +"@backstage/integration-aws-node@^0.1.17", "@backstage/integration-aws-node@^0.1.19", "@backstage/integration-aws-node@^0.1.20", "@backstage/integration-aws-node@^0.1.21": + version "0.1.21" + resolved "https://registry.yarnpkg.com/@backstage/integration-aws-node/-/integration-aws-node-0.1.21.tgz#bef87788291c14a51c02ba7af0b783d1b1e86a90" + integrity sha512-aqeol4gA/NP2uNcPWeBMHl/z2W7b44rUveM365SVMCtVmX7izG1f0AmU5e7RuRQ1784EZuGdy5kZlvp93kaoGA== + dependencies: + "@aws-sdk/client-sts" "^3.350.0" + "@aws-sdk/credential-provider-node" "^3.350.0" + "@aws-sdk/credential-providers" "^3.350.0" + "@aws-sdk/types" "^3.347.0" + "@aws-sdk/util-arn-parser" "^3.310.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + +"@backstage/integration-react@^1.2.14", "@backstage/integration-react@^1.2.16", "@backstage/integration-react@^1.2.17": + version "1.2.17" + resolved "https://registry.yarnpkg.com/@backstage/integration-react/-/integration-react-1.2.17.tgz#a8e304a9768dfe3c328355e5f104ad41cc379c63" + integrity sha512-QOyCGZXz2GUVrZexfxD9R+101VJEVigd9yYxZqnakGOg6PiicJjRW3nA+5gGpSCjSegp+HmO56Vg1WzyRldOvA== dependencies: - "@backstage/config" "^1.2.0" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/integration" "^1.13.0" + "@backstage/config" "^1.3.7" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/integration" "^2.0.1" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" - "@types/react" "^16.13.1 || ^17.0.0" -"@backstage/integration@^1.10.0", "@backstage/integration@^1.12.0", "@backstage/integration@^1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@backstage/integration/-/integration-1.13.0.tgz#c7f362c802bda8ecda374e9416cf9cb573d5fce1" - integrity sha512-mnzZb0vXQHbFM64HfLrYjnKxhucgkMz+E9ilwXg0XpdK0tlvq2n5RfAFz7BC717BI4l++1epiMFD9hyXAUtxHA== +"@backstage/integration@^1.15.0", "@backstage/integration@^1.18.0", "@backstage/integration@^1.18.2", "@backstage/integration@^1.20.0", "@backstage/integration@^1.20.1": + version "1.20.1" + resolved "https://registry.yarnpkg.com/@backstage/integration/-/integration-1.20.1.tgz#6a3b4eba069734d1abf2f779ce0b6c483051a35b" + integrity sha512-rfYMauJAq0BcEPcAm3em/NJC8Gvu3WzRfbgr3onEdjEc0/hEE2ffXmTcMSZykieltV3IAMHwfF2UBm0eV+hOhQ== dependencies: "@azure/identity" "^4.0.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" + "@azure/storage-blob" "^12.5.0" + "@backstage/config" "^1.3.6" + "@backstage/errors" "^1.2.7" "@octokit/auth-app" "^4.0.0" "@octokit/rest" "^19.0.3" cross-fetch "^4.0.0" - git-url-parse "^14.0.0" + git-url-parse "^15.0.0" + lodash "^4.17.21" + luxon "^3.0.0" + +"@backstage/integration@^2.0.0", "@backstage/integration@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@backstage/integration/-/integration-2.0.1.tgz#6090c4e707891a214455f6e239c981081faf708f" + integrity sha512-0kXwHhD1XnJapZweO0c4wK+VDpmZtml3vn1s43dsyy5emD7vZscuL/GmJjGWuoqVtSoQV66seM8C+pICTNo9Vw== + dependencies: + "@azure/identity" "^4.0.0" + "@azure/storage-blob" "^12.5.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@octokit/auth-app" "^4.0.0" + "@octokit/rest" "^19.0.3" + cross-fetch "^4.0.0" + git-url-parse "^15.0.0" lodash "^4.17.21" luxon "^3.0.0" + p-throttle "^4.1.1" -"@backstage/plugin-api-docs@^0.11.6": - version "0.11.7" - resolved "https://registry.yarnpkg.com/@backstage/plugin-api-docs/-/plugin-api-docs-0.11.7.tgz#189edf9de81d5392fa35ffc453a0e35b79a3749b" - integrity sha512-48fOzG6nBTgiCWkjSW/v7hhsaH8KcqT5PZqjiwtrGvoGrtzF9PypHJ0YtfGZD0lTysn6maMzoTK6CgPfaiVsLg== - dependencies: - "@asyncapi/react-component" "1.3.1" - "@backstage/catalog-model" "^1.5.0" - "@backstage/core-compat-api" "^0.2.7" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/frontend-plugin-api" "^0.6.7" - "@backstage/plugin-catalog" "^1.21.1" - "@backstage/plugin-catalog-common" "^1.0.25" - "@backstage/plugin-catalog-react" "^1.12.2" - "@backstage/plugin-permission-react" "^0.4.24" - "@graphiql/react" "^0.20.0" +"@backstage/module-federation-common@^0.1.0", "@backstage/module-federation-common@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@backstage/module-federation-common/-/module-federation-common-0.1.3.tgz#a8d3f513e92a4db3256efd520179212d04940fd5" + integrity sha512-EUvMJ17/fCKtrmhjx9rad11pYAJnAK9SfdOYGCkMs4rhXeKWVuESzFULo1MdFi0MSkGAGOyEPIHScvqTt3juJQ== + dependencies: + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/types" "^1.2.2" + "@module-federation/runtime" "^0.21.6" + +"@backstage/plugin-api-docs@^0.13.5": + version "0.13.5" + resolved "https://registry.yarnpkg.com/@backstage/plugin-api-docs/-/plugin-api-docs-0.13.5.tgz#f364ffb323c113738d6f7d93a746651541177fd8" + integrity sha512-127bpz+yvfBVSCLcujTrM5+2EKWqgiNMLN99PczCdpW9wZgo0RyC7FKB9/EXgWkUzhi4ZAe0ho9TytJoVDzUaQ== + dependencies: + "@asyncapi/react-component" "^2.3.3" + "@backstage/catalog-model" "^1.7.7" + "@backstage/core-components" "^0.18.8" + "@backstage/core-plugin-api" "^1.12.4" + "@backstage/frontend-plugin-api" "^0.15.0" + "@backstage/plugin-catalog" "^2.0.0" + "@backstage/plugin-catalog-common" "^1.1.8" + "@backstage/plugin-catalog-react" "^2.1.0" + "@backstage/plugin-permission-react" "^0.4.41" + "@backstage/ui" "^0.13.0" + "@graphiql/react" "0.29.0" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.61" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" - graphiql "3.1.1" + "@remixicon/react" "^4.6.0" + graphiql "^3.9.0" graphql "^16.0.0" - graphql-config "^5.0.2" graphql-ws "^5.4.1" - isomorphic-form-data "^2.0.0" - swagger-ui-react "^5.0.0" + swagger-ui-react "^5.27.1" -"@backstage/plugin-app-backend@^0.3.70": - version "0.3.71" - resolved "https://registry.yarnpkg.com/@backstage/plugin-app-backend/-/plugin-app-backend-0.3.71.tgz#f78ab067133bca7fdb8fc3b632a9096a5e6ed3bb" - integrity sha512-lth5qvf5cUpTyDJoSHAR/ZnL8yjx5O818O1DwduIAs8mgG4Z3ZQ+VtMzFXxD4pi0yscbMKbiMJtP8yEFnUKIyQ== - dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config" "^1.2.0" - "@backstage/config-loader" "^1.8.1" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-app-node" "^0.1.22" - "@backstage/plugin-auth-node" "^0.4.17" - "@backstage/types" "^1.1.1" - "@types/express" "^4.17.6" - express "^4.17.1" +"@backstage/plugin-app-backend@^0.5.12": + version "0.5.13" + resolved "https://registry.yarnpkg.com/@backstage/plugin-app-backend/-/plugin-app-backend-0.5.13.tgz#1e0363d98d3a043c62d48d5eb9219909fcda45cf" + integrity sha512-dZZzyMYoyRuE1epYf66wMgrYUiB0W6q/0WYOFzx5KZ8tvWWYnA/DZHExwRtCNJvte3oJLKBFfWuwkgf8ihAWtQ== + dependencies: + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/config" "^1.3.7" + "@backstage/config-loader" "^1.10.10" + "@backstage/errors" "^1.3.0" + "@backstage/plugin-app-node" "^0.1.44" + "@backstage/plugin-auth-node" "^0.7.0" + "@backstage/types" "^1.2.2" + express "^4.22.0" express-promise-router "^4.1.0" fs-extra "^11.2.0" globby "^11.0.0" @@ -3350,1066 +3545,1071 @@ luxon "^3.0.0" yn "^4.0.0" -"@backstage/plugin-app-node@^0.1.22": - version "0.1.22" - resolved "https://registry.yarnpkg.com/@backstage/plugin-app-node/-/plugin-app-node-0.1.22.tgz#4782cb4d171cd77d1de732d3c0f56a55d8623ebf" - integrity sha512-2WnQ2EPyOoawy0e6oTQ2JLMRdY+nXkyXBTpcxwehyPtMzWy52PceYct9NJgimm6/E+NfTgQqMChOXxS3il8PfQ== +"@backstage/plugin-app-node@^0.1.44": + version "0.1.44" + resolved "https://registry.yarnpkg.com/@backstage/plugin-app-node/-/plugin-app-node-0.1.44.tgz#84391d07a5f7d3ced8e0c207d74b7d99505888a5" + integrity sha512-If2crOPJ2C1AOJZNJ1LzYEpFB0wcaC9rjKB39Cp6PZnjkhvHQjrd1f8EwqJ7RT2eyv94wIAhB2wU2nloNvZDwQ== dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config-loader" "^1.8.1" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/config-loader" "^1.10.10" "@types/express" "^4.17.6" - express "^4.17.1" + express "^4.22.0" fs-extra "^11.2.0" -"@backstage/plugin-auth-backend-module-atlassian-provider@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-atlassian-provider/-/plugin-auth-backend-module-atlassian-provider-0.2.3.tgz#9a89d66d567464a868001928b527c7a739c496ad" - integrity sha512-I7FYEsn1+yLQvNYHEkp9Wa6Pl2XnM6xESvBDzTFsHXDwQyQLQ5SkZNdKUONBhyVxT6kxQlJs/RYgeVt/5l6wuw== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/plugin-auth-node" "^0.4.17" - express "^4.18.2" - passport "^0.7.0" - passport-atlassian-oauth2 "^2.1.0" - -"@backstage/plugin-auth-backend-module-aws-alb-provider@^0.1.14": - version "0.1.14" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-aws-alb-provider/-/plugin-auth-backend-module-aws-alb-provider-0.1.14.tgz#039c2ab89b8b3c4a5d9086c188cf3be0910be534" - integrity sha512-EHlgXQpMUweJ0zokuxmc0TBYlaEiTuGuif0wvj9zOJux5CRPrcmEAsxBr9BDNfxMQ+hGSz0Hx4oi/f/HTMXyHA== - dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-auth-backend" "^0.22.9" - "@backstage/plugin-auth-node" "^0.4.17" - jose "^5.0.0" - node-cache "^5.1.2" - node-fetch "^2.6.7" - -"@backstage/plugin-auth-backend-module-azure-easyauth-provider@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-azure-easyauth-provider/-/plugin-auth-backend-module-azure-easyauth-provider-0.1.5.tgz#9211f4f9805549ee4c2514efd1a52656f943d0ff" - integrity sha512-0FD7bdiP57UHOgZ+4vaoGQGRp1b5V0z4NzHl78Yv0B1qJ05ap84ZkJsC1AV6QiA9tOP5FESIpcnJLXNDHUDc3Q== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/catalog-model" "^1.5.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-auth-node" "^0.4.17" - "@types/passport" "^1.0.16" - express "^4.19.2" - jose "^5.0.0" - passport "^0.7.0" - -"@backstage/plugin-auth-backend-module-bitbucket-provider@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-bitbucket-provider/-/plugin-auth-backend-module-bitbucket-provider-0.1.5.tgz#f0f1598635ed81134a42d4924aa02d3fe313eb90" - integrity sha512-ClcUWeK4uYzV/c37NOvXmYOuLMiQooEF89bElT23LI30KpIlTsySkniMkEkK0ZFGrQxQxxU6p3d/6SFUzb16NQ== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/plugin-auth-node" "^0.4.17" - express "^4.18.2" - passport "^0.7.0" - passport-bitbucket-oauth2 "^0.1.2" - -"@backstage/plugin-auth-backend-module-cloudflare-access-provider@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-cloudflare-access-provider/-/plugin-auth-backend-module-cloudflare-access-provider-0.1.5.tgz#96d4df1389eeae7e1df1b3c95178db455b3bcb32" - integrity sha512-84Rx3KKLU5QFvV1Gw5C6VBr8BJVRZq21G4Eg/c71XTJpIEXFJlZQyT4mIDlft/b1kKSo7TmThKKqg6Mf6S9iSw== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-auth-node" "^0.4.17" - express "^4.18.2" - jose "^5.0.0" - node-fetch "^2.6.7" - -"@backstage/plugin-auth-backend-module-gcp-iap-provider@^0.2.17": - version "0.2.17" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-gcp-iap-provider/-/plugin-auth-backend-module-gcp-iap-provider-0.2.17.tgz#082c39f91827acfaa367dcc4e81ec95911c57954" - integrity sha512-0eGyeNFlN2LKdn5MWOGkRVsq5QT8Cgjv9vjii2F6JdHvUJgDOTwItKSDO1QhOEY6t1EZeDhZYytofeRavW+E5w== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-auth-node" "^0.4.17" - "@backstage/types" "^1.1.1" - google-auth-library "^9.0.0" - -"@backstage/plugin-auth-backend-module-github-provider@^0.1.19": - version "0.1.19" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-github-provider/-/plugin-auth-backend-module-github-provider-0.1.19.tgz#11b3d9b5ae570f586ec217e9b41f51538bca183a" - integrity sha512-1Wls9RwXGb90SN52HJqbODjswfLmLzCdvIU78a7aBOvHjl2oQ1pAlz4tglZEPqKBlUci9Sw0ycVnjMWO5kimMA== +"@backstage/plugin-app-react@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@backstage/plugin-app-react/-/plugin-app-react-0.1.0.tgz#b420759b5ac92951d47854d182c85bb201e2b5f2" + integrity sha512-9lVx7Gon5uRmIAkdSTNH0TrRdE1qx4UB7KH4uHWt07ARDNWUyXIHe94wcnu5NSlkqqt6VriomYju5cLCG8cKdw== dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/plugin-auth-node" "^0.4.17" - passport-github2 "^0.1.12" + "@backstage/core-plugin-api" "^1.12.1" + "@backstage/frontend-plugin-api" "^0.13.3" + "@material-ui/core" "^4.9.13" -"@backstage/plugin-auth-backend-module-gitlab-provider@^0.1.19": - version "0.1.19" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-gitlab-provider/-/plugin-auth-backend-module-gitlab-provider-0.1.19.tgz#e8296e566cb4be08529b81156402c90d3c4dc352" - integrity sha512-qzNWNgneZitqYp8X2Bk6L1WYPZrzGeg5yzxm0aB79DZIaALuhqxANEVfUf+fsDj28HnzNVEU1oyoabWcNMhe3g== +"@backstage/plugin-app-react@^0.2.1", "@backstage/plugin-app-react@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@backstage/plugin-app-react/-/plugin-app-react-0.2.2.tgz#0da44764fd6d7d3cec92ced1373d2d869c8eb1e8" + integrity sha512-Jou3h1FiWyzIBU/868dePVHjTMqxEX4j23C2HsejKaJhsTAjpOZFAhfIm3qBr60SMuiCFnFE6oXOnEb4bCX/zQ== dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/plugin-auth-node" "^0.4.17" - express "^4.18.2" - passport "^0.7.0" - passport-gitlab2 "^5.0.0" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/frontend-plugin-api" "^0.16.0" + "@material-ui/core" "^4.9.13" -"@backstage/plugin-auth-backend-module-google-provider@^0.1.19": - version "0.1.19" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-google-provider/-/plugin-auth-backend-module-google-provider-0.1.19.tgz#fd557b396e2d69eb01ecb2f1a722781fcaf153ad" - integrity sha512-yk6QM7bGLZWlps9N9oG1ZESnHS3YKGj0jB08ioluz3n+0ifmIRf6YoZJpTDy+fKzwtJ2KLyJ0qb+LpEdTYdDrw== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/plugin-auth-node" "^0.4.17" - google-auth-library "^9.0.0" - passport-google-oauth20 "^2.0.0" +"@backstage/plugin-app@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@backstage/plugin-app/-/plugin-app-0.3.5.tgz#b43c8d900532dc9a50bab2d47e128b4d643386d8" + integrity sha512-CYrCS1/9u463qU/Nk9TuIc+9mnAb6hcuVQZWqlpwITkm6uh5+oe3h16+KRGrC7JUgsPUtFYtDxNhSNI5taSfXQ== + dependencies: + "@backstage/core-components" "^0.18.6" + "@backstage/core-plugin-api" "^1.12.2" + "@backstage/frontend-plugin-api" "^0.13.4" + "@backstage/integration-react" "^1.2.14" + "@backstage/plugin-app-react" "^0.1.0" + "@backstage/plugin-permission-react" "^0.4.39" + "@backstage/theme" "^0.7.1" + "@backstage/types" "^1.2.2" + "@backstage/version-bridge" "^1.0.11" + "@material-ui/core" "^4.9.13" + "@material-ui/icons" "^4.9.1" + "@material-ui/lab" "^4.0.0-alpha.61" + "@react-hookz/web" "^24.0.0" + react-use "^17.2.4" + zod "^3.25.76" + +"@backstage/plugin-app@^0.4.3": + version "0.4.5" + resolved "https://registry.yarnpkg.com/@backstage/plugin-app/-/plugin-app-0.4.5.tgz#e168bff878796787c4c08152f9ea47aae0eb97c9" + integrity sha512-Y9L1r1HEn9f6oAKMPDZQ373bBWif6UtI3qQgW0C8vzlocwnjT+CsW5cadxl9pZQqOGP2TXhW4l/nFeDOwQy+bw== + dependencies: + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/filter-predicates" "^0.1.2" + "@backstage/frontend-plugin-api" "^0.16.2" + "@backstage/integration-react" "^1.2.17" + "@backstage/plugin-app-react" "^0.2.2" + "@backstage/plugin-permission-react" "^0.5.0" + "@backstage/theme" "^0.7.3" + "@backstage/types" "^1.2.2" + "@backstage/ui" "^0.14.2" + "@backstage/version-bridge" "^1.0.12" + "@material-ui/core" "^4.9.13" + "@material-ui/icons" "^4.9.1" + "@material-ui/lab" "^4.0.0-alpha.61" + "@react-hookz/web" "^24.0.0" + "@remixicon/react" "^4.6.0" + motion "^12.0.0" + react-aria "~3.48.0" + react-stately "~3.46.0" + react-use "^17.2.4" + zen-observable "^0.10.0" + zod "^4.0.0" -"@backstage/plugin-auth-backend-module-guest-provider@^0.1.7": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-guest-provider/-/plugin-auth-backend-module-guest-provider-0.1.8.tgz#a7b4ede29778f4eea9029391016ccbff24651b90" - integrity sha512-mNkwovCGROgZJto0WMhJxSqRrvW3BctizNwEtmD+PTnbZ1i81hFyiWOEUF6ui8mdfFxZfA+ULx2tdjDlIcOvMg== +"@backstage/plugin-auth-backend-module-guest-provider@^0.2.17": + version "0.2.18" + resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-guest-provider/-/plugin-auth-backend-module-guest-provider-0.2.18.tgz#91ef0a712bfdae9fd2e883d65ef99653ca741bf5" + integrity sha512-nCq2MynGx22JWFcreJ+ZNUfqHfIrFfpav5cpvSQGRKKuWWzmsUwhbUghkroulcgq4MIZtiBhQGHMSnAYU3veCw== dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/catalog-model" "^1.5.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-auth-node" "^0.4.17" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/errors" "^1.3.0" + "@backstage/plugin-auth-node" "^0.7.0" passport-oauth2 "^1.7.0" -"@backstage/plugin-auth-backend-module-microsoft-provider@^0.1.17": - version "0.1.17" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-microsoft-provider/-/plugin-auth-backend-module-microsoft-provider-0.1.17.tgz#c7906514637d134398e7d738c8da75ee834a5caa" - integrity sha512-0ejMj78R9Bo0UnW306LF36pPpFwOZDZBn6hhg6B+83TsEJb3U+Xa4I+hxGY656m2Xi/yWHphR8k3tikdeiCUsg== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/plugin-auth-node" "^0.4.17" - express "^4.18.2" - jose "^5.0.0" - lodash "^4.17.21" - node-fetch "^2.6.7" - passport "^0.7.0" - passport-microsoft "^1.0.0" - -"@backstage/plugin-auth-backend-module-oauth2-provider@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-oauth2-provider/-/plugin-auth-backend-module-oauth2-provider-0.2.3.tgz#d4106a93e28b4723f3725fdf9405f765b3c805a7" - integrity sha512-zTa92kTMReWF5E+bWFGICZtsmbdQxusuUgDrX4jrkrw16LXCJHWLzELxqwlCFaev0t59579TZGdXSTaBUGP5Tg== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/plugin-auth-node" "^0.4.17" - passport "^0.7.0" - passport-oauth2 "^1.6.1" - -"@backstage/plugin-auth-backend-module-oauth2-proxy-provider@^0.1.15": - version "0.1.15" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-oauth2-proxy-provider/-/plugin-auth-backend-module-oauth2-proxy-provider-0.1.15.tgz#6059d5217625be5a9076718f75eb674f7c4a7d2e" - integrity sha512-1Qon9Fwadj8R93Gj6qM11ZClLymCZF8BfAtdna8Xz+7/HLBprnKuDqwqAsI8SuF6sOq3coyUWlam6FHseyMuTA== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-auth-node" "^0.4.17" - jose "^5.0.0" - -"@backstage/plugin-auth-backend-module-oidc-provider@^0.2.2", "@backstage/plugin-auth-backend-module-oidc-provider@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-oidc-provider/-/plugin-auth-backend-module-oidc-provider-0.2.3.tgz#51378041635876d4e7eedb5a9b101b661e6b015b" - integrity sha512-7DC575QXEXjHUHkkghYOwgrivWcMHApPBgbqCpWqvvytqgSa3+V8MixgfCOgpe7Zw0ewxp1YE14OqVYKOZElBw== - dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/plugin-auth-backend" "^0.22.9" - "@backstage/plugin-auth-node" "^0.4.17" - express "^4.18.2" +"@backstage/plugin-auth-backend-module-oidc-provider@^0.4.14": + version "0.4.15" + resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-oidc-provider/-/plugin-auth-backend-module-oidc-provider-0.4.15.tgz#5e2f806bdfb769a0cbfb52edd8aeb98bd4684aab" + integrity sha512-4pNRefRKLQKiP9+MJopFMs2auF88W3Puh0nY+lofphMIN6V50yeNnLhZCJYCSdfcwBTODdU7vQvg5htFOIfjbw== + dependencies: + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/config" "^1.3.7" + "@backstage/plugin-auth-backend" "^0.28.0" + "@backstage/plugin-auth-node" "^0.7.0" + "@backstage/types" "^1.2.2" + express "^4.22.0" openid-client "^5.5.0" passport "^0.7.0" - -"@backstage/plugin-auth-backend-module-okta-provider@^0.0.15": - version "0.0.15" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-okta-provider/-/plugin-auth-backend-module-okta-provider-0.0.15.tgz#83b5332126ac7d83eaaf07f4f6450d901ed9a986" - integrity sha512-sm0zh6b7z1SE6prqY6maoRc4sQ6mnx5paXlLTzXGy3F/a1tmjT7D+8Ht9Cuc3l4+eWDm/NGOkNORdQ9Gi/19Vw== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/plugin-auth-node" "^0.4.17" - "@davidzemon/passport-okta-oauth" "^0.0.5" - express "^4.18.2" - passport "^0.7.0" - -"@backstage/plugin-auth-backend-module-onelogin-provider@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-onelogin-provider/-/plugin-auth-backend-module-onelogin-provider-0.1.3.tgz#0b639623b68fba6316ee4d184301c7d424178b3f" - integrity sha512-14qgvlLxtNA3Um7U/7ZOq6rb8lfWRoDsqURvW7eHohuzXCG7VE1atxgjJx6qgny8Ez6lKSv/xwyUGlFOC6MSZA== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/plugin-auth-node" "^0.4.17" - express "^4.18.2" + zod "^3.25.76 || ^4.0.0" + +"@backstage/plugin-auth-backend@^0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend/-/plugin-auth-backend-0.27.3.tgz#12339f920272170fb2e38baa0074a17bd24df137" + integrity sha512-eHuM7qtaovZcuq1DfjxVRtT7SIq5O8V12KC4DbcHoN1E2l2rY3X3ThSeVHAW/oC5niQ+hT2xSxwb52tG0FSdzA== + dependencies: + "@backstage/backend-plugin-api" "^1.8.0" + "@backstage/catalog-model" "^1.7.7" + "@backstage/config" "^1.3.6" + "@backstage/errors" "^1.2.7" + "@backstage/plugin-auth-node" "^0.6.14" + "@backstage/plugin-catalog-node" "^2.1.0" + "@backstage/types" "^1.2.2" + "@google-cloud/firestore" "^7.0.0" + connect-session-knex "^4.0.0" + cookie-parser "^1.4.5" + express "^4.22.0" + express-promise-router "^4.1.0" + express-session "^1.17.1" + ipaddr.js "^2.3.0" + jose "^5.0.0" + knex "^3.0.0" + lodash "^4.17.21" + luxon "^3.0.0" + matcher "^4.0.0" + minimatch "^10.2.1" passport "^0.7.0" - passport-onelogin-oauth "^0.0.1" - -"@backstage/plugin-auth-backend@^0.22.8", "@backstage/plugin-auth-backend@^0.22.9": - version "0.22.9" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend/-/plugin-auth-backend-0.22.9.tgz#aaaf9daf42d388d40a49934237aa983034637255" - integrity sha512-B6qutaoDFn6arzJxpPNfNq/NSGZuIDYm68OJccuU6oChhbVnbqCb5xT3mFGwexHBqbkUe640bSEw/wKUPl7NXw== - dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-auth-backend-module-atlassian-provider" "^0.2.3" - "@backstage/plugin-auth-backend-module-aws-alb-provider" "^0.1.14" - "@backstage/plugin-auth-backend-module-azure-easyauth-provider" "^0.1.5" - "@backstage/plugin-auth-backend-module-bitbucket-provider" "^0.1.5" - "@backstage/plugin-auth-backend-module-cloudflare-access-provider" "^0.1.5" - "@backstage/plugin-auth-backend-module-gcp-iap-provider" "^0.2.17" - "@backstage/plugin-auth-backend-module-github-provider" "^0.1.19" - "@backstage/plugin-auth-backend-module-gitlab-provider" "^0.1.19" - "@backstage/plugin-auth-backend-module-google-provider" "^0.1.19" - "@backstage/plugin-auth-backend-module-microsoft-provider" "^0.1.17" - "@backstage/plugin-auth-backend-module-oauth2-provider" "^0.2.3" - "@backstage/plugin-auth-backend-module-oauth2-proxy-provider" "^0.1.15" - "@backstage/plugin-auth-backend-module-oidc-provider" "^0.2.3" - "@backstage/plugin-auth-backend-module-okta-provider" "^0.0.15" - "@backstage/plugin-auth-backend-module-onelogin-provider" "^0.1.3" - "@backstage/plugin-auth-node" "^0.4.17" - "@backstage/plugin-catalog-node" "^1.12.4" - "@backstage/types" "^1.1.1" + uuid "^11.0.0" + zod "^3.25.76 || ^4.0.0" + zod-validation-error "^5.0.0" + +"@backstage/plugin-auth-backend@^0.28.0": + version "0.28.0" + resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend/-/plugin-auth-backend-0.28.0.tgz#f6dbf682a27c96dc49aed2e5f099c2a6c55ce172" + integrity sha512-YbG2Jqa2h23Ak9E2TWHvs7OPi70gi/QAGOER5agfQmJP4Z5Md/vllBZFsMw7cc14AwrQGP4O1aYIWzhWFD1Vgg== + dependencies: + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/plugin-auth-node" "^0.7.0" + "@backstage/plugin-catalog-node" "^2.2.0" + "@backstage/types" "^1.2.2" "@google-cloud/firestore" "^7.0.0" - "@node-saml/passport-saml" "^4.0.4" - "@types/express" "^4.17.6" - "@types/passport" "^1.0.3" - compression "^1.7.4" connect-session-knex "^4.0.0" cookie-parser "^1.4.5" - cors "^2.8.5" - express "^4.17.1" + express "^4.22.0" express-promise-router "^4.1.0" express-session "^1.17.1" - fs-extra "^11.2.0" - google-auth-library "^9.0.0" + ipaddr.js "^2.3.0" jose "^5.0.0" knex "^3.0.0" lodash "^4.17.21" luxon "^3.0.0" - minimatch "^9.0.0" - morgan "^1.10.0" - node-cache "^5.1.2" - node-fetch "^2.6.7" - openid-client "^5.2.1" + matcher "^4.0.0" + minimatch "^10.2.1" passport "^0.7.0" - passport-auth0 "^1.4.3" - passport-github2 "^0.1.12" - passport-google-oauth20 "^2.0.0" - passport-microsoft "^1.0.0" - passport-oauth2 "^1.6.1" - passport-onelogin-oauth "^0.0.1" - uuid "^9.0.0" - winston "^3.2.1" - yn "^4.0.0" + uuid "^11.0.0" + zod "^3.25.76 || ^4.0.0" + zod-validation-error "^5.0.0" -"@backstage/plugin-auth-node@^0.4.12", "@backstage/plugin-auth-node@^0.4.16", "@backstage/plugin-auth-node@^0.4.17": - version "0.4.17" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-node/-/plugin-auth-node-0.4.17.tgz#1e890a31ba0795b0c51720282fc72c31c5b7cc2a" - integrity sha512-nNZPWPRMCfU0LoxV15bfClPUfZ8XbnKDC4VTMRGyXo37FdRI9uNvrSrZm++e0QKCR/xGfab377SByp/9jITKmQ== - dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/types" "^1.1.1" - "@types/express" "*" +"@backstage/plugin-auth-node@^0.5.2": + version "0.5.6" + resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-node/-/plugin-auth-node-0.5.6.tgz#1e2a55e95f5cd548e5f522682cd616383fa176cb" + integrity sha512-C3hI7gB0hQwc/NORjZYDB368UTbZe1g2md8LHfTLeIeuyoZyFGAODKZa0XCwLFAX99awttkVeuOjffNLR295Sw== + dependencies: + "@backstage/backend-common" "^0.25.0" + "@backstage/backend-plugin-api" "^1.1.1" + "@backstage/catalog-client" "^1.9.1" + "@backstage/catalog-model" "^1.7.3" + "@backstage/config" "^1.3.2" + "@backstage/errors" "^1.2.7" + "@backstage/types" "^1.2.1" + "@types/express" "^4.17.6" "@types/passport" "^1.0.3" express "^4.17.1" jose "^5.0.0" lodash "^4.17.21" - node-fetch "^2.6.7" passport "^0.7.0" winston "^3.2.1" zod "^3.22.4" zod-to-json-schema "^3.21.4" + zod-validation-error "^3.4.0" + +"@backstage/plugin-auth-node@^0.6.14", "@backstage/plugin-auth-node@^0.6.7", "@backstage/plugin-auth-node@^0.6.9": + version "0.6.14" + resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-node/-/plugin-auth-node-0.6.14.tgz#c8dcfb925d52be518fd5c1d375b612815977f652" + integrity sha512-kgUJ5yEJpE5M5KfMu424qPgqbvBbXzQtwid9mJBTl1U5SMAnUBWV5SgdK9erdFyYT+aWaTJPy2W2Lw1ttyR8Qg== + dependencies: + "@backstage/backend-plugin-api" "^1.8.0" + "@backstage/catalog-client" "^1.14.0" + "@backstage/catalog-model" "^1.7.7" + "@backstage/config" "^1.3.6" + "@backstage/errors" "^1.2.7" + "@backstage/types" "^1.2.2" + "@types/express" "^4.17.6" + "@types/passport" "^1.0.3" + express "^4.22.0" + jose "^5.0.0" + lodash "^4.17.21" + passport "^0.7.0" + zod "^3.25.76 || ^4.0.0" + zod-to-json-schema "^3.25.1" + zod-validation-error "^4.0.2" -"@backstage/plugin-auth-react@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-react/-/plugin-auth-react-0.1.4.tgz#891cff224d05fdc6d223e1102b845bccf59a99a6" - integrity sha512-Mpyp+gYNGTNC41LPA8w6iVnfKDWCUWdrOB9e249q8Uw1FfREwbBoZNRnxgMOgscwyBvG1feaPfvuN/loXMQjvg== - dependencies: - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/errors" "^1.2.4" +"@backstage/plugin-auth-node@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-node/-/plugin-auth-node-0.7.0.tgz#2c3d8c0c33dc4b9d311a863d8b710d9864a5e00f" + integrity sha512-LYbS07GaWhHvfh/dq3OPDYZrHeyxCex1g86uHPPx9S2R1ZstRab1YEb3SiJYharhm6BnwUQ+83RbQVhlRAaPbA== + dependencies: + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-client" "^1.15.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/types" "^1.2.2" + "@types/express" "^4.17.6" + "@types/passport" "^1.0.3" + express "^4.22.0" + jose "^5.0.0" + lodash "^4.17.21" + passport "^0.7.0" + zod "^3.25.76 || ^4.0.0" + zod-to-json-schema "^3.25.1" + zod-validation-error "^4.0.2" + +"@backstage/plugin-auth-react@^0.1.26": + version "0.1.26" + resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-react/-/plugin-auth-react-0.1.26.tgz#f48ad08135b0eee196730c11475cb63fe0971a82" + integrity sha512-ds+FRpp08IwMABWR2hrj5AUqyEpDByeooVTf39v4UukSAG9P6slBrLj75vetLTAUxtjXYAbRyjdliJr/RkvRmQ== + dependencies: + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/errors" "^1.3.0" "@material-ui/core" "^4.9.13" "@react-hookz/web" "^24.0.0" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" -"@backstage/plugin-bitbucket-cloud-common@^0.2.21": - version "0.2.21" - resolved "https://registry.yarnpkg.com/@backstage/plugin-bitbucket-cloud-common/-/plugin-bitbucket-cloud-common-0.2.21.tgz#56fd47171fc45b90c5b828967aaf101cca7d3c22" - integrity sha512-f2r/VF1S3LyhCiWd0gp34PiopRk8siznDYochxk/4Q8CTZlBSpFHU8lWCEWK0O+XH/sIVumlCHsuca4KjqMndA== +"@backstage/plugin-catalog-backend-module-gitlab@^0.8.0": + version "0.8.2" + resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-backend-module-gitlab/-/plugin-catalog-backend-module-gitlab-0.8.2.tgz#96b0413caa719b4775c562bb31e9bf27b937f65d" + integrity sha512-OoAxFb3dcSw4PHZblJ+3+u8F37CA+yMT+msBhtCWUmtNFBP5YHoCluC2qu/ZwOmGoMIh0YjswZqSUZvU6pjPbw== + dependencies: + "@backstage/backend-defaults" "^0.17.0" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/integration" "^2.0.1" + "@backstage/plugin-catalog-common" "^1.1.9" + "@backstage/plugin-catalog-node" "^2.2.0" + "@backstage/plugin-events-node" "^0.4.21" + "@gitbeaker/rest" "^40.0.3" + lodash "^4.17.21" + node-fetch "^2.7.0" + uuid "^11.0.0" + +"@backstage/plugin-catalog-backend-module-scaffolder-entity-model@^0.2.18": + version "0.2.19" + resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-backend-module-scaffolder-entity-model/-/plugin-catalog-backend-module-scaffolder-entity-model-0.2.19.tgz#d133c9076ea84637e894175a168ca79b1f38b971" + integrity sha512-60Vk3sDl7SeiHDUdvCTeY1ZPzZz31OTDyxiZuSe2FHNaVCZN156LGKmd8K9nUNLJmdKUD8tSlMxqvwIyt3CEgA== dependencies: - "@backstage/integration" "^1.13.0" - cross-fetch "^4.0.0" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/plugin-catalog-common" "^1.1.9" + "@backstage/plugin-catalog-node" "^2.2.0" + "@backstage/plugin-scaffolder-common" "^2.1.0" -"@backstage/plugin-catalog-backend-module-scaffolder-entity-model@^0.1.19", "@backstage/plugin-catalog-backend-module-scaffolder-entity-model@^0.1.20": - version "0.1.20" - resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-backend-module-scaffolder-entity-model/-/plugin-catalog-backend-module-scaffolder-entity-model-0.1.20.tgz#c8059bdcf306b4e8fb883ac019f34b14d6dfbd07" - integrity sha512-MML2lV0ejmA611BcDZMgtQy+KbtypaksUzlHLzVjgQJO/xabozoub/DR510rh241kTXLRZZ5wSjnBaxYXlLnxw== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/catalog-model" "^1.5.0" - "@backstage/plugin-catalog-common" "^1.0.25" - "@backstage/plugin-catalog-node" "^1.12.4" - "@backstage/plugin-scaffolder-common" "^1.5.4" - -"@backstage/plugin-catalog-backend@^1.23.2": - version "1.24.0" - resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-backend/-/plugin-catalog-backend-1.24.0.tgz#50aeeac3e997edfc37cd9d8008fd6b7bf6400190" - integrity sha512-ioKDnGXByKlJOQ68Tqt9wol+xZTibPdRwbMLi32o8MKTyb2I/ySfNfO87cAI/DSdz9o/MF3NdH2uZkM4pOKtpw== - dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-openapi-utils" "^0.1.15" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/backend-tasks" "^0.5.27" - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.13.0" - "@backstage/plugin-catalog-common" "^1.0.25" - "@backstage/plugin-catalog-node" "^1.12.4" - "@backstage/plugin-events-node" "^0.3.8" - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/plugin-permission-node" "^0.8.0" - "@backstage/plugin-search-backend-module-catalog" "^0.1.28" - "@backstage/types" "^1.1.1" - "@opentelemetry/api" "^1.3.0" - "@types/express" "^4.17.6" +"@backstage/plugin-catalog-backend@^3.5.0": + version "3.6.1" + resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-backend/-/plugin-catalog-backend-3.6.1.tgz#7e7731e9ad7e4f31eec49444ab124dbd57573356" + integrity sha512-QFQCs5u4/fs7/a3AITRacLLZQ0B2iYFYeFNVL0+ZIL7Spilg2z1b58xdQ2SHcLYFLgJCTsMXcKZJa52P3sSX2w== + dependencies: + "@backstage/backend-openapi-utils" "^0.6.8" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-client" "^1.15.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/filter-predicates" "^0.1.2" + "@backstage/integration" "^2.0.1" + "@backstage/plugin-catalog-common" "^1.1.9" + "@backstage/plugin-catalog-node" "^2.2.0" + "@backstage/plugin-events-node" "^0.4.21" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-permission-node" "^0.10.12" + "@backstage/types" "^1.2.2" + "@opentelemetry/api" "^1.9.0" + ajv "^8.10.0" + ajv-errors "^3.0.0" codeowners-utils "^1.0.2" core-js "^3.6.5" - express "^4.17.1" + express "^4.22.0" fast-json-stable-stringify "^2.1.0" fs-extra "^11.2.0" - git-url-parse "^14.0.0" - glob "^7.1.6" + git-url-parse "^15.0.0" + glob "^13.0.0" knex "^3.0.0" lodash "^4.17.21" luxon "^3.0.0" - minimatch "^9.0.0" - node-fetch "^2.6.7" + minimatch "^10.2.1" p-limit "^3.0.2" prom-client "^15.0.0" - uuid "^9.0.0" + uuid "^11.0.0" yaml "^2.0.0" yn "^4.0.0" - zod "^3.22.4" + zod "^3.25.76 || ^4.0.0" + zod-validation-error "^4.0.2" -"@backstage/plugin-catalog-common@^1.0.24", "@backstage/plugin-catalog-common@^1.0.25": - version "1.0.25" - resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-common/-/plugin-catalog-common-1.0.25.tgz#48f15c7887f72756f26a0ae13850e2e564187ec8" - integrity sha512-q9TyM0Lh/4T+B7kHdnOALtGVPD93pqGaShiAYOH+9UzTh0CceUHOSkE1QtQq6RrRS5Wqq9YD+ZXkEo+TwMuV+w== - dependencies: - "@backstage/catalog-model" "^1.5.0" - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/plugin-search-common" "^1.2.13" - -"@backstage/plugin-catalog-graph@^0.4.6": - version "0.4.7" - resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-graph/-/plugin-catalog-graph-0.4.7.tgz#58b9dcb956b638d76d75b14f8691e3dce149fec5" - integrity sha512-hECrFkTgi1x4Y5picTzBTLbPwWi8Dr4LB6SjHZBXjpY1ZLSXC2R62PmfdnouDjK0+mqKXR1uF21scKTBf/mq2Q== - dependencies: - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/core-compat-api" "^0.2.7" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/frontend-plugin-api" "^0.6.7" - "@backstage/plugin-catalog-react" "^1.12.2" - "@backstage/types" "^1.1.1" +"@backstage/plugin-catalog-common@^1.1.7", "@backstage/plugin-catalog-common@^1.1.8", "@backstage/plugin-catalog-common@^1.1.9": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-common/-/plugin-catalog-common-1.1.9.tgz#45d623b9debbfc03d77a0c53043d8ae02c80a2b0" + integrity sha512-HH4bDBHE5vjfWPXa0PBiwNq7kAlVebsWrgQaoPMsJ/M2UdgHEwX+PxBVa/D8Bf2NkPV2IYQlRorZIjzpFLXFkg== + dependencies: + "@backstage/catalog-model" "^1.8.0" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-search-common" "^1.2.23" + +"@backstage/plugin-catalog-graph@^0.6.0": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-graph/-/plugin-catalog-graph-0.6.3.tgz#7151ce011b3ebde49d0def0a9cbb21c534aa7468" + integrity sha512-kcJRk+vqSs32UMyD1g8WhUog8YWrV/JA/2jgTR8lwKltUx1TD+NLYYEJtvii6bwAe5nZqRykYDWWlmOSrzSL/Q== + dependencies: + "@backstage/catalog-client" "^1.15.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/frontend-plugin-api" "^0.16.2" + "@backstage/plugin-catalog-react" "^2.1.4" + "@backstage/types" "^1.2.2" + "@backstage/ui" "^0.14.2" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.61" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" + "@remixicon/react" "^4.6.0" classnames "^2.3.1" lodash "^4.17.15" p-limit "^3.1.0" qs "^6.9.4" react-use "^17.2.4" - -"@backstage/plugin-catalog-import@^0.12.0": - version "0.12.1" - resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-import/-/plugin-catalog-import-0.12.1.tgz#6f80fb1a7ca95a2b34f31da73396d5bef725324b" - integrity sha512-tflt2eNh1GCKPISGrB+Qz3yPKkxb1ETno5/3aK/yPn7R3g/xV9ZLHzpRBcFMwEgw8B5ZT25B4tUasOZljnbKQQ== - dependencies: - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/config" "^1.2.0" - "@backstage/core-compat-api" "^0.2.7" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/errors" "^1.2.4" - "@backstage/frontend-plugin-api" "^0.6.7" - "@backstage/integration" "^1.13.0" - "@backstage/integration-react" "^1.1.29" - "@backstage/plugin-catalog-common" "^1.0.25" - "@backstage/plugin-catalog-react" "^1.12.2" + zod "^4.0.0" + +"@backstage/plugin-catalog-import@^0.13.11", "@backstage/plugin-catalog-import@^0.13.7": + version "0.13.12" + resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-import/-/plugin-catalog-import-0.13.12.tgz#36a99fad68ff6030f83eb38d817ec47c8c188982" + integrity sha512-nSVe/fEwctO8fgIvIILgR+zIMKnO6V6WL3rG0Op6aAPGIUjoNYs5TH8WWOqvtK+mAnaSccXcXmNeEhuCZwGWuw== + dependencies: + "@backstage/catalog-client" "^1.15.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/config" "^1.3.7" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/errors" "^1.3.0" + "@backstage/frontend-plugin-api" "^0.16.0" + "@backstage/integration" "^2.0.1" + "@backstage/integration-react" "^1.2.17" + "@backstage/plugin-catalog-common" "^1.1.9" + "@backstage/plugin-catalog-react" "^2.1.2" + "@backstage/plugin-permission-react" "^0.5.0" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.61" "@octokit/rest" "^19.0.3" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" - git-url-parse "^14.0.0" + "@remixicon/react" "^4.6.0" + git-url-parse "^15.0.0" js-base64 "^3.6.0" lodash "^4.17.21" react-hook-form "^7.12.2" react-use "^17.2.4" yaml "^2.0.0" -"@backstage/plugin-catalog-node@^1.12.4": - version "1.12.4" - resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-node/-/plugin-catalog-node-1.12.4.tgz#ccc576cbd074a7549400b0918a258828d3d41742" - integrity sha512-kn25UgKQetcpiZikyFIOO9MxAVRS2d1JKJunbaXjY3ve0aoDU3/nBWZUCm/Z2tvYwHizgKOp4hE0mFcUyscEzw== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-catalog-common" "^1.0.25" - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/plugin-permission-node" "^0.8.0" - "@backstage/types" "^1.1.1" +"@backstage/plugin-catalog-node@^1.20.0": + version "1.20.1" + resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-node/-/plugin-catalog-node-1.20.1.tgz#d3a037fa3469947c9db88ab108ea1cacfd88d788" + integrity sha512-EkIk1mzHL3ffOgWXN1qC7gRxbraEQalAbsYzDaa57FdGM+Dabagdx18kC0L00AkGdUxzQk1GTL7bTo8Vptua3A== + dependencies: + "@backstage/backend-plugin-api" "^1.6.0" + "@backstage/catalog-client" "^1.12.1" + "@backstage/catalog-model" "^1.7.6" + "@backstage/errors" "^1.2.7" + "@backstage/plugin-catalog-common" "^1.1.7" + "@backstage/plugin-permission-common" "^0.9.3" + "@backstage/plugin-permission-node" "^0.10.7" + "@backstage/types" "^1.2.2" + lodash "^4.17.21" + yaml "^2.0.0" -"@backstage/plugin-catalog-react@^1.12.1", "@backstage/plugin-catalog-react@^1.12.2", "@backstage/plugin-catalog-react@^1.9.1": - version "1.12.2" - resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-react/-/plugin-catalog-react-1.12.2.tgz#0ec2c3fbe6a5970e498167e06fa55ddf83a2d939" - integrity sha512-YZ5Xec+wCR21lfnpUEtUIRnFGbGnpcqwzmXxcnF+n/sZydcgfig4d/N0gq2OuuTQnoX5O9NAhy+v5VdRzHNs5g== - dependencies: - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/errors" "^1.2.4" - "@backstage/frontend-plugin-api" "^0.6.7" - "@backstage/integration-react" "^1.1.29" - "@backstage/plugin-catalog-common" "^1.0.25" - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/plugin-permission-react" "^0.4.24" - "@backstage/types" "^1.1.1" - "@backstage/version-bridge" "^1.0.8" +"@backstage/plugin-catalog-node@^2.1.0", "@backstage/plugin-catalog-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-node/-/plugin-catalog-node-2.2.0.tgz#f0ce5c67338ce5b799b9d29bbbc19b3b9cbec42a" + integrity sha512-ovz1L4A5YWB/MdPi46E6fN5La5McbhAWHRk083ROJW7AO18hVxcCS3ZgjjRtnk6vROAtXC14jgBYbWqNQbmnHg== + dependencies: + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-client" "^1.15.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/errors" "^1.3.0" + "@backstage/plugin-catalog-common" "^1.1.9" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-permission-node" "^0.10.12" + "@backstage/types" "^1.2.2" + "@opentelemetry/api" "^1.9.0" + lodash "^4.17.21" + yaml "^2.0.0" + +"@backstage/plugin-catalog-react@^1.21.1", "@backstage/plugin-catalog-react@^1.21.2": + version "1.21.6" + resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-react/-/plugin-catalog-react-1.21.6.tgz#bd9cf0816d8c3596acdea0a67a190a1af4675895" + integrity sha512-miWlG4f+7PUiSB3FDL66ss3k92VAMIBlxbGjXziSVdqcf4bYuG+9hqOkXvetFkrInMe65gX7tNb9YL5dThTw3A== + dependencies: + "@backstage/catalog-client" "^1.12.1" + "@backstage/catalog-model" "^1.7.6" + "@backstage/core-compat-api" "^0.5.7" + "@backstage/core-components" "^0.18.6" + "@backstage/core-plugin-api" "^1.12.2" + "@backstage/errors" "^1.2.7" + "@backstage/frontend-plugin-api" "^0.13.4" + "@backstage/frontend-test-utils" "^0.4.5" + "@backstage/integration-react" "^1.2.14" + "@backstage/plugin-catalog-common" "^1.1.7" + "@backstage/plugin-permission-common" "^0.9.5" + "@backstage/plugin-permission-react" "^0.4.39" + "@backstage/types" "^1.2.2" + "@backstage/version-bridge" "^1.0.11" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.61" "@react-hookz/web" "^24.0.0" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" classnames "^2.2.6" lodash "^4.17.21" - material-ui-popup-state "^1.9.3" + material-ui-popup-state "^5.3.6" qs "^6.9.4" react-use "^17.2.4" yaml "^2.0.0" zen-observable "^0.10.0" -"@backstage/plugin-catalog@^1.21.0", "@backstage/plugin-catalog@^1.21.1": - version "1.21.1" - resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog/-/plugin-catalog-1.21.1.tgz#5e686811ef61ba67d90b2ea85ceaaded3faaf79d" - integrity sha512-B9Xdn0H8Uu6gkHNdjunD7XEmwN3OdSJvv9abeBsIItDfgk2cZvVlFhT8+7Xnqj+pRgLc3ppGGaLmz7cD2RN3Yw== - dependencies: - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/core-compat-api" "^0.2.7" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/errors" "^1.2.4" - "@backstage/frontend-plugin-api" "^0.6.7" - "@backstage/integration-react" "^1.1.29" - "@backstage/plugin-catalog-common" "^1.0.25" - "@backstage/plugin-catalog-react" "^1.12.2" - "@backstage/plugin-permission-react" "^0.4.24" - "@backstage/plugin-scaffolder-common" "^1.5.4" - "@backstage/plugin-search-common" "^1.2.13" - "@backstage/plugin-search-react" "^1.7.13" - "@backstage/types" "^1.1.1" +"@backstage/plugin-catalog-react@^2.1.0", "@backstage/plugin-catalog-react@^2.1.1", "@backstage/plugin-catalog-react@^2.1.2", "@backstage/plugin-catalog-react@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-react/-/plugin-catalog-react-2.1.4.tgz#8866680c9ecd38840eb72714b3382bb313f51443" + integrity sha512-SFpGGrH6AS/L5kJk/Izai4i0mY1SCfobBMI9MxEEPT6O+yxHuCt05/V+SF6NoxTzCxju+TyB/q/8bO25cfWPSQ== + dependencies: + "@backstage/catalog-client" "^1.15.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/core-compat-api" "^0.5.10" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/errors" "^1.3.0" + "@backstage/filter-predicates" "^0.1.2" + "@backstage/frontend-plugin-api" "^0.16.2" + "@backstage/integration-react" "^1.2.17" + "@backstage/plugin-catalog-common" "^1.1.9" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-permission-react" "^0.5.0" + "@backstage/types" "^1.2.2" + "@backstage/ui" "^0.14.2" + "@backstage/version-bridge" "^1.0.12" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + "@material-ui/lab" "4.0.0-alpha.61" + "@react-hookz/web" "^24.0.0" + "@remixicon/react" "^4.6.0" + classnames "^2.2.6" + lodash "^4.17.21" + material-ui-popup-state "^5.3.6" + qs "^6.9.4" + react-use "^17.2.4" + yaml "^2.0.0" + zen-observable "^0.10.0" + zod "^4.0.0" + +"@backstage/plugin-catalog@^2.0.0", "@backstage/plugin-catalog@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog/-/plugin-catalog-2.0.4.tgz#4e785ae65c4ce9a2a31e56fcfe3679b57a4d38fa" + integrity sha512-zDxTMtAedHEVMae64ZpG+gWpZ8UwtvsQ2HVGKaONOQ/4SHsAMssuaVP/TvstlTRDk9aUn4i+TnyGEIvH4HibjQ== + dependencies: + "@backstage/catalog-client" "^1.15.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/core-compat-api" "^0.5.10" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/errors" "^1.3.0" + "@backstage/frontend-plugin-api" "^0.16.2" + "@backstage/integration-react" "^1.2.17" + "@backstage/plugin-catalog-common" "^1.1.9" + "@backstage/plugin-catalog-react" "^2.1.4" + "@backstage/plugin-permission-react" "^0.5.0" + "@backstage/plugin-scaffolder-common" "^2.1.0" + "@backstage/plugin-search-common" "^1.2.23" + "@backstage/plugin-search-react" "^1.11.3" + "@backstage/plugin-techdocs-common" "^0.1.1" + "@backstage/plugin-techdocs-react" "^1.3.10" + "@backstage/types" "^1.2.2" + "@backstage/ui" "^0.14.2" + "@backstage/version-bridge" "^1.0.12" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.61" "@mui/utils" "^5.14.15" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" + classnames "^2.3.1" dataloader "^2.0.0" - expiry-map "^2.0.0" history "^5.0.0" lodash "^4.17.21" pluralize "^8.0.0" + react-helmet "6.1.0" react-use "^17.2.4" zen-observable "^0.10.0" + zod "^4.0.0" -"@backstage/plugin-events-node@^0.3.8": - version "0.3.8" - resolved "https://registry.yarnpkg.com/@backstage/plugin-events-node/-/plugin-events-node-0.3.8.tgz#cbc58885c9c71f95e352a9c91f0484aa92a0374e" - integrity sha512-u5NARWeZHWLOKLOnNIsyy0eIH8hXiLpuF5sM2H6qGLe+SBfkCA8XYqkj0mdSEaRAPElna/TbU/sjbZItcDfD2Q== +"@backstage/plugin-events-node@^0.4.15", "@backstage/plugin-events-node@^0.4.17", "@backstage/plugin-events-node@^0.4.20", "@backstage/plugin-events-node@^0.4.21": + version "0.4.21" + resolved "https://registry.yarnpkg.com/@backstage/plugin-events-node/-/plugin-events-node-0.4.21.tgz#9fbc0ea792d9da4eeca216d5078a22f9e7c6571c" + integrity sha512-qsMVP2d9bQbmYpc/uGPBdd4JQl8auCiaByHitskuXVDHE/Tc4G0o55wrMXOV29SSgapzwAN842vkVjeL7fQ8Cw== dependencies: - "@backstage/backend-plugin-api" "^0.7.0" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/errors" "^1.3.0" + "@backstage/types" "^1.2.2" + "@types/content-type" "^1.1.8" + "@types/express" "^4.17.6" + content-type "^1.0.5" + cross-fetch "^4.0.0" + express "^4.22.0" + uri-template "^2.0.0" -"@backstage/plugin-home-react@^0.1.15": - version "0.1.15" - resolved "https://registry.yarnpkg.com/@backstage/plugin-home-react/-/plugin-home-react-0.1.15.tgz#a7dc55babc2d642b73f148262660b1a7561f8808" - integrity sha512-t23LbSFlLMuFGIwnmvC/jJLZaojRozlWnqk+OX8YOHv8EHgAESLqORHYIMb5RdGIgjQesaAcxBY4One1mtdy0Q== +"@backstage/plugin-home-react@^0.1.37": + version "0.1.37" + resolved "https://registry.yarnpkg.com/@backstage/plugin-home-react/-/plugin-home-react-0.1.37.tgz#8e7a78cdb6313a9a46b61625d48f4c4c32644a91" + integrity sha512-zvws5Vapp0BkqrU/Shn7uqu1NP9SNc9n7lKcUgmKym0ea5k0X4AlfKNfrH4w8/CnqsckwRd3gaBzw9wOUQFb2Q== dependencies: - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" + "@backstage/core-compat-api" "^0.5.10" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/frontend-plugin-api" "^0.16.0" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" - "@rjsf/utils" "5.18.5" - "@types/react" "^16.13.1 || ^17.0.0" - -"@backstage/plugin-home@^0.7.6": - version "0.7.8" - resolved "https://registry.yarnpkg.com/@backstage/plugin-home/-/plugin-home-0.7.8.tgz#24d01daf44580273628b6c3b25bdc808008e7c8e" - integrity sha512-uUJgrUbMqFqxHnyCByaRkzkSXCCw1999iq1Cnhppk0GKw3O3cCAWSX+TpoEXd9zTVFaW6REOqvardSDhRXPeJg== - dependencies: - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/config" "^1.2.0" - "@backstage/core-app-api" "^1.14.1" - "@backstage/core-compat-api" "^0.2.7" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/frontend-plugin-api" "^0.6.7" - "@backstage/plugin-catalog-react" "^1.12.2" - "@backstage/plugin-home-react" "^0.1.15" - "@backstage/theme" "^0.5.6" + "@rjsf/utils" "5.24.13" + +"@backstage/plugin-home@^0.9.3": + version "0.9.5" + resolved "https://registry.yarnpkg.com/@backstage/plugin-home/-/plugin-home-0.9.5.tgz#cc76572d4b56ec153643efb9776dbaab39585eb9" + integrity sha512-lL3g5N/CEKPU0A0Q1lHTPuE4WjmuPfNNeco7uAiyPM4eyQeaVGNTF+88spxD7o2I7ON1DEL31o+6jRNndmHLTg== + dependencies: + "@backstage/catalog-client" "^1.15.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/config" "^1.3.7" + "@backstage/core-app-api" "^1.20.0" + "@backstage/core-compat-api" "^0.5.10" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/frontend-plugin-api" "^0.16.2" + "@backstage/plugin-catalog-react" "^2.1.4" + "@backstage/plugin-home-react" "^0.1.37" + "@backstage/theme" "^0.7.3" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.61" - "@rjsf/core" "5.18.5" - "@rjsf/material-ui" "5.18.5" - "@rjsf/utils" "5.18.5" - "@rjsf/validator-ajv8" "5.18.5" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" + "@rjsf/core" "5.24.13" + "@rjsf/material-ui" "5.24.13" + "@rjsf/utils" "5.24.13" + "@rjsf/validator-ajv8" "5.24.13" lodash "^4.17.21" luxon "^3.4.3" react-grid-layout "1.3.4" react-resizable "^3.0.4" react-use "^17.2.4" - zod "^3.22.4" + zod "^3.25.76 || ^4.0.0" -"@backstage/plugin-kubernetes-backend@^0.18.2": - version "0.18.3" - resolved "https://registry.yarnpkg.com/@backstage/plugin-kubernetes-backend/-/plugin-kubernetes-backend-0.18.3.tgz#1407e464957943d43012a96ef66f00fbe85c3208" - integrity sha512-AnbarsdRXqruNsHdME6lqTlAS8NcI1x31VspyErehPjLZ6jvxb7t2JMhnH9SN2I0rCEYAgw6mQL14GTc1t36/Q== +"@backstage/plugin-kubernetes-backend@^0.20.4": + version "0.20.4" + resolved "https://registry.yarnpkg.com/@backstage/plugin-kubernetes-backend/-/plugin-kubernetes-backend-0.20.4.tgz#1c1a62ba5fabb3e8c16e1a6e57e8dbac1a51bd4c" + integrity sha512-ZgLjALN5GhmQAdyAIe1lBM6m5Ipq1kM6OtAdn5K1y9UMbrb12IGBPK0PJdpb8ceWQSzmu0oSxYv3aM3Fbz94aA== dependencies: "@aws-crypto/sha256-js" "^5.0.0" "@aws-sdk/credential-providers" "^3.350.0" "@aws-sdk/signature-v4" "^3.347.0" "@azure/identity" "^4.0.0" - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/integration-aws-node" "^0.1.12" - "@backstage/plugin-auth-node" "^0.4.17" - "@backstage/plugin-catalog-node" "^1.12.4" - "@backstage/plugin-kubernetes-common" "^0.8.1" - "@backstage/plugin-kubernetes-node" "^0.1.16" - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/plugin-permission-node" "^0.8.0" - "@backstage/types" "^1.1.1" + "@backstage/backend-plugin-api" "^1.5.0" + "@backstage/catalog-client" "^1.12.1" + "@backstage/catalog-model" "^1.7.6" + "@backstage/config" "^1.3.6" + "@backstage/errors" "^1.2.7" + "@backstage/integration-aws-node" "^0.1.19" + "@backstage/plugin-catalog-node" "^1.20.0" + "@backstage/plugin-kubernetes-common" "^0.9.8" + "@backstage/plugin-kubernetes-node" "^0.3.6" + "@backstage/plugin-permission-common" "^0.9.3" + "@backstage/plugin-permission-node" "^0.10.6" + "@backstage/types" "^1.2.2" "@google-cloud/container" "^5.0.0" "@jest-mock/express" "^2.0.1" - "@kubernetes/client-node" "0.20.0" - "@types/express" "^4.17.6" + "@kubernetes/client-node" "1.4.0" "@types/http-proxy-middleware" "^1.0.0" - "@types/luxon" "^3.0.0" - compression "^1.7.4" - cors "^2.8.5" express "^4.17.1" express-promise-router "^4.1.0" fs-extra "^11.2.0" - helmet "^6.0.0" http-proxy-middleware "^2.0.6" lodash "^4.17.21" luxon "^3.0.0" - morgan "^1.10.0" - node-fetch "^2.6.7" - stream-buffers "^3.0.2" - winston "^3.2.1" - yn "^4.0.0" + node-fetch "^2.7.0" -"@backstage/plugin-kubernetes-common@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@backstage/plugin-kubernetes-common/-/plugin-kubernetes-common-0.8.1.tgz#9fe97ccfdb6b9f4fcabc846f5cb9c9bfeae410e5" - integrity sha512-kj3GwR48pPSVMd7FJKsQMhb48e/ytvdvOe5KSTI/Ux4kNMvWf6V5K7DnlfoESu7WgCs8+fxaj0qXnQmQ9FdGzA== +"@backstage/plugin-kubernetes-backend@^0.21.2": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@backstage/plugin-kubernetes-backend/-/plugin-kubernetes-backend-0.21.3.tgz#b68f41a33f04ec4a5fa4a3604262901ef4c0a888" + integrity sha512-yfM7l0JeNoKnWVRLiiQ1OzilgKW79MqOb5/Mu/acJZYwBctdPRga/DT7M3jo+NzSDm9lKJHUkvi3YVKc9VoE0A== + dependencies: + "@aws-crypto/sha256-js" "^5.0.0" + "@aws-sdk/credential-providers" "^3.350.0" + "@azure/identity" "^4.0.0" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-client" "^1.15.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/integration-aws-node" "^0.1.21" + "@backstage/plugin-catalog-node" "^2.2.0" + "@backstage/plugin-kubernetes-common" "^0.9.11" + "@backstage/plugin-kubernetes-node" "^0.4.3" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-permission-node" "^0.10.12" + "@backstage/types" "^1.2.2" + "@google-cloud/container" "^5.0.0" + "@jest-mock/express" "^2.0.1" + "@kubernetes/client-node" "1.4.0" + "@smithy/signature-v4" "^4.1.0" + "@types/http-proxy-middleware" "^1.0.0" + express "^4.22.0" + express-promise-router "^4.1.0" + fs-extra "^11.2.0" + http-proxy-middleware "^2.0.6" + lodash "^4.17.21" + luxon "^3.0.0" + node-fetch "^2.7.0" + +"@backstage/plugin-kubernetes-common@^0.9.11", "@backstage/plugin-kubernetes-common@^0.9.8": + version "0.9.11" + resolved "https://registry.yarnpkg.com/@backstage/plugin-kubernetes-common/-/plugin-kubernetes-common-0.9.11.tgz#5b807b3cc04ff1b9aaa084ae8db1e280600e2f23" + integrity sha512-U2jer4Synm0F5hyd327v56KA1uvXxqJ5nOKk4jR7NJCvQ+/wJKfERh32m6Y916lXYG4zV2xNN9UqNOF2k3KwOw== dependencies: - "@backstage/catalog-model" "^1.5.0" - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/types" "^1.1.1" - "@kubernetes/client-node" "0.20.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/types" "^1.2.2" + "@kubernetes/client-node" "1.4.0" kubernetes-models "^4.3.1" lodash "^4.17.21" luxon "^3.0.0" -"@backstage/plugin-kubernetes-node@^0.1.16": - version "0.1.16" - resolved "https://registry.yarnpkg.com/@backstage/plugin-kubernetes-node/-/plugin-kubernetes-node-0.1.16.tgz#f740712feb314752802cb93ae2f317c0a3f4b4ab" - integrity sha512-by29E6yBUid3blHouleftjvEskQsm4t7QsYJ+WK+WGur/XdEY00nT6dGd8wqYEUA0YmzrI92KMNfa9aLvhGeJw== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/catalog-model" "^1.5.0" - "@backstage/plugin-kubernetes-common" "^0.8.1" - "@backstage/types" "^1.1.1" - "@kubernetes/client-node" "^0.20.0" - node-fetch "^2.6.7" +"@backstage/plugin-kubernetes-node@^0.3.6": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@backstage/plugin-kubernetes-node/-/plugin-kubernetes-node-0.3.6.tgz#a4b87192cb4839f7c56fdff9bd6a0a15b4b365b7" + integrity sha512-Op+Ck+e+42lz9RSOj7WxK6zzsGsRM0AxB7HfX5jimqOkGk7H/YswFDolbKVf+6RlEzOuYaGsUbskmbjReePNlg== + dependencies: + "@backstage/backend-plugin-api" "^1.5.0" + "@backstage/catalog-model" "^1.7.6" + "@backstage/plugin-kubernetes-common" "^0.9.8" + "@backstage/types" "^1.2.2" + "@kubernetes/client-node" "1.4.0" + node-fetch "^2.7.0" winston "^3.2.1" -"@backstage/plugin-kubernetes-react@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@backstage/plugin-kubernetes-react/-/plugin-kubernetes-react-0.4.1.tgz#c220cea4ed865596f0102d2c905f9a3fe655ec50" - integrity sha512-XzYlwzd0c7Ieiu0aWXwE+tU4DRCUC+gmjbea0QXml5VHeeWd1rneX9TaFL8lxp0UTnoJ7gDNS/8vfTZSwsl0WQ== +"@backstage/plugin-kubernetes-node@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@backstage/plugin-kubernetes-node/-/plugin-kubernetes-node-0.4.3.tgz#72afb0d6541a49f4a1652646ca476303b8c8de0f" + integrity sha512-gZf+zUwHlkb/9JShk0Gqai0i9m+g2WoJgxH+q/xZZg2InSkornhUIjBhmvqLCbZ5AaAt++EG4Y6lkmwu0SrByA== dependencies: - "@backstage/catalog-model" "^1.5.0" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-kubernetes-common" "^0.8.1" - "@backstage/types" "^1.1.1" - "@kubernetes-models/apimachinery" "^1.1.0" - "@kubernetes-models/base" "^4.0.1" - "@kubernetes/client-node" "^0.20.0" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/plugin-kubernetes-common" "^0.9.11" + "@backstage/types" "^1.2.2" + "@kubernetes/client-node" "1.4.0" + "@types/express" "^4.17.6" + node-fetch "^2.7.0" + winston "^3.2.1" + +"@backstage/plugin-kubernetes-react@^0.5.11", "@backstage/plugin-kubernetes-react@^0.5.18": + version "0.5.18" + resolved "https://registry.yarnpkg.com/@backstage/plugin-kubernetes-react/-/plugin-kubernetes-react-0.5.18.tgz#26170066a91974a6d3d10c149aed02777299953d" + integrity sha512-qa+UzCyTt9NM+forZSxHw7CACPBy/yfZ46JoPlPtDix14BxVGmWkpmSha0m5oqdaH0JC3LkDCULuiq29ESTbpw== + dependencies: + "@backstage/catalog-model" "^1.8.0" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/errors" "^1.3.0" + "@backstage/plugin-kubernetes-common" "^0.9.11" + "@backstage/types" "^1.2.2" + "@kubernetes-models/apimachinery" "^2.0.0" + "@kubernetes-models/base" "^5.0.0" + "@kubernetes/client-node" "1.4.0" "@material-ui/core" "^4.9.13" "@material-ui/icons" "^4.11.3" "@material-ui/lab" "^4.0.0-alpha.61" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" + "@xterm/addon-attach" "^0.12.0" + "@xterm/addon-fit" "^0.11.0" + "@xterm/xterm" "^5.5.0" cronstrue "^2.32.0" js-yaml "^4.1.0" kubernetes-models "^4.3.1" lodash "^4.17.21" luxon "^3.0.0" react-use "^17.4.0" - xterm "^5.3.0" - xterm-addon-attach "^0.9.0" - xterm-addon-fit "^0.8.0" - -"@backstage/plugin-kubernetes@^0.11.11": - version "0.11.12" - resolved "https://registry.yarnpkg.com/@backstage/plugin-kubernetes/-/plugin-kubernetes-0.11.12.tgz#22390d771df83b88329dec34affa85595cb9942b" - integrity sha512-A52aB03mm336kUhglUwRLSsJMB5SwygSNGAGQ6mzBiHByPHsImAQEyQr05whvPprBpV/8j0xHNk1S08hKA/NXg== - dependencies: - "@backstage/catalog-model" "^1.5.0" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/plugin-catalog-react" "^1.12.2" - "@backstage/plugin-kubernetes-common" "^0.8.1" - "@backstage/plugin-kubernetes-react" "^0.4.1" - "@kubernetes-models/apimachinery" "^1.1.0" - "@kubernetes-models/base" "^4.0.1" - "@kubernetes/client-node" "0.20.0" + +"@backstage/plugin-kubernetes@^0.12.11", "@backstage/plugin-kubernetes@^0.12.13", "@backstage/plugin-kubernetes@^0.12.17": + version "0.12.18" + resolved "https://registry.yarnpkg.com/@backstage/plugin-kubernetes/-/plugin-kubernetes-0.12.18.tgz#67e6f95389386dc251ffd977782bfe15d6dad3c5" + integrity sha512-tu/xduHJ4V3Rqh3laj1BnLUPzHc0VkoC7AdII//z+fAJo6+0EohGUTVjiAz0TTiG+pa/qPglw1wkJQt4VEO+TA== + dependencies: + "@backstage/catalog-model" "^1.8.0" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/frontend-plugin-api" "^0.16.0" + "@backstage/plugin-catalog-react" "^2.1.2" + "@backstage/plugin-kubernetes-common" "^0.9.11" + "@backstage/plugin-kubernetes-react" "^0.5.18" + "@backstage/plugin-permission-react" "^0.5.0" "@material-ui/core" "^4.12.2" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" - cronstrue "^2.2.0" - js-yaml "^4.0.0" - kubernetes-models "^4.1.0" - lodash "^4.17.21" - luxon "^3.0.0" - xterm "^5.2.1" - xterm-addon-attach "^0.9.0" - xterm-addon-fit "^0.8.0" - -"@backstage/plugin-org@^0.6.26": - version "0.6.27" - resolved "https://registry.yarnpkg.com/@backstage/plugin-org/-/plugin-org-0.6.27.tgz#c61d02a3319f85288cfebf2c3240b770b872a2e3" - integrity sha512-U5Ty0pH/Lfp3Ug190+cTG4X+DnO/g7QqSRlzFRjZbw52wMqy9dxE8GfNhcN9TnL1RsALfJOlyMdsLuu1wjgNHQ== - dependencies: - "@backstage/catalog-model" "^1.5.0" - "@backstage/core-compat-api" "^0.2.7" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/frontend-plugin-api" "^0.6.7" - "@backstage/plugin-catalog-common" "^1.0.25" - "@backstage/plugin-catalog-react" "^1.12.2" + +"@backstage/plugin-org@^0.7.0": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@backstage/plugin-org/-/plugin-org-0.7.3.tgz#1c035bbfe8e8eaeb1d47e50844228a0990a6c859" + integrity sha512-eP9cRUhfta9LeL/BiOv5xUpLtl0+r1Ol9CvvYG6qAwI0CUQzR9ySeDPjkPVmcPWhcwHcqbLv8Pf1ue+5SwdaGw== + dependencies: + "@backstage/catalog-model" "^1.8.0" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/frontend-plugin-api" "^0.16.2" + "@backstage/plugin-catalog-common" "^1.1.9" + "@backstage/plugin-catalog-react" "^2.1.4" + "@backstage/ui" "^0.14.2" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.61" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" + "@remixicon/react" "^4.6.0" lodash "^4.17.21" p-limit "^3.1.0" pluralize "^8.0.0" qs "^6.10.1" react-use "^17.2.4" + zod "^4.0.0" + +"@backstage/plugin-permission-backend-module-allow-all-policy@^0.2.17": + version "0.2.18" + resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-backend-module-allow-all-policy/-/plugin-permission-backend-module-allow-all-policy-0.2.18.tgz#39ce797c682c77226a27b1f6c187dd8ae08d464d" + integrity sha512-KfEwwNBHXEtnpcQXKF7Zuf11Kn81FJ0dstIwPRyJt3SnsuJMOSG6YljMGuEyw2dFPijmLzfAsanuIPHVh616wQ== + dependencies: + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/plugin-auth-node" "^0.7.0" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-permission-node" "^0.10.12" + +"@backstage/plugin-permission-backend@^0.7.10": + version "0.7.11" + resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-backend/-/plugin-permission-backend-0.7.11.tgz#879c90bb3c083ccc065c280db28d95f64dc91e15" + integrity sha512-uNaFbdA/eD2teBVMO10LASY5bEu+rw/AfynO+11JImHMzg5Bnec1TVDnr0hywGKZYlgC7ViS9JAVJGIhzZyH3w== + dependencies: + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/plugin-auth-node" "^0.7.0" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-permission-node" "^0.10.12" + dataloader "^2.0.0" + express "^4.22.0" + express-promise-router "^4.1.0" + lodash "^4.17.21" + yn "^4.0.0" + zod "^3.25.76 || ^4.0.0" -"@backstage/plugin-permission-common@^0.7.14": - version "0.7.14" - resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-common/-/plugin-permission-common-0.7.14.tgz#ecb12877c412ff271124af54fca46ec06d9c812f" - integrity sha512-fHbxhX9ZoT8bTVuGycfTeU/6TE2yjZ6YNvm/2ko1bcxGnvYe1p5Ug5JW+iWjDZS+F6F152tWzhRcg05wQlPNKQ== - dependencies: - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/types" "^1.1.1" - cross-fetch "^4.0.0" - uuid "^9.0.0" - zod "^3.22.4" - -"@backstage/plugin-permission-common@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-common/-/plugin-permission-common-0.8.0.tgz#13d29c146c50e9de1da47296c167ace9d1bc86f3" - integrity sha512-4c8QfjDKiTJbQfiG3DibUqUsclsi53kRk8GR9CwHl1Is2Xm98AkqXGWyknHGPQOvw4vJR19nqnj7w0XfhLK2Jw== +"@backstage/plugin-permission-common@^0.9.0", "@backstage/plugin-permission-common@^0.9.1", "@backstage/plugin-permission-common@^0.9.3", "@backstage/plugin-permission-common@^0.9.5", "@backstage/plugin-permission-common@^0.9.6", "@backstage/plugin-permission-common@^0.9.7", "@backstage/plugin-permission-common@^0.9.8": + version "0.9.8" + resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-common/-/plugin-permission-common-0.9.8.tgz#ccf3107f6821ba48c4bda60537a9f2c7c5f3941f" + integrity sha512-gzmy25mtOTfZdnnbZErmVcNY+Xc3mVoErpWltCjXRX5q7vrFjsVThJUrtwouT3+1h9QXarDGaPUSvAM9uIzysg== dependencies: - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/types" "^1.1.1" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/types" "^1.2.2" cross-fetch "^4.0.0" - uuid "^9.0.0" - zod "^3.22.4" - -"@backstage/plugin-permission-node@^0.7.32": - version "0.7.32" - resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-node/-/plugin-permission-node-0.7.32.tgz#e462a4c8d6d8021ae5d8ff64bec84e176641fd77" - integrity sha512-jNKa2sNcQdbcQiGM8gdQa7SsX7SSAGmSUfLoD3F1BF9Hs18c90Mb1v1RFIcXfslHzzUVSLNFguRpZKZ+Mg0CPw== - dependencies: - "@backstage/backend-common" "^0.23.2" - "@backstage/backend-plugin-api" "^0.6.21" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-auth-node" "^0.4.16" - "@backstage/plugin-permission-common" "^0.7.14" + uuid "^11.0.0" + zod "^3.25.76 || ^4.0.0" + zod-to-json-schema "^3.25.1" + +"@backstage/plugin-permission-node@^0.10.1", "@backstage/plugin-permission-node@^0.10.11", "@backstage/plugin-permission-node@^0.10.12", "@backstage/plugin-permission-node@^0.10.4", "@backstage/plugin-permission-node@^0.10.6", "@backstage/plugin-permission-node@^0.10.7": + version "0.10.12" + resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-node/-/plugin-permission-node-0.10.12.tgz#5f47c1d89b9f4508f5fbd1c5b8eaada6a95f1e35" + integrity sha512-T9eyBfsqUmuRfxotAQc7BXeE3nmmrcsI7rNyS6Trt1ALizmpfGozQdnKnbEmS6WUIoe/dNF/YfdbzDTB6CsUdA== + dependencies: + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/plugin-auth-node" "^0.7.0" + "@backstage/plugin-permission-common" "^0.9.8" "@types/express" "^4.17.6" - express "^4.17.1" + express "^4.22.0" express-promise-router "^4.1.0" - zod "^3.22.4" - zod-to-json-schema "^3.20.4" + zod "^3.25.76 || ^4.0.0" + zod-to-json-schema "^3.25.1" -"@backstage/plugin-permission-node@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-node/-/plugin-permission-node-0.8.0.tgz#726a7d5b60eb2212fb4e9b16bf890d7b0dcbe6bf" - integrity sha512-UFIPf97uAoVZk/1UagkDKUeNHWifkqVrkUjOT36uHWxRDqucRPrCNcgvpNrv/HdI1xbCmjSeXkyQt4OJDzWicg== +"@backstage/plugin-permission-react@^0.4.36", "@backstage/plugin-permission-react@^0.4.39", "@backstage/plugin-permission-react@^0.4.41": + version "0.4.41" + resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-react/-/plugin-permission-react-0.4.41.tgz#88e898961f9dcd3ce8a7ef6fe315577351ef870f" + integrity sha512-XGJPNBd8pY5b8dya+twIr0Zznuq/wX2guUKdfnYmQyjw2Li9Ik6Q4sWPyshFfG7tCxe/eaEz9FNFJzgiGG3dIg== dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-auth-node" "^0.4.17" - "@backstage/plugin-permission-common" "^0.8.0" - "@types/express" "^4.17.6" - express "^4.17.1" - express-promise-router "^4.1.0" - zod "^3.22.4" - zod-to-json-schema "^3.20.4" + "@backstage/config" "^1.3.6" + "@backstage/core-plugin-api" "^1.12.4" + "@backstage/plugin-permission-common" "^0.9.7" + dataloader "^2.0.0" + swr "^2.0.0" -"@backstage/plugin-permission-react@^0.4.23", "@backstage/plugin-permission-react@^0.4.24": - version "0.4.24" - resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-react/-/plugin-permission-react-0.4.24.tgz#a980462553c86e41d75c538b347b4acd9dc50a4e" - integrity sha512-UH+KvuvsVMqVCWDxC7Xv2BwHWuezg1fOurp0FgrrxXR5rZ8NQYEBlfmQEzt7mml6EzsUIc+hGeoSKLoSgHFjUA== +"@backstage/plugin-permission-react@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-react/-/plugin-permission-react-0.5.0.tgz#ea291e3b3332bb700f59c46064b16d5448fcf90e" + integrity sha512-P4viIA8uM0PMe+OtvPhVg73Y9BHIHF4UWMIc9OE8bJPLobk+Q9ueqirEfwLcBrYPWjetDz2pNcuLd1juc6nlGQ== dependencies: - "@backstage/config" "^1.2.0" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/plugin-permission-common" "^0.8.0" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" + "@backstage/config" "^1.3.7" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/plugin-permission-common" "^0.9.8" + dataloader "^2.0.0" swr "^2.0.0" -"@backstage/plugin-proxy-backend@^0.5.2": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@backstage/plugin-proxy-backend/-/plugin-proxy-backend-0.5.3.tgz#fc9c12ac160e389913433a33629cb7d09e71e2f7" - integrity sha512-FSaDjtMKo1iURvKumkTVazkXecpgBodJyFc5EewJLjiLmLFGqv0Od9O7n+EQDJ+Fv84vCUwiapOfl5Pt9Z/p5w== +"@backstage/plugin-proxy-backend@^0.6.11": + version "0.6.12" + resolved "https://registry.yarnpkg.com/@backstage/plugin-proxy-backend/-/plugin-proxy-backend-0.6.12.tgz#44d701ff1435f201c8dcbb6c396919f2ddbb1e72" + integrity sha512-6Xy2if2dMJ/5SZhC7zpRLPhmBPhMeg4jsFzG242x6Srmq1A1bVQUIvpOlJ3lPgamMz5GpfWfw2uIa9QxDizWNw== dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config" "^1.2.0" - "@backstage/types" "^1.1.1" - "@types/express" "^4.17.6" - express "^4.17.1" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/plugin-proxy-node" "^0.1.14" + "@backstage/types" "^1.2.2" express-promise-router "^4.1.0" http-proxy-middleware "^2.0.0" - morgan "^1.10.0" - uuid "^9.0.0" - winston "^3.2.1" - yaml "^2.0.0" - yn "^4.0.0" - yup "^1.0.0" - -"@backstage/plugin-scaffolder-backend-module-azure@^0.1.14": - version "0.1.14" - resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-backend-module-azure/-/plugin-scaffolder-backend-module-azure-0.1.14.tgz#22fcd746533c368411519121b039f91a575b13c4" - integrity sha512-eD3xNHtlVxmgG9rKO7nB4W+UOhP2XrGyEegw3csEdhAVaEdfseqqBSZbIRHfUGzJuH9R9BzjVezSzPFxW/IJ3A== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.13.0" - "@backstage/plugin-scaffolder-node" "^0.4.8" - azure-devops-node-api "^12.0.0" - yaml "^2.0.0" - -"@backstage/plugin-scaffolder-backend-module-bitbucket-cloud@^0.1.12": - version "0.1.12" - resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-backend-module-bitbucket-cloud/-/plugin-scaffolder-backend-module-bitbucket-cloud-0.1.12.tgz#7a14449825d452ab2558c40643f7dca1d095ee0c" - integrity sha512-y+ld7IKqgTmg3GGaTEOgh028j8m65RmoNNpxgw+w6qZX8XPI5LUSfj/YG/jo7NmIEmcNPQvXLLXJCrcsU3H8BQ== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.13.0" - "@backstage/plugin-bitbucket-cloud-common" "^0.2.21" - "@backstage/plugin-scaffolder-node" "^0.4.8" - fs-extra "^11.2.0" - node-fetch "^2.6.7" - yaml "^2.0.0" - -"@backstage/plugin-scaffolder-backend-module-bitbucket-server@^0.1.12": - version "0.1.12" - resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-backend-module-bitbucket-server/-/plugin-scaffolder-backend-module-bitbucket-server-0.1.12.tgz#2ed85dd2c16b39217e621517b7e4f5b3f7024b59" - integrity sha512-RAL7nom1imKZsMSdTnFnJESu62ztsYFBlK8dfYSg8J9gremd8fOAY9SQ4/fLTsU9QecZiTEIsKSOw4A6SboLXw== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.13.0" - "@backstage/plugin-scaffolder-node" "^0.4.8" - fs-extra "^11.2.0" - node-fetch "^2.6.7" - yaml "^2.0.0" - -"@backstage/plugin-scaffolder-backend-module-bitbucket@^0.2.12": - version "0.2.12" - resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-backend-module-bitbucket/-/plugin-scaffolder-backend-module-bitbucket-0.2.12.tgz#6f16213393bebb5106b80511890f7ca48ff4740a" - integrity sha512-mgVUPF3mXUfYWW+5p7AnohVB06MsH1sySEL+b+C1iixHdyKT3iA39nsNmFSoh9YbsR0EinC2fblSWNB3d3RFww== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.13.0" - "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud" "^0.1.12" - "@backstage/plugin-scaffolder-backend-module-bitbucket-server" "^0.1.12" - "@backstage/plugin-scaffolder-node" "^0.4.8" - fs-extra "^11.2.0" - node-fetch "^2.6.7" - yaml "^2.0.0" -"@backstage/plugin-scaffolder-backend-module-gerrit@^0.1.14": +"@backstage/plugin-proxy-node@^0.1.14": version "0.1.14" - resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-backend-module-gerrit/-/plugin-scaffolder-backend-module-gerrit-0.1.14.tgz#592055e868588868003a3c2887a7efd39391b284" - integrity sha512-VGc4A4RJi9KFmH4g3/CLoK5c/44V0fUVAvbbG3snWNpL2eN1rWJrmRbV9ocMT+CLomOHfgb3akLylpsy0Gw7lA== - dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.13.0" - "@backstage/plugin-scaffolder-node" "^0.4.8" - node-fetch "^2.6.7" - yaml "^2.0.0" - -"@backstage/plugin-scaffolder-backend-module-gitea@^0.1.11", "@backstage/plugin-scaffolder-backend-module-gitea@^0.1.12": - version "0.1.12" - resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-backend-module-gitea/-/plugin-scaffolder-backend-module-gitea-0.1.12.tgz#0c21d5e13726119128eaa265f7308866d39f7ab1" - integrity sha512-2Mjvd1cOIfgRLc7BetAADETzmgTpC/IrGomzly2Fvn4rubFmpY69qyAPU/LIWO0VB/BG75d4dQEDqkhCLBiWsg== + resolved "https://registry.yarnpkg.com/@backstage/plugin-proxy-node/-/plugin-proxy-node-0.1.14.tgz#7361e91b3058265b13666c8a822bb7743898bda9" + integrity sha512-Msn3RJvSMDkOw184yTzZmXQF2qD4/Sj6UPUqZ295NPIz5+sFEdpTlIuRAdG0AlwPrZGA+NYqGTLEPs9s4xq8FA== dependencies: - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.13.0" - "@backstage/plugin-scaffolder-node" "^0.4.8" - node-fetch "^2.6.7" - yaml "^2.0.0" + "@backstage/backend-plugin-api" "^1.9.0" + http-proxy-middleware "^2.0.0" -"@backstage/plugin-scaffolder-backend-module-github@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-backend-module-github/-/plugin-scaffolder-backend-module-github-0.4.0.tgz#a8050a87aafdff5c36c355caf619820a0b920732" - integrity sha512-tLU1Pb6QSY0h/0FCsLf2oGPiL7I/s6jv/TLHaI6Kg06OGEjqOIQhSDrZQCJxEamiIzOsonuLi4UoYFZ2L9VXLQ== - dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.13.0" - "@backstage/plugin-scaffolder-node" "^0.4.8" - "@octokit/webhooks" "^10.0.0" - libsodium-wrappers "^0.7.11" +"@backstage/plugin-scaffolder-backend-module-github@^0.9.7": + version "0.9.8" + resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-backend-module-github/-/plugin-scaffolder-backend-module-github-0.9.8.tgz#882632004592d810a8b694a3ae536753eae1dad8" + integrity sha512-c6KnddE5zUht6R7B1u4qyDft+4Oy3TwwSVrA8Pyq5sRZDpwnLa3SgfgQW6RhN5BIbMN7dbeNHiiL43igXfNByA== + dependencies: + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/integration" "^2.0.1" + "@backstage/plugin-catalog-node" "^2.2.0" + "@backstage/plugin-scaffolder-node" "^0.13.2" + "@backstage/types" "^1.2.2" + "@octokit/webhooks" "^10.9.2" + libsodium-wrappers "^0.8.0" octokit "^3.0.0" octokit-plugin-create-pull-request "^5.0.0" yaml "^2.0.0" + zod "^3.25.76 || ^4.0.0" -"@backstage/plugin-scaffolder-backend-module-gitlab@^0.4.4": - version "0.4.4" - resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-backend-module-gitlab/-/plugin-scaffolder-backend-module-gitlab-0.4.4.tgz#e08e49aaed6faa561784faaa99fc5430a46db5d7" - integrity sha512-cderEqQ9Zg6Xx3UpL8BKGZhLXMBLioFNfQmOMTAj/1fsgrNr2YZPMCzTaRWLtg0TPMbsbyMrOCrSBm070Rm0SA== - dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.13.0" - "@backstage/plugin-scaffolder-node" "^0.4.8" - "@gitbeaker/core" "^35.8.0" - "@gitbeaker/node" "^35.8.0" - "@gitbeaker/rest" "^39.25.0" - luxon "^3.0.0" - yaml "^2.0.0" - zod "^3.22.4" - -"@backstage/plugin-scaffolder-backend@^1.22.11", "@backstage/plugin-scaffolder-backend@^1.22.5": - version "1.23.0" - resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-backend/-/plugin-scaffolder-backend-1.23.0.tgz#35cf0bdcb14aca53c20fbf8f88acffdf3c27532c" - integrity sha512-naDeEFGHTR87/C+Ut+OfAJJFhWOIaF7gc5YBN5iyl4GIf9fL3l4kQrUo29iiQ/GXd9nskzeLlSulXwDUP5qcJQ== - dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/backend-tasks" "^0.5.27" - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.13.0" - "@backstage/plugin-auth-node" "^0.4.17" - "@backstage/plugin-bitbucket-cloud-common" "^0.2.21" - "@backstage/plugin-catalog-backend-module-scaffolder-entity-model" "^0.1.20" - "@backstage/plugin-catalog-node" "^1.12.4" - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/plugin-permission-node" "^0.8.0" - "@backstage/plugin-scaffolder-backend-module-azure" "^0.1.14" - "@backstage/plugin-scaffolder-backend-module-bitbucket" "^0.2.12" - "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud" "^0.1.12" - "@backstage/plugin-scaffolder-backend-module-bitbucket-server" "^0.1.12" - "@backstage/plugin-scaffolder-backend-module-gerrit" "^0.1.14" - "@backstage/plugin-scaffolder-backend-module-gitea" "^0.1.12" - "@backstage/plugin-scaffolder-backend-module-github" "^0.4.0" - "@backstage/plugin-scaffolder-backend-module-gitlab" "^0.4.4" - "@backstage/plugin-scaffolder-common" "^1.5.4" - "@backstage/plugin-scaffolder-node" "^0.4.8" - "@backstage/types" "^1.1.1" - "@types/express" "^4.17.6" +"@backstage/plugin-scaffolder-backend@^3.3.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-backend/-/plugin-scaffolder-backend-3.4.0.tgz#48b22e10568864ac22caaa2372c76a53862d3c69" + integrity sha512-x3HE127pCC9iKMw0gOMcoY3GjNXP9uKJSW1meXBTQAPuuUl96h5I6FUQd1jAbb3dkVCgcAJFqkKGktspvjAWTg== + dependencies: + "@backstage/backend-openapi-utils" "^0.6.8" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/integration" "^2.0.1" + "@backstage/plugin-catalog-node" "^2.2.0" + "@backstage/plugin-events-node" "^0.4.21" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-permission-node" "^0.10.12" + "@backstage/plugin-scaffolder-common" "^2.1.0" + "@backstage/plugin-scaffolder-node" "^0.13.2" + "@backstage/types" "^1.2.2" "@types/luxon" "^3.0.0" - concat-stream "^2.0.0" - express "^4.17.1" - express-promise-router "^4.1.0" + express "^4.22.0" fs-extra "^11.2.0" globby "^11.0.0" isbinaryfile "^5.0.0" - isolated-vm "^4.5.0" - jsonschema "^1.2.6" + isolated-vm "^6.0.1" + jsonschema "^1.5.0" knex "^3.0.0" lodash "^4.17.21" logform "^2.3.2" luxon "^3.0.0" nunjucks "^3.2.3" - p-limit "^3.1.0" p-queue "^6.6.2" prom-client "^15.0.0" - tar "^6.1.12" triple-beam "^1.4.1" - uuid "^9.0.0" + uuid "^11.0.0" winston "^3.2.1" winston-transport "^4.7.0" yaml "^2.0.0" zen-observable "^0.10.0" - zod "^3.22.4" + zod "^3.25.76 || ^4.0.0" + zod-to-json-schema "^3.25.1" + +"@backstage/plugin-scaffolder-common@^1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-common/-/plugin-scaffolder-common-1.7.6.tgz#1cc8c94d91207af6f3d9e2a789533124b4f3d8ca" + integrity sha512-JFpYJkvCMwXFfJ5V9Ll26gciaYewa5bbhP+73GaIQ1mIIH5iK2A9+Se9k2xBXHvnSDhmz1PyW5l0aQUuib182w== + dependencies: + "@backstage/catalog-model" "^1.7.6" + "@backstage/errors" "^1.2.7" + "@backstage/integration" "^1.20.0" + "@backstage/plugin-permission-common" "^0.9.6" + "@backstage/types" "^1.2.2" + "@microsoft/fetch-event-source" "^2.0.1" + "@types/json-schema" "^7.0.9" + cross-fetch "^4.0.0" + json-schema "^0.4.0" + uri-template "^2.0.0" + zen-observable "^0.10.0" -"@backstage/plugin-scaffolder-common@^1.5.4": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-common/-/plugin-scaffolder-common-1.5.4.tgz#b1fed2735b1a373f8e56e4d99d8e1af972e11f4c" - integrity sha512-oSyKLv+055SIOKge1NrQQrnwb9944Ov1aWm9jWCcQ20+ejWCc9STJWtiZ0POZbtbo6fVpJiBLdzQDqnmLzyuLA== - dependencies: - "@backstage/catalog-model" "^1.5.0" - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/types" "^1.1.1" +"@backstage/plugin-scaffolder-common@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-common/-/plugin-scaffolder-common-2.1.0.tgz#a616a2f8502a16e085db37c383fdac25d64bd527" + integrity sha512-16eI2BjEgfm8kDRouwfubUB8KUCzCNK3A9uQVsWiwxhN4SUauNV/ngayI+oL7wRtDN08iLepCxOYMB7gzhKiMQ== + dependencies: + "@backstage/catalog-model" "^1.8.0" + "@backstage/errors" "^1.3.0" + "@backstage/integration" "^2.0.1" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/types" "^1.2.2" + "@microsoft/fetch-event-source" "^2.0.1" + "@types/json-schema" "^7.0.9" + cross-fetch "^4.0.0" + json-schema "^0.4.0" + uri-template "^2.0.0" + zen-observable "^0.10.0" -"@backstage/plugin-scaffolder-node@^0.4.3", "@backstage/plugin-scaffolder-node@^0.4.7", "@backstage/plugin-scaffolder-node@^0.4.8": - version "0.4.8" - resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-node/-/plugin-scaffolder-node-0.4.8.tgz#7316bab40a7fe13fd8a1efd56ec91c3c2f8a5c2a" - integrity sha512-SjuREQqGoTDJK6r0s4USNIbQ0QYKwnMUWQjjHVDgQt8kzo6XmnFYfbBuf+OR+koe1S0/gHZZM/V2x1lU7VIJRg== - dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/catalog-model" "^1.5.0" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.13.0" - "@backstage/plugin-scaffolder-common" "^1.5.4" - "@backstage/types" "^1.1.1" +"@backstage/plugin-scaffolder-node@^0.12.0": + version "0.12.5" + resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-node/-/plugin-scaffolder-node-0.12.5.tgz#7a8029070543d9eb6c666964729b30ff624f27f0" + integrity sha512-B2gVh1X+xf/fuSm0WLU4mGp2Ym39TZi/IVMiVy/VnORyd8mI3WQ05xtzbdD0OkYj4bnOBYf1gRlzBmSz8zM3Yg== + dependencies: + "@backstage/backend-plugin-api" "^1.7.0" + "@backstage/catalog-model" "^1.7.6" + "@backstage/errors" "^1.2.7" + "@backstage/integration" "^1.20.0" + "@backstage/plugin-permission-common" "^0.9.6" + "@backstage/plugin-scaffolder-common" "^1.7.6" + "@backstage/types" "^1.2.2" + "@isomorphic-git/pgp-plugin" "^0.0.7" concat-stream "^2.0.0" fs-extra "^11.2.0" globby "^11.0.0" isomorphic-git "^1.23.0" - jsonschema "^1.2.6" + jsonschema "^1.5.0" + lodash "^4.17.21" p-limit "^3.1.0" - tar "^6.1.12" + tar "^7.5.6" winston "^3.2.1" - zod "^3.22.4" - zod-to-json-schema "^3.20.4" + winston-transport "^4.7.0" + zod "^3.25.76" + zod-to-json-schema "^3.25.1" + +"@backstage/plugin-scaffolder-node@^0.13.1", "@backstage/plugin-scaffolder-node@^0.13.2": + version "0.13.2" + resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-node/-/plugin-scaffolder-node-0.13.2.tgz#5fc054d1c9604b91729bb729f79621620af395a3" + integrity sha512-e63k/yQOYkil8flweu//mV/OjFsvim9ZIVEGTtvqtWEcu5AdZbljCgM0PCRjGZkkFLE+gVE3t8zBEMcLuLmHVA== + dependencies: + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/errors" "^1.3.0" + "@backstage/integration" "^2.0.1" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-permission-node" "^0.10.12" + "@backstage/plugin-scaffolder-common" "^2.1.0" + "@backstage/types" "^1.2.2" + "@isomorphic-git/pgp-plugin" "^0.0.7" + concat-stream "^2.0.0" + fs-extra "^11.2.0" + globby "^11.0.0" + isomorphic-git "^1.23.0" + jsonschema "^1.5.0" + lodash "^4.17.21" + p-limit "^3.1.0" + tar "^7.5.6" + winston "^3.2.1" + winston-transport "^4.7.0" + zod "^3.25.76 || ^4.0.0" + zod-to-json-schema "^3.25.1" -"@backstage/plugin-scaffolder-react@^1.10.0": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-react/-/plugin-scaffolder-react-1.10.0.tgz#3f439cae9622a379fbfc4c3c9f0cd1b12f89156f" - integrity sha512-rfYFlp9Tq9NIuSSLyNQa0KZfqrv/hsSIoUn0qGpMYgK4yIeS3KZNbbzsurmt8ldBtwzvWAR2pacftpWDcL6jkg== - dependencies: - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/plugin-catalog-react" "^1.12.2" - "@backstage/plugin-permission-react" "^0.4.24" - "@backstage/plugin-scaffolder-common" "^1.5.4" - "@backstage/theme" "^0.5.6" - "@backstage/types" "^1.1.1" - "@backstage/version-bridge" "^1.0.8" +"@backstage/plugin-scaffolder-react@^1.20.1": + version "1.20.1" + resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-react/-/plugin-scaffolder-react-1.20.1.tgz#a27cc60260c00b73e30653fb243643953d56cb43" + integrity sha512-lN/MvLt4q6Leq7FstGcfoV/FydTNX0JX/StpErt48uKEemKExzcCbCwWJB7aQdP6dgiwo6TCLMAOpPr7N8klSA== + dependencies: + "@backstage/catalog-client" "^1.15.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/frontend-plugin-api" "^0.16.0" + "@backstage/plugin-catalog-react" "^2.1.2" + "@backstage/plugin-permission-react" "^0.5.0" + "@backstage/plugin-scaffolder-common" "^2.1.0" + "@backstage/theme" "^0.7.3" + "@backstage/types" "^1.2.2" + "@backstage/version-bridge" "^1.0.12" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.61" "@react-hookz/web" "^24.0.0" - "@rjsf/core" "5.18.5" - "@rjsf/material-ui" "5.18.5" - "@rjsf/utils" "5.18.5" - "@rjsf/validator-ajv8" "5.18.5" + "@rjsf/core" "5.24.13" + "@rjsf/material-ui" "5.24.13" + "@rjsf/utils" "5.24.13" + "@rjsf/validator-ajv8" "5.24.13" "@types/json-schema" "^7.0.9" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" + ajv "^8.0.1" + ajv-errors "^3.0.0" classnames "^2.2.6" - flatted "3.3.1" + flatted "^3.4.2" humanize-duration "^3.25.1" + immer "^9.0.6" json-schema "^0.4.0" json-schema-library "^9.0.0" lodash "^4.17.21" luxon "^3.0.0" qs "^6.9.4" react-use "^17.2.4" - use-immer "^0.9.0" + use-immer "^0.11.0" zen-observable "^0.10.0" - zod "^3.22.4" - zod-to-json-schema "^3.20.4" - -"@backstage/plugin-scaffolder@^1.22.0": - version "1.23.0" - resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder/-/plugin-scaffolder-1.23.0.tgz#ffdf0ee5e7ce27ec151907f7f833bc08376d8c9f" - integrity sha512-gz8QakYcjnanhovOHKLcl3+ZN4eTu5XyH9X1os4bK+16dfHtZw4smLA0rPKR9vnVT7yVDeNkp6oUJ1jj+REDjA== - dependencies: - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/core-compat-api" "^0.2.7" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/errors" "^1.2.4" - "@backstage/frontend-plugin-api" "^0.6.7" - "@backstage/integration" "^1.13.0" - "@backstage/integration-react" "^1.1.29" - "@backstage/plugin-catalog-common" "^1.0.25" - "@backstage/plugin-catalog-react" "^1.12.2" - "@backstage/plugin-permission-react" "^0.4.24" - "@backstage/plugin-scaffolder-common" "^1.5.4" - "@backstage/plugin-scaffolder-react" "^1.10.0" - "@backstage/types" "^1.1.1" + zod "^3.25.76 || ^4.0.0" + zod-to-json-schema "^3.25.1" + +"@backstage/plugin-scaffolder@^1.36.1": + version "1.36.2" + resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder/-/plugin-scaffolder-1.36.2.tgz#90648a8b54317e14c65dc5cbdc16a8c599860e76" + integrity sha512-E6xOYZPT26TsLXFMOsrO/+gFBDeQp/I99EOUb4vFTO+nR2rKdd6qSa3L8rdw2dqM9squjMP9YGkTwRshpo21hA== + dependencies: + "@backstage/catalog-client" "^1.15.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/errors" "^1.3.0" + "@backstage/frontend-plugin-api" "^0.16.0" + "@backstage/integration" "^2.0.1" + "@backstage/integration-react" "^1.2.17" + "@backstage/plugin-catalog-common" "^1.1.9" + "@backstage/plugin-catalog-react" "^2.1.2" + "@backstage/plugin-permission-react" "^0.5.0" + "@backstage/plugin-scaffolder-common" "^2.1.0" + "@backstage/plugin-scaffolder-react" "^1.20.1" + "@backstage/plugin-techdocs-common" "^0.1.1" + "@backstage/plugin-techdocs-react" "^1.3.10" + "@backstage/types" "^1.2.2" + "@backstage/ui" "^0.14.0" "@codemirror/language" "^6.0.0" "@codemirror/legacy-modes" "^6.1.0" "@codemirror/view" "^6.0.0" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.61" - "@microsoft/fetch-event-source" "^2.0.1" "@react-hookz/web" "^24.0.0" - "@rjsf/core" "5.18.5" - "@rjsf/material-ui" "5.18.5" - "@rjsf/utils" "5.18.5" - "@rjsf/validator-ajv8" "5.18.5" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" + "@remixicon/react" "^4.6.0" + "@rjsf/core" "5.24.13" + "@rjsf/material-ui" "5.24.13" + "@rjsf/utils" "5.24.13" + "@rjsf/validator-ajv8" "5.24.13" "@uiw/react-codemirror" "^4.9.3" classnames "^2.2.6" - git-url-parse "^14.0.0" + git-url-parse "^15.0.0" humanize-duration "^3.25.1" + idb-keyval "5.1.5" json-schema "^0.4.0" json-schema-library "^9.0.0" jszip "^3.10.1" @@ -4417,215 +4617,204 @@ luxon "^3.0.0" qs "^6.9.4" react-resizable "^3.0.5" + react-resizable-panels "^3.0.4" react-use "^17.2.4" react-window "^1.8.10" yaml "^2.0.0" - zen-observable "^0.10.0" - zod "^3.22.4" - zod-to-json-schema "^3.20.4" - -"@backstage/plugin-search-backend-module-catalog@^0.1.27", "@backstage/plugin-search-backend-module-catalog@^0.1.28": - version "0.1.28" - resolved "https://registry.yarnpkg.com/@backstage/plugin-search-backend-module-catalog/-/plugin-search-backend-module-catalog-0.1.28.tgz#ca400f1a46113321906ebd4ffd26e1ea1b0bca8b" - integrity sha512-guuve+HWTwAWSrKzl9XwFZBu3nJcMECs+h/RSnGtkjrcq8qUYuAsJ8WVYLf5yw5WkFGN2ZczhqAEzPjgNL2WNw== - dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/backend-tasks" "^0.5.27" - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-catalog-common" "^1.0.25" - "@backstage/plugin-catalog-node" "^1.12.4" - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/plugin-search-backend-node" "^1.2.27" - "@backstage/plugin-search-common" "^1.2.13" - -"@backstage/plugin-search-backend-module-pg@^0.5.31": - version "0.5.32" - resolved "https://registry.yarnpkg.com/@backstage/plugin-search-backend-module-pg/-/plugin-search-backend-module-pg-0.5.32.tgz#d8ec4024139706e5e3d51d7ed9ba80c7a2f9cd99" - integrity sha512-2roOmxjL0E/il4LcYGH/08B5PNyGODBeTcpUk/P5l/Smgu7A7tKoXGq9fvddO/GJzDKcgvhy1I6nj0g+MTgqVw== - dependencies: - "@backstage/backend-app-api" "^0.8.0" - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config" "^1.2.0" - "@backstage/plugin-search-backend-node" "^1.2.27" - "@backstage/plugin-search-common" "^1.2.13" - knex "^3.0.0" - lodash "^4.17.21" - uuid "^9.0.0" - winston "^3.2.1" - -"@backstage/plugin-search-backend-module-techdocs@^0.1.26", "@backstage/plugin-search-backend-module-techdocs@^0.1.27": - version "0.1.27" - resolved "https://registry.yarnpkg.com/@backstage/plugin-search-backend-module-techdocs/-/plugin-search-backend-module-techdocs-0.1.27.tgz#da3403f5ad591d2a66702678fb4fa6a4a20db67f" - integrity sha512-JnqLycCYS27W5o64QrpIdsuBAsvs/PsR4u9mhG3PzYvXtXXkitYzLDspQHHFTQc2LUyCoMkyPdLGl0cX3QAAjA== - dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/backend-tasks" "^0.5.27" - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/config" "^1.2.0" - "@backstage/plugin-catalog-common" "^1.0.25" - "@backstage/plugin-catalog-node" "^1.12.4" - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/plugin-search-backend-node" "^1.2.27" - "@backstage/plugin-search-common" "^1.2.13" - "@backstage/plugin-techdocs-node" "^1.12.8" + zod "^3.25.76 || ^4.0.0" + zod-to-json-schema "^3.25.1" + +"@backstage/plugin-search-backend-module-catalog@^0.3.13": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@backstage/plugin-search-backend-module-catalog/-/plugin-search-backend-module-catalog-0.3.14.tgz#b492f81c270cf063f045b01fbf4967c0f283b326" + integrity sha512-8YKDPfTZIePV3ILiSu1EzSiM12ffw+Wx6H8LCwVYvURzcLMYnYz56fQiWTZOfP9VoCuXtw+++Nz5Hzp6ryIyag== + dependencies: + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-client" "^1.15.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/plugin-catalog-common" "^1.1.9" + "@backstage/plugin-catalog-node" "^2.2.0" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-search-backend-node" "^1.4.3" + "@backstage/plugin-search-common" "^1.2.23" + +"@backstage/plugin-search-backend-module-techdocs@^0.4.12": + version "0.4.13" + resolved "https://registry.yarnpkg.com/@backstage/plugin-search-backend-module-techdocs/-/plugin-search-backend-module-techdocs-0.4.13.tgz#f6360e83496b77ac512f1236830e5a88d1d16ca5" + integrity sha512-NqsR28R3nBYSh+ykKZYqBCsU/bOGK5srOfsZkLEyb7pcZKUtme4JCO4aivwDQBwy1ysmRgYDZFAHO3Nkbn9Fpg== + dependencies: + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-client" "^1.15.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/config" "^1.3.7" + "@backstage/plugin-catalog-common" "^1.1.9" + "@backstage/plugin-catalog-node" "^2.2.0" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-search-backend-node" "^1.4.3" + "@backstage/plugin-search-common" "^1.2.23" + "@backstage/plugin-techdocs-node" "^1.14.5" lodash "^4.17.21" - node-fetch "^2.6.7" p-limit "^3.1.0" -"@backstage/plugin-search-backend-node@^1.2.26", "@backstage/plugin-search-backend-node@^1.2.27": - version "1.2.27" - resolved "https://registry.yarnpkg.com/@backstage/plugin-search-backend-node/-/plugin-search-backend-node-1.2.27.tgz#087181c4e76113c5e0dd7770a7ce899fe9f88afd" - integrity sha512-kh55tMLP1Oi07LfnKlKfNPvwSrqr+uttiUjDP1BWoILZVshYT8OoeONb5ySLu3gei+9arnrtRmt4q9ewJNwplQ== - dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/backend-tasks" "^0.5.27" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/plugin-search-common" "^1.2.13" +"@backstage/plugin-search-backend-node@^1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@backstage/plugin-search-backend-node/-/plugin-search-backend-node-1.4.3.tgz#aa847ad9af4c9c047669ae7e30d800019dbccd2f" + integrity sha512-el19m1XBs78n3rGdK6wbTPZK4kBfBFnanwYPSuBZfmY2eRUG0qSVkzrUFU7EYkVShIbLYuvtONIOO1PSWwcp0w== + dependencies: + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-search-common" "^1.2.23" "@types/lunr" "^2.3.3" lodash "^4.17.21" lunr "^2.3.9" ndjson "^2.0.0" - uuid "^9.0.0" + uuid "^11.0.0" -"@backstage/plugin-search-backend@^1.5.13": - version "1.5.14" - resolved "https://registry.yarnpkg.com/@backstage/plugin-search-backend/-/plugin-search-backend-1.5.14.tgz#f9acaa881cb9d3a5d89aa1cc2bb8d369e1f7d7dd" - integrity sha512-vcKf868KEBwllvBMQpcaBFlx27sQCAdl6Hxw/iwkoDN92/b0r1FYSttkZKcVtxP5u3tswSMzL5vvA7CDn9XXLA== - dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-defaults" "^0.4.0" - "@backstage/backend-openapi-utils" "^0.1.15" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/plugin-permission-node" "^0.8.0" - "@backstage/plugin-search-backend-node" "^1.2.27" - "@backstage/plugin-search-common" "^1.2.13" - "@backstage/types" "^1.1.1" - "@types/express" "^4.17.6" +"@backstage/plugin-search-backend@^2.1.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@backstage/plugin-search-backend/-/plugin-search-backend-2.1.1.tgz#a4e5265d2e162fb8c4be06cb7d140f3c1213ccd9" + integrity sha512-CTjFkHafm34VesvuEKYA+XC7rkmle/HusZRGFOm4WDuFRf1fOq7ufux0Ph1siy/hGbryITGM4ykY7c5GcdNVag== + dependencies: + "@backstage/backend-openapi-utils" "^0.6.8" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-permission-node" "^0.10.12" + "@backstage/plugin-search-backend-node" "^1.4.3" + "@backstage/plugin-search-common" "^1.2.23" + "@backstage/types" "^1.2.2" dataloader "^2.0.0" - express "^4.17.1" + express "^4.22.0" lodash "^4.17.21" qs "^6.10.1" - winston "^3.2.1" yn "^4.0.0" - zod "^3.22.4" - -"@backstage/plugin-search-common@^1.2.13": - version "1.2.13" - resolved "https://registry.yarnpkg.com/@backstage/plugin-search-common/-/plugin-search-common-1.2.13.tgz#393899d80d9efad53fd0a285d5aea7acccef1d5a" - integrity sha512-DgkQ6ld8vz3NoRYmk7U0lUy6H6K82mXaDbDuBZoWJm8fActA0ZGU2YkkhSq+W0yUYn6xmLIB5rC5AwRkGSYcSw== - dependencies: - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/types" "^1.1.1" - -"@backstage/plugin-search-react@^1.7.12", "@backstage/plugin-search-react@^1.7.13": - version "1.7.13" - resolved "https://registry.yarnpkg.com/@backstage/plugin-search-react/-/plugin-search-react-1.7.13.tgz#dbb0287a52e174d6bbdddd0cc004786ad5a7d3e4" - integrity sha512-3FTKHDlplEBDbPvk6yGnHw6qOcSJ8ww2VOTTe5/lPJCtFZY7gRiUuySCHdl+zByvtPHSHyG0zORZEDRt/7C4CA== - dependencies: - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/frontend-plugin-api" "^0.6.7" - "@backstage/plugin-search-common" "^1.2.13" - "@backstage/theme" "^0.5.6" - "@backstage/types" "^1.1.1" - "@backstage/version-bridge" "^1.0.8" + zod "^3.25.76 || ^4.0.0" + +"@backstage/plugin-search-common@^1.2.23": + version "1.2.23" + resolved "https://registry.yarnpkg.com/@backstage/plugin-search-common/-/plugin-search-common-1.2.23.tgz#ba2696bf3b0ee448335bbf196f5a674f924f1a08" + integrity sha512-/4kGeHOv4+zf5Y7s3WuV73Z6vr9nw9WKhx5S+4q38NCw8oZZDmJni/FHFLSJia1Gg1KMahT1H9B8tPSHE7os1A== + dependencies: + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/types" "^1.2.2" + +"@backstage/plugin-search-react@^1.11.0", "@backstage/plugin-search-react@^1.11.3": + version "1.11.3" + resolved "https://registry.yarnpkg.com/@backstage/plugin-search-react/-/plugin-search-react-1.11.3.tgz#b58e7659687a475f5287e74f4db172085ea947df" + integrity sha512-acbKD3dRi4QiVNSj8S35NaVDPPZEgqsi+IppyKoxdy57gzTAQbHg57gT/8eqx22rz6BOiwSstosQTUKj8pMSMg== + dependencies: + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/frontend-plugin-api" "^0.16.2" + "@backstage/plugin-search-common" "^1.2.23" + "@backstage/theme" "^0.7.3" + "@backstage/types" "^1.2.2" + "@backstage/version-bridge" "^1.0.12" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.61" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" lodash "^4.17.21" qs "^6.9.4" react-use "^17.3.2" + uuid "^11.0.2" + zod "^4.0.0" -"@backstage/plugin-search@^1.4.13": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@backstage/plugin-search/-/plugin-search-1.4.14.tgz#2b9a697266e32993d9b66cb88ee54661e7fd3f8a" - integrity sha512-ZPghP7LtUHQIh5Ia/zV74IkOYaFPRo2fIL7OT3a/mA4sodW/c1bMjGRSVeRVgeWZC2ozJoO1ZYvyod7amN4qtg== - dependencies: - "@backstage/core-compat-api" "^0.2.7" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/errors" "^1.2.4" - "@backstage/frontend-plugin-api" "^0.6.7" - "@backstage/plugin-catalog-react" "^1.12.2" - "@backstage/plugin-search-common" "^1.2.13" - "@backstage/plugin-search-react" "^1.7.13" - "@backstage/types" "^1.1.1" - "@backstage/version-bridge" "^1.0.8" +"@backstage/plugin-search@^1.7.0": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@backstage/plugin-search/-/plugin-search-1.7.3.tgz#b604bed7b967299f7f7ef206cb368c857677dd1f" + integrity sha512-64+kdIFF16diIJqPbVEXtvNL1izqg9KD9eF81+gCU4zNPt24+FRxwirJ3jE+9O/mtUiac/52+UxkQkvwKqorxQ== + dependencies: + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/errors" "^1.3.0" + "@backstage/frontend-plugin-api" "^0.16.2" + "@backstage/plugin-catalog-react" "^2.1.4" + "@backstage/plugin-search-common" "^1.2.23" + "@backstage/plugin-search-react" "^1.11.3" + "@backstage/types" "^1.2.2" + "@backstage/ui" "^0.14.2" + "@backstage/version-bridge" "^1.0.12" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" qs "^6.9.4" react-use "^17.2.4" - -"@backstage/plugin-signals-react@^0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@backstage/plugin-signals-react/-/plugin-signals-react-0.0.4.tgz#37dbba59de44ab2485645875d9550b242ebc71bb" - integrity sha512-ckR1QbJlV7zF+Z8nrFSQUDvgXDQRYko8EOIKhJAgWmLHqzCMfUE3sBWFTc8QXljPzbQXqCfeuHqpvPsPQ7m7mg== - dependencies: - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/types" "^1.1.1" + zod "^4.0.0" + +"@backstage/plugin-signals-node@^0.1.26": + version "0.1.29" + resolved "https://registry.yarnpkg.com/@backstage/plugin-signals-node/-/plugin-signals-node-0.1.29.tgz#1df2ee6a730187e1b341d4baedc8a61396fbc681" + integrity sha512-UyxZf/m4ct5owQPLATXo5lQPfy21t2/3t1OCKM/Ph5obSvmq9HflBr01lvoQaRplpsxneBh3+R/BjzMBjTzLOg== + dependencies: + "@backstage/backend-plugin-api" "^1.8.0" + "@backstage/config" "^1.3.6" + "@backstage/plugin-auth-node" "^0.6.14" + "@backstage/plugin-events-node" "^0.4.20" + "@backstage/types" "^1.2.2" + express "^4.22.0" + uuid "^11.0.0" + ws "^8.18.0" + +"@backstage/plugin-signals-react@^0.0.21": + version "0.0.21" + resolved "https://registry.yarnpkg.com/@backstage/plugin-signals-react/-/plugin-signals-react-0.0.21.tgz#44931632246ad7cf3712e46ebf2dfb4015ee31fa" + integrity sha512-nbrYwF/KLQmmsgqgtxCII9gie4i8sUBuD14F5Kzk2/HIZLZLlDXCs4JEiW1dQ+xCgiSKJkewQgFziF35RsRZRA== + dependencies: + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/types" "^1.2.2" "@material-ui/core" "^4.12.4" -"@backstage/plugin-techdocs-backend@^1.10.8": - version "1.10.9" - resolved "https://registry.yarnpkg.com/@backstage/plugin-techdocs-backend/-/plugin-techdocs-backend-1.10.9.tgz#731c1fd5ea84d2cd64f85b1ff61f53f594e8cedd" - integrity sha512-/0elT2n2onBfHv1YKQx84uDsg+nPbH86RL9IiT8riM3hlxLHeNUlzDLeLy1uQ3f003tYcZB5qSybk5u+KGtXlQ== - dependencies: - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/catalog-client" "^1.6.5" - "@backstage/catalog-model" "^1.5.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.13.0" - "@backstage/plugin-catalog-common" "^1.0.25" - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/plugin-search-backend-module-techdocs" "^0.1.27" - "@backstage/plugin-techdocs-node" "^1.12.8" - "@types/express" "^4.17.6" - express "^4.17.1" +"@backstage/plugin-techdocs-backend@^2.1.6": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@backstage/plugin-techdocs-backend/-/plugin-techdocs-backend-2.1.7.tgz#c33af1dd80149744039ba599ce2a0248218edbea" + integrity sha512-myuaK2ESJj2PmYD5xBODAZL2ymjsHPIpACcow8DWXI/PkdKgc6/y24gz/FlDATY0KQMccjS0/IiMOggTWWEKIg== + dependencies: + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-client" "^1.15.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/integration" "^2.0.1" + "@backstage/plugin-catalog-node" "^2.2.0" + "@backstage/plugin-techdocs-node" "^1.14.5" + "@backstage/types" "^1.2.2" + express "^4.22.0" express-promise-router "^4.1.0" fs-extra "^11.2.0" knex "^3.0.0" - lodash "^4.17.21" - node-fetch "^2.6.7" p-limit "^3.1.0" winston "^3.2.1" -"@backstage/plugin-techdocs-module-addons-contrib@^1.1.11": - version "1.1.12" - resolved "https://registry.yarnpkg.com/@backstage/plugin-techdocs-module-addons-contrib/-/plugin-techdocs-module-addons-contrib-1.1.12.tgz#2365a8d53a1dbc84492ba4a9f5086af332a17c2a" - integrity sha512-VqSRDowRGqTa9RMxo/CSsVW7Mez3qNwq/NksUuYZlLTDTrlj2o3WyUQfuQvlVr+oq4ch/JwNdvBZG4dbd5ArDQ== - dependencies: - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/integration" "^1.13.0" - "@backstage/integration-react" "^1.1.29" - "@backstage/plugin-techdocs-react" "^1.2.6" +"@backstage/plugin-techdocs-common@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@backstage/plugin-techdocs-common/-/plugin-techdocs-common-0.1.1.tgz#b392d6c043149bf5aee552dffeb81ffa98dc0fd8" + integrity sha512-MWYW1uVweSJQkI9it2g0xM/4YfykS0GzIlbA3D9YawQIfqQ7UCdsblKHt2Xb3eWLrk+itWrp4IXbW2bUa02DyA== + +"@backstage/plugin-techdocs-module-addons-contrib@^1.1.34": + version "1.1.35" + resolved "https://registry.yarnpkg.com/@backstage/plugin-techdocs-module-addons-contrib/-/plugin-techdocs-module-addons-contrib-1.1.35.tgz#29a0dc810fb2ecd034eb7ab83acb735ff7f87d7d" + integrity sha512-eJI4CM1Joiaz+GiMUxASlyf32+eIuwhuMZahZnMCa2ujEPXHIJIqSb7xmOmpcWpSztCgCpBkvlgG4VzoMx8DwQ== + dependencies: + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/frontend-plugin-api" "^0.16.0" + "@backstage/integration" "^2.0.1" + "@backstage/integration-react" "^1.2.17" + "@backstage/plugin-techdocs-react" "^1.3.10" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@react-hookz/web" "^24.0.0" - git-url-parse "^14.0.0" + git-url-parse "^15.0.0" photoswipe "^5.3.7" -"@backstage/plugin-techdocs-node@^1.12.8": - version "1.12.8" - resolved "https://registry.yarnpkg.com/@backstage/plugin-techdocs-node/-/plugin-techdocs-node-1.12.8.tgz#7526a96e77ea0ad71305e5da0d3fb7345c38d6e7" - integrity sha512-IzOn8p9EbpXEjI4B0yg0PChjTaySaUQP/ZxUCWRSPC32t14E5YlMOU3pCLCtqW27l+v8438lr0s5Css5XMVbJA== +"@backstage/plugin-techdocs-node@^1.14.5": + version "1.14.5" + resolved "https://registry.yarnpkg.com/@backstage/plugin-techdocs-node/-/plugin-techdocs-node-1.14.5.tgz#550174157c31efca221904985dc86f7c0168d17f" + integrity sha512-tK6LN4Yc13S19B1MyxN3wzL/eo/A61ZR/KBpRDxnDmEBU35aFtv+Dsi/1fx3K9ox0OA8h8wby/gkaNIEKf1q9g== dependencies: "@aws-sdk/client-s3" "^3.350.0" "@aws-sdk/credential-providers" "^3.350.0" @@ -4633,22 +4822,22 @@ "@aws-sdk/types" "^3.347.0" "@azure/identity" "^4.0.0" "@azure/storage-blob" "^12.5.0" - "@backstage/backend-common" "^0.23.3" - "@backstage/backend-plugin-api" "^0.7.0" - "@backstage/catalog-model" "^1.5.0" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/integration" "^1.13.0" - "@backstage/integration-aws-node" "^0.1.12" - "@backstage/plugin-search-common" "^1.2.13" + "@backstage/backend-plugin-api" "^1.9.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/config" "^1.3.7" + "@backstage/errors" "^1.3.0" + "@backstage/integration" "^2.0.1" + "@backstage/integration-aws-node" "^0.1.21" + "@backstage/plugin-search-common" "^1.2.23" + "@backstage/plugin-techdocs-common" "^0.1.1" "@google-cloud/storage" "^7.0.0" - "@smithy/node-http-handler" "^2.1.7" + "@smithy/node-http-handler" "^3.0.0" "@trendyol-js/openstack-swift-sdk" "^0.0.7" "@types/express" "^4.17.6" dockerode "^4.0.0" - express "^4.17.1" + express "^4.22.0" fs-extra "^11.2.0" - git-url-parse "^14.0.0" + git-url-parse "^15.0.0" hpagent "^1.2.0" js-yaml "^4.0.0" json5 "^2.1.3" @@ -4657,124 +4846,127 @@ recursive-readdir "^2.2.2" winston "^3.2.1" -"@backstage/plugin-techdocs-react@^1.2.5", "@backstage/plugin-techdocs-react@^1.2.6": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@backstage/plugin-techdocs-react/-/plugin-techdocs-react-1.2.6.tgz#c557cfe547cd8131f32139f3d9aa7286d1a6b9f3" - integrity sha512-BRvOOKOEuuYlYhY5ptlT2FZamJZg+An+H6eLWgOygOb39SdApp15e65mnbFyh0PFyUepgHrnMpnmtEvbHNNgEQ== - dependencies: - "@backstage/catalog-model" "^1.5.0" - "@backstage/config" "^1.2.0" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/version-bridge" "^1.0.8" +"@backstage/plugin-techdocs-react@^1.3.10", "@backstage/plugin-techdocs-react@^1.3.9": + version "1.3.10" + resolved "https://registry.yarnpkg.com/@backstage/plugin-techdocs-react/-/plugin-techdocs-react-1.3.10.tgz#e3fb2ccf2e3d78435142193671d6b8177574e20f" + integrity sha512-cvU0fqidMwtlvKb1OVMAkO2OOZB9+h3YW57b7qtOmBc9/TwtoK2zLYu/XKzySZYp7nIEkKYMxcfnJ30oxQD40g== + dependencies: + "@backstage/catalog-model" "^1.8.0" + "@backstage/config" "^1.3.7" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/frontend-plugin-api" "^0.16.0" + "@backstage/plugin-techdocs-common" "^0.1.1" + "@backstage/version-bridge" "^1.0.12" "@material-ui/core" "^4.12.2" "@material-ui/styles" "^4.11.0" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" jss "~10.10.0" lodash "^4.17.21" react-helmet "6.1.0" react-use "^17.2.4" -"@backstage/plugin-techdocs@^1.10.6": - version "1.10.7" - resolved "https://registry.yarnpkg.com/@backstage/plugin-techdocs/-/plugin-techdocs-1.10.7.tgz#38e5cdf7c1f884c496d2c1af8955c3f82989c67f" - integrity sha512-ESMSM+wRPJrJHhlCqyiWQQSgVDCoE7ngHIOkOYLniFg/bEayGeIa/XKfgEs4ENmUDODB57fkOiTpdhcq/9ifoA== - dependencies: - "@backstage/catalog-model" "^1.5.0" - "@backstage/config" "^1.2.0" - "@backstage/core-compat-api" "^0.2.7" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/errors" "^1.2.4" - "@backstage/frontend-plugin-api" "^0.6.7" - "@backstage/integration" "^1.13.0" - "@backstage/integration-react" "^1.1.29" - "@backstage/plugin-auth-react" "^0.1.4" - "@backstage/plugin-catalog-react" "^1.12.2" - "@backstage/plugin-search-common" "^1.2.13" - "@backstage/plugin-search-react" "^1.7.13" - "@backstage/plugin-techdocs-react" "^1.2.6" - "@backstage/theme" "^0.5.6" +"@backstage/plugin-techdocs@^1.17.2": + version "1.17.5" + resolved "https://registry.yarnpkg.com/@backstage/plugin-techdocs/-/plugin-techdocs-1.17.5.tgz#32387a044fc966578a2c589985347603efdad963" + integrity sha512-QFq/UZF53bq7EEKhsiK4HeF23C4wBX8EJ7GQyGCZUrIfb+Mg97J62S9tGhUyBEHq/aUfKaOU+QzE31faspMrrQ== + dependencies: + "@backstage/catalog-client" "^1.15.0" + "@backstage/catalog-model" "^1.8.0" + "@backstage/config" "^1.3.7" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/errors" "^1.3.0" + "@backstage/frontend-plugin-api" "^0.16.2" + "@backstage/integration" "^2.0.1" + "@backstage/integration-react" "^1.2.17" + "@backstage/plugin-auth-react" "^0.1.26" + "@backstage/plugin-catalog-react" "^2.1.4" + "@backstage/plugin-search-common" "^1.2.23" + "@backstage/plugin-search-react" "^1.11.3" + "@backstage/plugin-techdocs-common" "^0.1.1" + "@backstage/plugin-techdocs-react" "^1.3.10" + "@backstage/theme" "^0.7.3" + "@backstage/ui" "^0.14.2" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.61" "@material-ui/styles" "^4.10.0" "@microsoft/fetch-event-source" "^2.0.1" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" - dompurify "^3.0.0" - git-url-parse "^14.0.0" - jss "~10.10.0" + "@remixicon/react" "^4.6.0" + dompurify "^3.3.2" + git-url-parse "^15.0.0" lodash "^4.17.21" react-helmet "6.1.0" react-use "^17.2.4" + zod "^4.0.0" -"@backstage/plugin-user-settings-common@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@backstage/plugin-user-settings-common/-/plugin-user-settings-common-0.0.1.tgz#1bf6d16b814ab52b2d4b85f4eb41544a2a631b6c" - integrity sha512-1zLm0746Oay5SaT6B/ydrMzMxQQO0G415T9IAo8np0nbwkFQM69VtXYDz6J0S0oZMkfPqlpV7mIJyrJrPZdjxQ== - -"@backstage/plugin-user-settings@^0.8.8": - version "0.8.10" - resolved "https://registry.yarnpkg.com/@backstage/plugin-user-settings/-/plugin-user-settings-0.8.10.tgz#80bd8313b8a7b6bc3c8c6bebaee2dfe62a8b5b70" - integrity sha512-xArI0L02m0p5qs7AmEjKDtGSo9VekX6aSSW7JHrF1oUa3nDwuKqBFwYFPYvL6r4BFQ1amGoUrAWU/ntxl/Nu5g== - dependencies: - "@backstage/core-app-api" "^1.14.1" - "@backstage/core-compat-api" "^0.2.7" - "@backstage/core-components" "^0.14.9" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/errors" "^1.2.4" - "@backstage/frontend-plugin-api" "^0.6.7" - "@backstage/plugin-catalog-react" "^1.12.2" - "@backstage/plugin-signals-react" "^0.0.4" - "@backstage/plugin-user-settings-common" "^0.0.1" - "@backstage/theme" "^0.5.6" - "@backstage/types" "^1.1.1" +"@backstage/plugin-user-settings-common@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@backstage/plugin-user-settings-common/-/plugin-user-settings-common-0.1.0.tgz#479a1e8e5fa85c0bfb451420b7023e4584b2453c" + integrity sha512-hAqgQrlSt9FvLVTwpPj/yKkS8NuDwAlMxqrsqlHXQ4Fho+THP4VI5SN5Qi2pDyhn//pZ7vtzrC0eEApDXHDjJg== + dependencies: + "@backstage/types" "^1.2.2" + +"@backstage/plugin-user-settings@^0.9.1": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@backstage/plugin-user-settings/-/plugin-user-settings-0.9.2.tgz#e9c616de2ca7783cbc1f66057b12c8acd692535b" + integrity sha512-XA2nwUsUsOW+yw7MoSS0ikeqzG+jaqo3rD8LAKxDRKR1SgLFqi3Ixr+XcTA4IDrvmGdFDorF0N1VMUSzmmBMkw== + dependencies: + "@backstage/catalog-model" "^1.8.0" + "@backstage/core-app-api" "^1.20.0" + "@backstage/core-components" "^0.18.9" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/errors" "^1.3.0" + "@backstage/frontend-plugin-api" "^0.16.0" + "@backstage/plugin-catalog-react" "^2.1.2" + "@backstage/plugin-signals-react" "^0.0.21" + "@backstage/plugin-user-settings-common" "^0.1.0" + "@backstage/theme" "^0.7.3" + "@backstage/types" "^1.2.2" + "@backstage/ui" "^0.14.0" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.61" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" + dataloader "^2.0.0" react-use "^17.2.4" zen-observable "^0.10.0" -"@backstage/release-manifests@^0.0.11": - version "0.0.11" - resolved "https://registry.npmmirror.com/@backstage/release-manifests/-/release-manifests-0.0.11.tgz#e842816d249f6903c8121253358a3211425ac83e" - integrity sha512-OZFwv7ohRRB9fDQ+fShgQgM5H4VvKXAtvErSjZCmqGnUiNpyT9e/km0wF2/QVTm2ry5kCEj37f/B/dDp0gmNAw== - dependencies: - cross-fetch "^4.0.0" - -"@backstage/test-utils@^1.5.7": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@backstage/test-utils/-/test-utils-1.5.9.tgz#397959c30598d2e5cab0b62a3ccfbc2db263d3a5" - integrity sha512-m/9dPrseTJRZ0Scu6lKt5K+GWTAI5An/2CtvthCZ7RuN4TVKRLFhL46QY+xjEkObjK4c6XCC3MUFEjHN00KZag== - dependencies: - "@backstage/config" "^1.2.0" - "@backstage/core-app-api" "^1.14.1" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/plugin-permission-common" "^0.8.0" - "@backstage/plugin-permission-react" "^0.4.24" - "@backstage/theme" "^0.5.6" - "@backstage/types" "^1.1.1" +"@backstage/release-manifests@^0.0.13": + version "0.0.13" + resolved "https://registry.yarnpkg.com/@backstage/release-manifests/-/release-manifests-0.0.13.tgz#2d2bac16ca657f77c641dc190523de55b4920477" + integrity sha512-NF+Fl1b746A9b39dQqvzC237k5/QUWcfGVMp8ZYjoQ48hrY1UdH7xiwrLB7WmhvYIMRzdjhY3uR1FM67EQFPQw== + +"@backstage/test-utils@^1.7.14", "@backstage/test-utils@^1.7.16": + version "1.7.17" + resolved "https://registry.yarnpkg.com/@backstage/test-utils/-/test-utils-1.7.17.tgz#e188007191752b2e2415e89fd2e63dde59f1dcd5" + integrity sha512-8aoC6ox9ltqSlp2u1Xsf22BQJUSqgqmddmt0cVxFDC8HzCk+kBZCsqRxZH2/2tkwvKl5VarQSE15zhWNxb6HvA== + dependencies: + "@backstage/config" "^1.3.7" + "@backstage/core-app-api" "^1.20.0" + "@backstage/core-plugin-api" "^1.12.5" + "@backstage/plugin-permission-common" "^0.9.8" + "@backstage/plugin-permission-react" "^0.5.0" + "@backstage/theme" "^0.7.3" + "@backstage/types" "^1.2.2" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" - "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" cross-fetch "^4.0.0" i18next "^22.4.15" zen-observable "^0.10.0" -"@backstage/theme@^0.4.4": - version "0.4.4" - resolved "https://registry.npmmirror.com/@backstage/theme/-/theme-0.4.4.tgz#807735b58a5e1b2a0cdb50fc05ad83656f2f66cb" - integrity sha512-Mvs0FrEnQtyO2dVNPyo1wjkNHbN3vefIdj4V27SFiX9W9sj+R1b4rzFACF6xjVzfdV9oo9HdsL59CMnFlDxz4Q== +"@backstage/theme@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@backstage/theme/-/theme-0.6.8.tgz#703088101ca20205d77de6a688881e909dd57ae4" + integrity sha512-hNUoOjirVIVht6GbDFt6vEej4hA7Kq3trJmyWhKuAKndPD+azjhzMOnGM7Rzj5qIkJeCNB6qcC89+NV6no1HzA== dependencies: "@emotion/react" "^11.10.5" "@emotion/styled" "^11.10.5" "@mui/material" "^5.12.2" -"@backstage/theme@^0.5.0", "@backstage/theme@^0.5.6": - version "0.5.6" - resolved "https://registry.yarnpkg.com/@backstage/theme/-/theme-0.5.6.tgz#18645cbe42fb5667946e0a5dd38f2fb0bb056597" - integrity sha512-7/0sZYAS+2p/eEWC8eBINWHNv4jas6R20e0R5f0fc1YvLnVQ8HhnpZ6+d2vDMe7X2A2TBBcyJbSCybHdRAKpAA== +"@backstage/theme@^0.7.1", "@backstage/theme@^0.7.2", "@backstage/theme@^0.7.3": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@backstage/theme/-/theme-0.7.3.tgz#57442b42dd3ec086769f5cd95303b003fa8fee4c" + integrity sha512-EE9Mm6GjEMDwr/+iXmJfMq2jIJDCnjPbaua5YCtUN/E1Q/FOBcFmijJeTLn8gF0xeEiYxrZhQf0NBRlxfapR/g== dependencies: "@emotion/react" "^11.10.5" "@emotion/styled" "^11.10.5" @@ -4785,27 +4977,58 @@ resolved "https://registry.npmmirror.com/@backstage/types/-/types-1.1.1.tgz#c9ccb30357005e7fb5fa2ac140198059976eb076" integrity sha512-1cUGu+FwiJZCBOuecd0BOhIRkQYllb+7no9hHhxpAsx/DvsPGMVQMGOMvtdTycdT9SQ5MuSyFwI9wpXp2DwVvQ== -"@backstage/version-bridge@^1.0.7", "@backstage/version-bridge@^1.0.8": - version "1.0.8" - resolved "https://registry.npmmirror.com/@backstage/version-bridge/-/version-bridge-1.0.8.tgz#c6664708bcd20744e7b2c440a03f1e44f7c4a2a1" - integrity sha512-f4u5YEq/+TLe/W4UnsiD8u15qcuyFx2tuO/RDrJ2c/ulm4TuSeEcupMs7b9oa2Pge5IQAISadz0em1c+VDIB+g== - dependencies: - "@types/react" "^16.13.1 || ^17.0.0" +"@backstage/types@^1.2.1", "@backstage/types@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@backstage/types/-/types-1.2.2.tgz#280e3dec7be5bcddc54ee0e8a024a2768d274692" + integrity sha512-gCctHIL3VSCKiffbWDq4Zl2n7g8NPO/dD2ksdOEm9KzWfb5AubsfQzakoKjZ8XvmdaY9jY7j1yRmHSjAqq7rBA== + +"@backstage/ui@^0.13.0", "@backstage/ui@^0.13.2": + version "0.13.3" + resolved "https://registry.yarnpkg.com/@backstage/ui/-/ui-0.13.3.tgz#5c71d2848fdaf084b0185e642228a1117577713f" + integrity sha512-e9t4KyZiS8IsZIxLs2a9GQFzmDd6gq27U1L6C/Tg0uyqluuEELD7AywFnFtNUb9BS5YrWY7gpTzq+OlTwtBvkw== + dependencies: + "@backstage/version-bridge" "^1.0.12" + "@react-aria/interactions" "~3.27.1" + "@react-stately/layout" "~4.6.0" + "@react-stately/overlays" "~3.6.23" + "@react-types/calendar" "~3.8.3" + "@react-types/table" "~3.13.6" + "@remixicon/react" "^4.6.0" + "@tanstack/react-table" "^8.21.3" + clsx "^2.1.1" + react-aria-components "~1.16.0" + use-sync-external-store "^1.4.0" + +"@backstage/ui@^0.14.0", "@backstage/ui@^0.14.2": + version "0.14.3" + resolved "https://registry.yarnpkg.com/@backstage/ui/-/ui-0.14.3.tgz#e0d5224854779aceec37f40a9fbe57b725ade137" + integrity sha512-AIfGG8IGr5fRi8JaWpKqG2cEMdJ7hFlL/CXh/ojoUC9V8Wa+7jA5w5+DuNwa4F2aqtnp5jEr79wSuQnpsi1i7g== + dependencies: + "@backstage/version-bridge" "^1.0.12" + "@remixicon/react" "^4.6.0" + "@tanstack/react-table" "^8.21.3" + clsx "^2.1.1" + react-aria "~3.48.0" + react-aria-components "~1.17.0" + react-stately "~3.46.0" + use-sync-external-store "^1.4.0" + +"@backstage/version-bridge@^1.0.11", "@backstage/version-bridge@^1.0.12": + version "1.0.12" + resolved "https://registry.yarnpkg.com/@backstage/version-bridge/-/version-bridge-1.0.12.tgz#04e85e5ad1f59e9ae70eec10a03fe6c3f2aa26c0" + integrity sha512-n+JfiPw7KCpGSNG+v47+W2gTwBdRTTkcikLGvm29A7SG91NYDee7fhBhYTXQ1vOHJpj1yBl+2vlrNVTap33Q9g== "@balena/dockerignore@^1.0.2": version "1.0.2" resolved "https://registry.npmmirror.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.npmmirror.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@braintree/sanitize-url@=7.0.0": - version "7.0.0" - resolved "https://registry.npmmirror.com/@braintree/sanitize-url/-/sanitize-url-7.0.0.tgz#8899d8e68a1b3f6933d4ad57a263fd3cf1d34d8a" - integrity sha512-GMu2OJiTd1HSe74bbJYQnVvELANpYiGFZELyyTM1CR0sdv5ReQAcJ/c/8pIrPab3lO11+D+EpuGLUxqz+y832g== +"@bramus/specificity@^2.4.2": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@bramus/specificity/-/specificity-2.4.2.tgz#aa8db8eb173fdee7324f82284833106adeecc648" + integrity sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw== + dependencies: + css-tree "^3.0.0" "@changesets/types@^4.0.1": version "4.1.0" @@ -4893,6 +5116,11 @@ style-mod "^4.1.0" w3c-keyname "^2.2.4" +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + "@colors/colors@1.6.0", "@colors/colors@^1.6.0": version "1.6.0" resolved "https://registry.npmmirror.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" @@ -4905,6 +5133,39 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" +"@csstools/color-helpers@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-6.0.2.tgz#82c59fd30649cf0b4d3c82160489748666e6550b" + integrity sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q== + +"@csstools/css-calc@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-3.2.0.tgz#15ca1a80a026ced0f6c4e12124c398e3db8e1617" + integrity sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w== + +"@csstools/css-color-parser@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-4.1.0.tgz#1d64ea09c548d3ed331648ea0b831e16b80c891c" + integrity sha512-U0KhLYmy2GVj6q4T3WaAe6NPuFYCPQoE3b0dRGxejWDgcPp8TP7S5rVdM5ZrFaqu4N67X8YaPBw14dQSYx3IyQ== + dependencies: + "@csstools/color-helpers" "^6.0.2" + "@csstools/css-calc" "^3.2.0" + +"@csstools/css-parser-algorithms@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz#e1c65dc09378b42f26a111fca7f7075fc2c26164" + integrity sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w== + +"@csstools/css-syntax-patches-for-csstree@^1.0.28": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.3.tgz#3204cf40deb97db83e225b0baa9e37d9c3bd344d" + integrity sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg== + +"@csstools/css-tokenizer@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz#798a33950d11226a0ebb6acafa60f5594424967f" + integrity sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA== + "@dabh/diagnostics@^2.0.2": version "2.0.3" resolved "https://registry.npmmirror.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" @@ -4914,6 +5175,18 @@ enabled "2.0.x" kuler "^2.0.0" +"@dagrejs/dagre@^1.1.4": + version "1.1.8" + resolved "https://registry.yarnpkg.com/@dagrejs/dagre/-/dagre-1.1.8.tgz#fcbee59344c7b4f48b711ba30783543b70029310" + integrity sha512-5SEDlndt4W/LaVzPYJW+bSmSEZc9EzTf8rJ20WCKvjS5EAZAN0b+x0Yww7VMT4R3Wootkg+X9bUfUxazYw6Blw== + dependencies: + "@dagrejs/graphlib" "2.2.4" + +"@dagrejs/graphlib@2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@dagrejs/graphlib/-/graphlib-2.2.4.tgz#d77bfa9ff49e2307c0c6e6b8b26b5dd3c05816c4" + integrity sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw== + "@date-io/core@1.x", "@date-io/core@^1.3.13": version "1.3.13" resolved "https://registry.npmmirror.com/@date-io/core/-/core-1.3.13.tgz#90c71da493f20204b7a972929cc5c482d078b3fa" @@ -4926,15 +5199,27 @@ dependencies: "@date-io/core" "^1.3.13" -"@davidzemon/passport-okta-oauth@^0.0.5": - version "0.0.5" - resolved "https://registry.npmmirror.com/@davidzemon/passport-okta-oauth/-/passport-okta-oauth-0.0.5.tgz#905d14521f4e8b422f4074c1f7fe1cbe0c88e44b" - integrity sha512-eaC2Ve2MIoqR7dLKgpHxhVKRcfgJCes0Fozxm5SefZh/zqLNb8tGIou+dj0EbylksLmB+nVlhr8p8qwjA9n2sA== +"@emnapi/core@^1.5.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.10.0.tgz#380ccc8f2412ea22d1d972df7f8ee23a3b9c7467" + integrity sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw== + dependencies: + "@emnapi/wasi-threads" "1.2.1" + tslib "^2.4.0" + +"@emnapi/runtime@^1.5.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.10.0.tgz#4b260c0d3534204e98c6110b8db1a987d26ec87c" + integrity sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz#28fed21a1ba1ce797c44a070abc94d42f3ae8548" + integrity sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w== dependencies: - "@types/passport-oauth2" "^1.4.11" - passport-oauth2 "^1.6.1" - pkginfo "^0.4.1" - uid2 "^1.0.0" + tslib "^2.4.0" "@emotion/babel-plugin@^11.11.0": version "11.11.0" @@ -4964,6 +5249,17 @@ "@emotion/weak-memoize" "^0.3.1" stylis "4.2.0" +"@emotion/cache@^11.13.5": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" + integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== + dependencies: + "@emotion/memoize" "^0.9.0" + "@emotion/sheet" "^1.4.0" + "@emotion/utils" "^1.4.2" + "@emotion/weak-memoize" "^0.4.0" + stylis "4.2.0" + "@emotion/hash@^0.8.0": version "0.8.0" resolved "https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" @@ -4974,6 +5270,11 @@ resolved "https://registry.npmmirror.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== +"@emotion/hash@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" + integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== + "@emotion/is-prop-valid@^0.8.2": version "0.8.8" resolved "https://registry.npmmirror.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" @@ -4998,6 +5299,11 @@ resolved "https://registry.npmmirror.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== +"@emotion/memoize@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" + integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== + "@emotion/react@^11.10.5": version "11.11.3" resolved "https://registry.npmmirror.com/@emotion/react/-/react-11.11.3.tgz#96b855dc40a2a55f52a72f518a41db4f69c31a25" @@ -5023,11 +5329,27 @@ "@emotion/utils" "^1.2.1" csstype "^3.0.2" +"@emotion/serialize@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" + integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== + dependencies: + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/unitless" "^0.10.0" + "@emotion/utils" "^1.4.2" + csstype "^3.0.2" + "@emotion/sheet@^1.2.2": version "1.2.2" resolved "https://registry.npmmirror.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== +"@emotion/sheet@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" + integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== + "@emotion/styled@^11.10.5": version "11.11.0" resolved "https://registry.npmmirror.com/@emotion/styled/-/styled-11.11.0.tgz#26b75e1b5a1b7a629d7c0a8b708fbf5a9cdce346" @@ -5040,6 +5362,11 @@ "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" "@emotion/utils" "^1.2.1" +"@emotion/unitless@^0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" + integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== + "@emotion/unitless@^0.8.1": version "0.8.1" resolved "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" @@ -5055,240 +5382,265 @@ resolved "https://registry.npmmirror.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== +"@emotion/utils@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" + integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== + "@emotion/weak-memoize@^0.3.1": version "0.3.1" resolved "https://registry.npmmirror.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== +"@emotion/weak-memoize@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" + integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== + "@esbuild/aix-ppc64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== -"@esbuild/aix-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" - integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== +"@esbuild/aix-ppc64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz#82b74f92aa78d720b714162939fb248c90addf53" + integrity sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg== "@esbuild/android-arm64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== -"@esbuild/android-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" - integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== +"@esbuild/android-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz#f78cb8a3121fc205a53285adb24972db385d185d" + integrity sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ== "@esbuild/android-arm@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== -"@esbuild/android-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" - integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== +"@esbuild/android-arm@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.7.tgz#593e10a1450bbfcac6cb321f61f468453bac209d" + integrity sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ== "@esbuild/android-x64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== -"@esbuild/android-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" - integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== +"@esbuild/android-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.7.tgz#453143d073326033d2d22caf9e48de4bae274b07" + integrity sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg== "@esbuild/darwin-arm64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== -"@esbuild/darwin-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" - integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== +"@esbuild/darwin-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz#6f23000fb9b40b7e04b7d0606c0693bd0632f322" + integrity sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw== "@esbuild/darwin-x64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== -"@esbuild/darwin-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" - integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== +"@esbuild/darwin-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz#27393dd18bb1263c663979c5f1576e00c2d024be" + integrity sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ== "@esbuild/freebsd-arm64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== -"@esbuild/freebsd-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" - integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== +"@esbuild/freebsd-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz#22e4638fa502d1c0027077324c97640e3adf3a62" + integrity sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w== "@esbuild/freebsd-x64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== -"@esbuild/freebsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" - integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== +"@esbuild/freebsd-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz#9224b8e4fea924ce2194e3efc3e9aebf822192d6" + integrity sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ== "@esbuild/linux-arm64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== -"@esbuild/linux-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" - integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== +"@esbuild/linux-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz#4f5d1c27527d817b35684ae21419e57c2bda0966" + integrity sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A== "@esbuild/linux-arm@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== -"@esbuild/linux-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" - integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== +"@esbuild/linux-arm@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz#b9e9d070c8c1c0449cf12b20eac37d70a4595921" + integrity sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA== "@esbuild/linux-ia32@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== -"@esbuild/linux-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" - integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== +"@esbuild/linux-ia32@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz#3f80fb696aa96051a94047f35c85b08b21c36f9e" + integrity sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg== "@esbuild/linux-loong64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== -"@esbuild/linux-loong64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" - integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== +"@esbuild/linux-loong64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz#9be1f2c28210b13ebb4156221bba356fe1675205" + integrity sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q== "@esbuild/linux-mips64el@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== -"@esbuild/linux-mips64el@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" - integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== +"@esbuild/linux-mips64el@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz#4ab5ee67a3dfcbcb5e8fd7883dae6e735b1163b8" + integrity sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw== "@esbuild/linux-ppc64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== -"@esbuild/linux-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" - integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== +"@esbuild/linux-ppc64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz#dac78c689f6499459c4321e5c15032c12307e7ea" + integrity sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ== "@esbuild/linux-riscv64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== -"@esbuild/linux-riscv64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" - integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== +"@esbuild/linux-riscv64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz#050f7d3b355c3a98308e935bc4d6325da91b0027" + integrity sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ== "@esbuild/linux-s390x@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== -"@esbuild/linux-s390x@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" - integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== +"@esbuild/linux-s390x@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz#d61f715ce61d43fe5844ad0d8f463f88cbe4fef6" + integrity sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw== "@esbuild/linux-x64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== -"@esbuild/linux-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" - integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== +"@esbuild/linux-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz#ca8e1aa478fc8209257bf3ac8f79c4dc2982f32a" + integrity sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA== + +"@esbuild/netbsd-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz#1650f2c1b948deeb3ef948f2fc30614723c09690" + integrity sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w== "@esbuild/netbsd-x64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== -"@esbuild/netbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" - integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== +"@esbuild/netbsd-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz#65772ab342c4b3319bf0705a211050aac1b6e320" + integrity sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw== + +"@esbuild/openbsd-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz#37ed7cfa66549d7955852fce37d0c3de4e715ea1" + integrity sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A== "@esbuild/openbsd-x64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== -"@esbuild/openbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" - integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== +"@esbuild/openbsd-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz#01bf3d385855ef50cb33db7c4b52f957c34cd179" + integrity sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg== + +"@esbuild/openharmony-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz#6c1f94b34086599aabda4eac8f638294b9877410" + integrity sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw== "@esbuild/sunos-x64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== -"@esbuild/sunos-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" - integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== +"@esbuild/sunos-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz#4b0dd17ae0a6941d2d0fd35a906392517071a90d" + integrity sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA== "@esbuild/win32-arm64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== -"@esbuild/win32-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" - integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== +"@esbuild/win32-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz#34193ab5565d6ff68ca928ac04be75102ccb2e77" + integrity sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA== "@esbuild/win32-ia32@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== -"@esbuild/win32-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" - integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== +"@esbuild/win32-ia32@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz#eb67f0e4482515d8c1894ede631c327a4da9fc4d" + integrity sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw== "@esbuild/win32-x64@0.20.2": version "0.20.2" resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== -"@esbuild/win32-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" - integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== +"@esbuild/win32-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz#8fe30b3088b89b4873c3a6cc87597ae3920c0a8b" + integrity sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" @@ -5297,7 +5649,19 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": +"@eslint-community/eslint-utils@^4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" + integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.12.2": + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== + +"@eslint-community/regexpp@^4.6.1": version "4.10.0" resolved "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== @@ -5322,6 +5686,11 @@ resolved "https://registry.npmmirror.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== +"@exodus/bytes@^1.11.0", "@exodus/bytes@^1.6.0": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@exodus/bytes/-/bytes-1.15.0.tgz#54479e0f406cbad024d6fe1c3190ecca4468df3b" + integrity sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ== + "@fastify/busboy@^2.0.0": version "2.1.0" resolved "https://registry.npmmirror.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" @@ -5342,7 +5711,7 @@ "@floating-ui/core" "^1.6.0" "@floating-ui/utils" "^0.2.1" -"@floating-ui/react-dom@^2.0.0", "@floating-ui/react-dom@^2.0.6": +"@floating-ui/react-dom@^2.0.0": version "2.0.8" resolved "https://registry.npmmirror.com/@floating-ui/react-dom/-/react-dom-2.0.8.tgz#afc24f9756d1b433e1fe0d047c24bd4d9cefaa5d" integrity sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw== @@ -5354,69 +5723,100 @@ resolved "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== -"@gar/promisify@^1.1.3": - version "1.1.3" - resolved "https://registry.npmmirror.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== +"@formatjs/ecma402-abstract@2.3.6": + version "2.3.6" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz#d6ca9d3579054fe1e1a0a0b5e872e0d64922e4e1" + integrity sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw== + dependencies: + "@formatjs/fast-memoize" "2.2.7" + "@formatjs/intl-localematcher" "0.6.2" + decimal.js "^10.4.3" + tslib "^2.8.0" -"@gitbeaker/core@^35.8.0", "@gitbeaker/core@^35.8.1": - version "35.8.1" - resolved "https://registry.npmmirror.com/@gitbeaker/core/-/core-35.8.1.tgz#b4ce2d08d344ff50e76c38ff81b800bec6dfe851" - integrity sha512-KBrDykVKSmU9Q9Gly8KeHOgdc0lZSa435srECxuO0FGqqBcUQ82hPqUc13YFkkdOI9T1JRA3qSFajg8ds0mZKA== +"@formatjs/fast-memoize@2.2.7": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz#707f9ddaeb522a32f6715bb7950b0831f4cc7b15" + integrity sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ== dependencies: - "@gitbeaker/requester-utils" "^35.8.1" - form-data "^4.0.0" - li "^1.3.0" - mime "^3.0.0" - query-string "^7.0.0" - xcase "^2.0.1" + tslib "^2.8.0" -"@gitbeaker/core@^39.34.0": - version "39.34.0" - resolved "https://registry.npmmirror.com/@gitbeaker/core/-/core-39.34.0.tgz#ea5724688ddd4814a0ce399a72c8a4e9b16bd89d" - integrity sha512-2DHxkmF+IYFv6zLOJ5sy1PGrGXSDGKUJj7l6c5BXfmKVS9kgAfaqslZsdonh3wVtyEClEUPHez2Gq6vI/r35bg== +"@formatjs/icu-messageformat-parser@2.11.4": + version "2.11.4" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz#63bd2cd82d08ae2bef55adeeb86486df68826f32" + integrity sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw== dependencies: - "@gitbeaker/requester-utils" "^39.34.0" - qs "^6.11.2" + "@formatjs/ecma402-abstract" "2.3.6" + "@formatjs/icu-skeleton-parser" "1.8.16" + tslib "^2.8.0" + +"@formatjs/icu-skeleton-parser@1.8.16": + version "1.8.16" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz#13f81f6845c7cf6599623006aacaf7d6b4ad2970" + integrity sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ== + dependencies: + "@formatjs/ecma402-abstract" "2.3.6" + tslib "^2.8.0" + +"@formatjs/intl-localematcher@0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz#e9ebe0b4082d7d48e5b2d753579fb7ece4eaefea" + integrity sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA== + dependencies: + tslib "^2.8.0" + +"@gitbeaker/core@^40.6.0": + version "40.6.0" + resolved "https://registry.yarnpkg.com/@gitbeaker/core/-/core-40.6.0.tgz#f4c21bc0597164b30af35a6636e45225164f5b09" + integrity sha512-tVVm8ZPrS9YCHEcuPV8vD1IcEf9POpdygWo+kPvkK7LcC36EERVcXagb8snEaGgGLfUaVQh8qP4iDZgPnP3YBQ== + dependencies: + "@gitbeaker/requester-utils" "^40.6.0" + qs "^6.12.2" xcase "^2.0.1" -"@gitbeaker/node@^35.8.0": - version "35.8.1" - resolved "https://registry.npmmirror.com/@gitbeaker/node/-/node-35.8.1.tgz#d67885c827f2d7405afd7e39538a230721756e5c" - integrity sha512-g6rX853y61qNhzq9cWtxIEoe2KDeFBtXAeWMGWJnc3nz3WRump2pIICvJqw/yobLZqmTNt+ea6w3/n92Mnbn3g== +"@gitbeaker/core@^41.3.0": + version "41.3.0" + resolved "https://registry.yarnpkg.com/@gitbeaker/core/-/core-41.3.0.tgz#c1e263b6da5c56e6d70eec8907a7728b15b63d03" + integrity sha512-ZPy0v71WTSKdELLhG5FkMCxIWCJwRpA7QkvnULiE36sIynQE0WwBNux+GPjjEh6xQ6PfBAB4E/1Uu2YZXiJlNg== dependencies: - "@gitbeaker/core" "^35.8.1" - "@gitbeaker/requester-utils" "^35.8.1" - delay "^5.0.0" - got "^11.8.3" + "@gitbeaker/requester-utils" "^41.3.0" + qs "^6.12.2" xcase "^2.0.1" -"@gitbeaker/requester-utils@^35.8.1": - version "35.8.1" - resolved "https://registry.npmmirror.com/@gitbeaker/requester-utils/-/requester-utils-35.8.1.tgz#f345cdd05abd4169cfcd239d202db6283eb17dc8" - integrity sha512-MFzdH+Z6eJaCZA5ruWsyvm6SXRyrQHjYVR6aY8POFraIy7ceIHOprWCs1R+0ydDZ8KtBnd8OTHjlJ0sLtSFJCg== +"@gitbeaker/requester-utils@^40.6.0": + version "40.6.0" + resolved "https://registry.yarnpkg.com/@gitbeaker/requester-utils/-/requester-utils-40.6.0.tgz#25372357b8ad62453b38a3666e848c51a992bf64" + integrity sha512-DQu2l3iXtB+8e1Ye2ekeUHABt4mGMRTLtuVWtFqf74sqJnerHNOxVOjPn19qu/nKdvKR3ZLwSRTtPzEsxgcShg== dependencies: - form-data "^4.0.0" - qs "^6.10.1" + picomatch-browser "^2.2.6" + qs "^6.12.2" + rate-limiter-flexible "^4.0.1" xcase "^2.0.1" -"@gitbeaker/requester-utils@^39.34.0": - version "39.34.0" - resolved "https://registry.npmmirror.com/@gitbeaker/requester-utils/-/requester-utils-39.34.0.tgz#ee91cc220fa8af537be1b6bd23432252d6347dca" - integrity sha512-82XEPAlYwC475I4vjj/SKM50ptdvMCuX5aeW4XE3eYnjc2rNh/mLDbgGRu2P4wzb2x+yHxY6W8NpcfZ39Ek2wQ== +"@gitbeaker/requester-utils@^41.3.0": + version "41.3.0" + resolved "https://registry.yarnpkg.com/@gitbeaker/requester-utils/-/requester-utils-41.3.0.tgz#6d45be2189914fc8c7cac0599434fecf03b88eb9" + integrity sha512-sNVlp32uaieQ+Giovlu1GJ8hY9jMhY//f3WMHct2GV0U74PkSsixQgQv9XuRKgZalk2uI12iJrBY7gnAA5N8/w== dependencies: picomatch-browser "^2.2.6" - qs "^6.11.2" - rate-limiter-flexible "^4.0.0" + qs "^6.12.2" + rate-limiter-flexible "^4.0.1" xcase "^2.0.1" -"@gitbeaker/rest@^39.25.0": - version "39.34.0" - resolved "https://registry.npmmirror.com/@gitbeaker/rest/-/rest-39.34.0.tgz#cd2b16c5a8e79b80e70cd780de907b939c5d7e4b" - integrity sha512-9EDO4HVAjaRjU6K0h2B7cPpv2gGY9fxO+a2p4gxbQo30ikKOeQFE0UtU2QLnztin8WPcB0S8sOOoMVGBWhxb0Q== +"@gitbeaker/rest@^40.0.3": + version "40.6.0" + resolved "https://registry.yarnpkg.com/@gitbeaker/rest/-/rest-40.6.0.tgz#9f80ee350976a5fc4d97920c7dc2d5f44579fcde" + integrity sha512-sAwYJclU3NlB/gdxqhH6Hnmy5LWzvW7D3W33eShQEnxMhM0VjnFHPHcgJLQCIux3hMiub1uGtTw1hBJTxDc2mQ== + dependencies: + "@gitbeaker/core" "^40.6.0" + "@gitbeaker/requester-utils" "^40.6.0" + +"@gitbeaker/rest@^41.2.0": + version "41.3.0" + resolved "https://registry.yarnpkg.com/@gitbeaker/rest/-/rest-41.3.0.tgz#1a040f0cfe091f57e2d027a2e2d1bdfb9a447e9b" + integrity sha512-l1jEloxQ4/SCdOjv9ryfbZEvvF90GFllLxULbHiLPI72rAHCjxWtjAdeQXddkvfw/LYCw7CFyu+M9Okt/IjsgA== dependencies: - "@gitbeaker/core" "^39.34.0" - "@gitbeaker/requester-utils" "^39.34.0" + "@gitbeaker/core" "^41.3.0" + "@gitbeaker/requester-utils" "^41.3.0" "@google-cloud/container@^5.0.0": version "5.5.0" @@ -5476,33 +5876,12 @@ teeny-request "^9.0.0" uuid "^8.0.0" -"@graphiql/react@^0.20.0": - version "0.20.2" - resolved "https://registry.npmmirror.com/@graphiql/react/-/react-0.20.2.tgz#8ed900c50d19244d85ff61ad9480cc616b6ae6b5" - integrity sha512-/crAUlM+4iVHyNHVdiZjsTEqfMXBHfjEvrMwCwTVig6YXmCAVuaxqkD7NlDtrrPQArLGkABmf1Nw7ObRpby5lg== - dependencies: - "@graphiql/toolkit" "^0.9.1" - "@headlessui/react" "^1.7.15" - "@radix-ui/react-dialog" "^1.0.4" - "@radix-ui/react-dropdown-menu" "^2.0.5" - "@radix-ui/react-tooltip" "^1.0.6" - "@radix-ui/react-visually-hidden" "^1.0.3" - "@types/codemirror" "^5.60.8" - clsx "^1.2.1" - codemirror "^5.65.3" - codemirror-graphql "^2.0.10" - copy-to-clipboard "^3.2.0" - framer-motion "^6.5.1" - graphql-language-service "^5.2.0" - markdown-it "^12.2.0" - set-value "^4.1.0" - -"@graphiql/react@^0.20.3": - version "0.20.4" - resolved "https://registry.npmmirror.com/@graphiql/react/-/react-0.20.4.tgz#aa65cf8135aa59c54d2cf5d9a144d72f3f46b84b" - integrity sha512-LDgIlHa65pSngk8G2O0hvohNz4B41VUa7Yg6iPwifa1XreXxHIXjhV6FC1qi5oSjdCIRp4T8dkZnHA6iI5eElg== +"@graphiql/react@0.29.0", "@graphiql/react@^0.29.0": + version "0.29.0" + resolved "https://registry.yarnpkg.com/@graphiql/react/-/react-0.29.0.tgz#0ac1b8655ef0d0e0bd5a3cc580dd51e06beeb6e6" + integrity sha512-4Zd57+DeK5t1KYiqy9hnuaQhR8fnZ1CkKUkmZqINpAe0OlpbszOE661zwNGuW5NjbXgepfI89ICnh1ZVinSJvg== dependencies: - "@graphiql/toolkit" "^0.9.1" + "@graphiql/toolkit" "^0.11.2" "@headlessui/react" "^1.7.15" "@radix-ui/react-dialog" "^1.0.4" "@radix-ui/react-dropdown-menu" "^2.0.5" @@ -5511,192 +5890,62 @@ "@types/codemirror" "^5.60.8" clsx "^1.2.1" codemirror "^5.65.3" - codemirror-graphql "^2.0.11" + codemirror-graphql "^2.2.1" copy-to-clipboard "^3.2.0" framer-motion "^6.5.1" - graphql-language-service "^5.2.0" - markdown-it "^12.2.0" + get-value "^3.0.1" + graphql-language-service "^5.3.1" + markdown-it "^14.1.0" + react-compiler-runtime "19.1.0-rc.1" set-value "^4.1.0" -"@graphiql/toolkit@^0.9.1": - version "0.9.1" - resolved "https://registry.npmmirror.com/@graphiql/toolkit/-/toolkit-0.9.1.tgz#44bfa83aed79c8c18affac49efbb81f8e87bade3" - integrity sha512-LVt9pdk0830so50ZnU2Znb2rclcoWznG8r8asqAENzV0U1FM1kuY0sdPpc/rBc9MmmNgnB6A+WZzDhq6dbhTHA== +"@graphiql/toolkit@^0.11.2": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@graphiql/toolkit/-/toolkit-0.11.3.tgz#7f08352779b316fc6436820e11329ac3e6af9f9c" + integrity sha512-Glf0fK1cdHLNq52UWPzfSrYIJuNxy8h4451Pw1ZVpJ7dtU+tm7GVVC64UjEDQ/v2j3fnG4cX8jvR75IvfL6nzQ== dependencies: "@n1ru4l/push-pull-async-iterable-iterator" "^3.1.0" meros "^1.1.4" -"@graphql-tools/batch-execute@^9.0.1": - version "9.0.2" - resolved "https://registry.npmmirror.com/@graphql-tools/batch-execute/-/batch-execute-9.0.2.tgz#5ac3257501e7941fad40661bb5e1110d6312f58b" - integrity sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ== - dependencies: - "@graphql-tools/utils" "^10.0.5" - dataloader "^2.2.2" - tslib "^2.4.0" - value-or-promise "^1.0.12" - -"@graphql-tools/delegate@^10.0.0", "@graphql-tools/delegate@^10.0.3": - version "10.0.3" - resolved "https://registry.npmmirror.com/@graphql-tools/delegate/-/delegate-10.0.3.tgz#2d0e133da94ca92c24e0c7360414e5592321cf2d" - integrity sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw== - dependencies: - "@graphql-tools/batch-execute" "^9.0.1" - "@graphql-tools/executor" "^1.0.0" - "@graphql-tools/schema" "^10.0.0" - "@graphql-tools/utils" "^10.0.5" - dataloader "^2.2.2" - tslib "^2.5.0" - -"@graphql-tools/executor-graphql-ws@^1.0.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-1.1.0.tgz#7727159ebaa9df4dc793d0d02e74dd1ca4a7cc60" - integrity sha512-yM67SzwE8rYRpm4z4AuGtABlOp9mXXVy6sxXnTJRoYIdZrmDbKVfIY+CpZUJCqS0FX3xf2+GoHlsj7Qswaxgcg== - dependencies: - "@graphql-tools/utils" "^10.0.2" - "@types/ws" "^8.0.0" - graphql-ws "^5.14.0" - isomorphic-ws "^5.0.0" - tslib "^2.4.0" - ws "^8.13.0" - -"@graphql-tools/executor-http@^1.0.5": - version "1.0.7" - resolved "https://registry.npmmirror.com/@graphql-tools/executor-http/-/executor-http-1.0.7.tgz#c358f91d4f88e49b9be7408a517f77a3079b2d91" - integrity sha512-/MoRYzQS50Tz5mxRfq3ZmeZ2SOins9wGZAGetsJ55F3PxL0PmHdSGlCq12KzffZDbwHV5YMlwigBsSGWq4y9Iw== - dependencies: - "@graphql-tools/utils" "^10.0.2" - "@repeaterjs/repeater" "^3.0.4" - "@whatwg-node/fetch" "^0.9.0" - extract-files "^11.0.0" - meros "^1.2.1" - tslib "^2.4.0" - value-or-promise "^1.0.12" - -"@graphql-tools/executor-legacy-ws@^1.0.0": - version "1.0.5" - resolved "https://registry.npmmirror.com/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-1.0.5.tgz#07de9d6e0e49febbcb87d6558bbeebf3940ff25a" - integrity sha512-w54AZ7zkNuvpyV09FH+eGHnnAmaxhBVHg4Yh2ICcsMfRg0brkLt77PlbjBuxZ4HY8XZnKJaYWf+tKazQZtkQtg== - dependencies: - "@graphql-tools/utils" "^10.0.0" - "@types/ws" "^8.0.0" - isomorphic-ws "^5.0.0" - tslib "^2.4.0" - ws "^8.15.0" - -"@graphql-tools/executor@^1.0.0": - version "1.2.0" - resolved "https://registry.npmmirror.com/@graphql-tools/executor/-/executor-1.2.0.tgz#6c45f4add765769d9820c4c4405b76957ba39c79" - integrity sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg== - dependencies: - "@graphql-tools/utils" "^10.0.0" - "@graphql-typed-document-node/core" "3.2.0" - "@repeaterjs/repeater" "^3.0.4" - tslib "^2.4.0" - value-or-promise "^1.0.12" - -"@graphql-tools/graphql-file-loader@^8.0.0": - version "8.0.0" - resolved "https://registry.npmmirror.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-8.0.0.tgz#a2026405bce86d974000455647511bf65df4f211" - integrity sha512-wRXj9Z1IFL3+zJG1HWEY0S4TXal7+s1vVhbZva96MSp0kbb/3JBF7j0cnJ44Eq0ClccMgGCDFqPFXty4JlpaPg== - dependencies: - "@graphql-tools/import" "7.0.0" - "@graphql-tools/utils" "^10.0.0" - globby "^11.0.3" - tslib "^2.4.0" - unixify "^1.0.0" - -"@graphql-tools/import@7.0.0": - version "7.0.0" - resolved "https://registry.npmmirror.com/@graphql-tools/import/-/import-7.0.0.tgz#a6a91a90a707d5f46bad0fd3fde2f407b548b2be" - integrity sha512-NVZiTO8o1GZs6OXzNfjB+5CtQtqsZZpQOq+Uu0w57kdUkT4RlQKlwhT8T81arEsbV55KpzkpFsOZP7J1wdmhBw== - dependencies: - "@graphql-tools/utils" "^10.0.0" - resolve-from "5.0.0" - tslib "^2.4.0" - -"@graphql-tools/json-file-loader@^8.0.0": - version "8.0.0" - resolved "https://registry.npmmirror.com/@graphql-tools/json-file-loader/-/json-file-loader-8.0.0.tgz#9b1b62902f766ef3f1c9cd1c192813ea4f48109c" - integrity sha512-ki6EF/mobBWJjAAC84xNrFMhNfnUFD6Y0rQMGXekrUgY0NdeYXHU0ZUgHzC9O5+55FslqUmAUHABePDHTyZsLg== - dependencies: - "@graphql-tools/utils" "^10.0.0" - globby "^11.0.3" - tslib "^2.4.0" - unixify "^1.0.0" - -"@graphql-tools/load@^8.0.0": - version "8.0.1" - resolved "https://registry.npmmirror.com/@graphql-tools/load/-/load-8.0.1.tgz#498f2230448601cb87894b8a93df7867daef69ea" - integrity sha512-qSMsKngJhDqRbuWyo3NvakEFqFL6+eSjy8ooJ1o5qYD26N7dqXkKzIMycQsX7rBK19hOuINAUSaRcVWH6hTccw== +"@graphql-tools/merge@8.3.1": + version "8.3.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.3.1.tgz#06121942ad28982a14635dbc87b5d488a041d722" + integrity sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg== dependencies: - "@graphql-tools/schema" "^10.0.0" - "@graphql-tools/utils" "^10.0.11" - p-limit "3.1.0" + "@graphql-tools/utils" "8.9.0" tslib "^2.4.0" -"@graphql-tools/merge@^9.0.0", "@graphql-tools/merge@^9.0.1": - version "9.0.1" - resolved "https://registry.npmmirror.com/@graphql-tools/merge/-/merge-9.0.1.tgz#693f15da152339284469b1ce5c6827e3ae350a29" - integrity sha512-hIEExWO9fjA6vzsVjJ3s0cCQ+Q/BEeMVJZtMXd7nbaVefVy0YDyYlEkeoYYNV3NVVvu1G9lr6DM1Qd0DGo9Caw== +"@graphql-tools/schema@^8.5.0": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-8.5.1.tgz#c2f2ff1448380919a330312399c9471db2580b58" + integrity sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg== dependencies: - "@graphql-tools/utils" "^10.0.10" + "@graphql-tools/merge" "8.3.1" + "@graphql-tools/utils" "8.9.0" tslib "^2.4.0" + value-or-promise "1.0.11" -"@graphql-tools/schema@^10.0.0": - version "10.0.2" - resolved "https://registry.npmmirror.com/@graphql-tools/schema/-/schema-10.0.2.tgz#21bc2ee25a65fb4890d2e5f9f22ef1f733aa81da" - integrity sha512-TbPsIZnWyDCLhgPGnDjt4hosiNU2mF/rNtSk5BVaXWnZqvKJ6gzJV4fcHcvhRIwtscDMW2/YTnK6dLVnk8pc4w== +"@graphql-tools/utils@8.9.0": + version "8.9.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.9.0.tgz#c6aa5f651c9c99e1aca55510af21b56ec296cdb7" + integrity sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg== dependencies: - "@graphql-tools/merge" "^9.0.1" - "@graphql-tools/utils" "^10.0.10" - tslib "^2.4.0" - value-or-promise "^1.0.12" - -"@graphql-tools/url-loader@^8.0.0": - version "8.0.1" - resolved "https://registry.npmmirror.com/@graphql-tools/url-loader/-/url-loader-8.0.1.tgz#91247247d253c538c4c28376ca74d944fa8cfb82" - integrity sha512-B2k8KQEkEQmfV1zhurT5GLoXo8jbXP+YQHUayhCSxKYlRV7j/1Fhp1b21PDM8LXIDGlDRXaZ0FbWKOs7eYXDuQ== - dependencies: - "@ardatan/sync-fetch" "^0.0.1" - "@graphql-tools/delegate" "^10.0.0" - "@graphql-tools/executor-graphql-ws" "^1.0.0" - "@graphql-tools/executor-http" "^1.0.5" - "@graphql-tools/executor-legacy-ws" "^1.0.0" - "@graphql-tools/utils" "^10.0.0" - "@graphql-tools/wrap" "^10.0.0" - "@types/ws" "^8.0.0" - "@whatwg-node/fetch" "^0.9.0" - isomorphic-ws "^5.0.0" tslib "^2.4.0" - value-or-promise "^1.0.11" - ws "^8.12.0" -"@graphql-tools/utils@^10.0.0", "@graphql-tools/utils@^10.0.10", "@graphql-tools/utils@^10.0.11", "@graphql-tools/utils@^10.0.2", "@graphql-tools/utils@^10.0.5": - version "10.0.13" - resolved "https://registry.npmmirror.com/@graphql-tools/utils/-/utils-10.0.13.tgz#d0ab7a4dd02a8405f5ef62dd140b7579ba69f8cb" - integrity sha512-fMILwGr5Dm2zefNItjQ6C2rauigklv69LIwppccICuGTnGaOp3DspLt/6Lxj72cbg5d9z60Sr+Egco3CJKLsNg== +"@graphql-tools/utils@^8.8.0": + version "8.13.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.13.1.tgz#b247607e400365c2cd87ff54654d4ad25a7ac491" + integrity sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw== dependencies: - "@graphql-typed-document-node/core" "^3.1.1" - cross-inspect "1.0.0" - dset "^3.1.2" tslib "^2.4.0" -"@graphql-tools/wrap@^10.0.0": - version "10.0.1" - resolved "https://registry.npmmirror.com/@graphql-tools/wrap/-/wrap-10.0.1.tgz#9e3d27d2723962c26c4377d5d7ab0d3038bf728c" - integrity sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg== +"@grpc/grpc-js@^1.11.1": + version "1.14.3" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.14.3.tgz#4c9b817a900ae4020ddc28515ae4b52c78cfb8da" + integrity sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA== dependencies: - "@graphql-tools/delegate" "^10.0.3" - "@graphql-tools/schema" "^10.0.0" - "@graphql-tools/utils" "^10.0.0" - tslib "^2.4.0" - value-or-promise "^1.0.12" - -"@graphql-typed-document-node/core@3.2.0", "@graphql-typed-document-node/core@^3.1.1": - version "3.2.0" - resolved "https://registry.npmmirror.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" - integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== + "@grpc/proto-loader" "^0.8.0" + "@js-sdsl/ordered-map" "^4.4.2" "@grpc/grpc-js@~1.9.6": version "1.9.14" @@ -5716,6 +5965,26 @@ protobufjs "^7.2.4" yargs "^17.7.2" +"@grpc/proto-loader@^0.7.13": + version "0.7.15" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.15.tgz#4cdfbf35a35461fc843abe8b9e2c0770b5095e60" + integrity sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ== + dependencies: + lodash.camelcase "^4.3.0" + long "^5.0.0" + protobufjs "^7.2.5" + yargs "^17.7.2" + +"@grpc/proto-loader@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.8.0.tgz#b6c324dd909c458a0e4aa9bfd3d69cf78a4b9bd8" + integrity sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ== + dependencies: + lodash.camelcase "^4.3.0" + long "^5.0.0" + protobufjs "^7.5.3" + yargs "^17.7.2" + "@headlessui/react@^1.7.15": version "1.7.18" resolved "https://registry.npmmirror.com/@headlessui/react/-/react-1.7.18.tgz#30af4634d2215b2ca1aa29d07f33d02bea82d9d7" @@ -5724,6 +5993,38 @@ "@tanstack/react-virtual" "^3.0.0-beta.60" client-only "^0.0.1" +"@httptoolkit/httpolyglot@^2.2.1": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@httptoolkit/httpolyglot/-/httpolyglot-2.2.2.tgz#e36bad48f530546984724c45bd01d89c1acc020e" + integrity sha512-Mm75bidN/jrUsuhBjHAMoQbmR52zQYi8xr/+0mQYGW+dQelg+sdJR/kGRKKZGeAoPgp/1rrZWJqdohZP0xm18g== + dependencies: + "@types/node" "*" + +"@httptoolkit/subscriptions-transport-ws@^0.11.2": + version "0.11.2" + resolved "https://registry.yarnpkg.com/@httptoolkit/subscriptions-transport-ws/-/subscriptions-transport-ws-0.11.2.tgz#514663c926264e2de7f6cd33d09f81675c35b9e3" + integrity sha512-YB+gYYVjgYUeJrGkfS91ABeNWCFU7EVcn9Cflf2UXjsIiPJEI6yPxujPcjKv9wIJpM+33KQW/qVEmc+BdIDK2w== + dependencies: + backo2 "^1.0.2" + eventemitter3 "^3.1.0" + iterall "^1.2.1" + symbol-observable "^1.0.4" + ws "^8.8.0" + +"@httptoolkit/websocket-stream@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@httptoolkit/websocket-stream/-/websocket-stream-6.0.1.tgz#8d732f1509860236276f6b0759db4cc9859bbb62" + integrity sha512-A0NOZI+Glp3Xgcz6Na7i7o09+/+xm2m0UCU8gdtM2nIv6/cjLmhMZMqehSpTlgbx9omtLmV8LVqOskPEyWnmZQ== + dependencies: + "@types/ws" "*" + duplexify "^3.5.1" + inherits "^2.0.1" + isomorphic-ws "^4.0.1" + readable-stream "^2.3.3" + safe-buffer "^5.1.2" + ws "*" + xtend "^4.0.0" + "@humanwhocodes/config-array@^0.11.13": version "0.11.14" resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" @@ -5743,16 +6044,59 @@ resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== -"@hutson/parse-repository-url@^3.0.0": - version "3.0.2" - resolved "https://registry.npmmirror.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" - integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== +"@internal/plugin-scaffolder-backend-module-gitlab@link:plugins/scaffolder-backend-module-gitlab": + version "0.9.5" + dependencies: + "@backstage/backend-plugin-api" "^1.4.0" + "@backstage/config" "^1.3.2" + "@backstage/errors" "^1.2.7" + "@backstage/integration" "^1.20.1" + "@backstage/plugin-scaffolder-node" "^0.12.0" + "@gitbeaker/rest" "^41.2.0" + luxon "^3.0.0" + winston "^3.2.1" + yaml "^2.0.0" + zod "^3.22.4" + +"@internationalized/date@^3.12.0", "@internationalized/date@^3.12.1": + version "3.12.1" + resolved "https://registry.yarnpkg.com/@internationalized/date/-/date-3.12.1.tgz#6e07ff34fafcba9a155cb8d4e0505f362e57a56b" + integrity sha512-6IedsVWXyq4P9Tj+TxuU8WGWM70hYLl12nbYU8jkikVpa6WXapFazPUcHUMDMoWftIDE2ILDkFFte6W2nFCkRQ== + dependencies: + "@swc/helpers" "^0.5.0" + +"@internationalized/message@^3.1.9": + version "3.1.9" + resolved "https://registry.yarnpkg.com/@internationalized/message/-/message-3.1.9.tgz#40b0f5d2ac9df6e6aabcf5d34750aa2c58730cb9" + integrity sha512-x03MSVTaB/4JHtW1VAYaY/2cCuBrHbWM6ZvlgpKdnSdW28tZbqpR673RJrVJyXWRw1bpgYN89Tz7ohX5tgNgPA== + dependencies: + "@swc/helpers" "^0.5.0" + intl-messageformat "^10.1.0" + +"@internationalized/number@^3.6.6": + version "3.6.6" + resolved "https://registry.yarnpkg.com/@internationalized/number/-/number-3.6.6.tgz#8bd41940dd9c08e265ec13c9331bad4fd57267e1" + integrity sha512-iFgmQaXHE0vytNfpLZWOC2mEJCBRzcUxt53Xf/yCXG93lRvqas237i3r7X4RKMwO3txiyZD4mQjKAByFv6UGSQ== + dependencies: + "@swc/helpers" "^0.5.0" + +"@internationalized/string@^3.2.7", "@internationalized/string@^3.2.8": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@internationalized/string/-/string-3.2.8.tgz#ca27e2ba127528d6b55a20fb5302bfebb852e1d9" + integrity sha512-NdbMQUSfXLYIQol5VyMtinm9pZDciiMfN7RtmSuSB78io1hqwJ0naYfxyW6vgxWBkzWymQa/3uLDlbfmshtCaA== + dependencies: + "@swc/helpers" "^0.5.0" "@ioredis/commands@^1.1.1": version "1.2.0" resolved "https://registry.npmmirror.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== +"@iovalkey/commands@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@iovalkey/commands/-/commands-0.1.0.tgz#62648b19106690ee8ce7d11aaf6249a242f927b0" + integrity sha512-/B9W4qKSSITDii5nkBCHyPkIkAi+ealUtr1oqBJsLxjSRLka4pxun2VvMNSmcwgAMxgXtQfl0qRv7TE+udPJzg== + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -5765,91 +6109,71 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.npmmirror.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest-mock/express@^2.0.1": - version "2.0.2" - resolved "https://registry.npmmirror.com/@jest-mock/express/-/express-2.0.2.tgz#e4f61c30b45e517c14b35ea5d67d89a7e52908f7" - integrity sha512-B1mjh5Tgm/HDd3BLC9s2jZNqRIxiJJD5rMWm48gEeK0K2hfUE66QZ+AxHxHlb/uaqL9H+PFJzCSjJPl46oNzDg== +"@isaacs/fs-minipass@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" + integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== dependencies: - "@types/express" "^4.17.17" + minipass "^7.0.4" -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.npmmirror.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== +"@isomorphic-git/pgp-plugin@^0.0.7": + version "0.0.7" + resolved "https://registry.yarnpkg.com/@isomorphic-git/pgp-plugin/-/pgp-plugin-0.0.7.tgz#490db815b578cd4d4ee67bebace66b15067044de" + integrity sha512-6adXezgOeXFn5CHYlxAtmq7OoDjLPWxyxL7FXtM6ROdLOT/WScU1asPXG0dhGmKJNR4u23WF5pIbNHJtqKLZ/Q== dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" + "@isomorphic-pgp/sign-and-verify" "^0.0.10" + "@isomorphic-pgp/util" "^0.0.6" -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.npmmirror.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== +"@isomorphic-pgp/parser@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@isomorphic-pgp/parser/-/parser-0.0.3.tgz#c825266531f1a3608bf41b8a8f519664ddd401d0" + integrity sha512-d1lu99aTI0VpHIQDeY+jNPbvT2TpkAaU0CC/udcWXwfyphH+qYXNo/4NgCO/084Zlbjoz23z8ZbrpMM9KrkwLw== dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-ansi "^6.0.0" + array-buffer-to-hex "^1.0.0" + base64-js "^1.3.0" + bn.js "^4.11.8" + clz-buffer "^1.0.0" + concat-buffers "^1.0.0" + crc "^3.8.0" + isomorphic-textencoder "^1.0.1" + select-case "^1.0.0" + +"@isomorphic-pgp/sign-and-verify@^0.0.10": + version "0.0.10" + resolved "https://registry.yarnpkg.com/@isomorphic-pgp/sign-and-verify/-/sign-and-verify-0.0.10.tgz#c0da50ef79ff29ebee05d8087f9b6422ecdd7259" + integrity sha512-YGta8FP2UXUcek1T5TY1taO1+TSIEu5Tk3+d5c/SmACIm3AJX4K1ncn4XuCXy+ECS8WyVj0sSzr6vxYEyZ6HiA== + dependencies: + "@isomorphic-pgp/parser" "^0.0.3" + "@isomorphic-pgp/util" "^0.0.6" + "@wmhilton/crypto-hash" "^1.0.2" + array-buffer-to-hex "^1.0.0" + isomorphic-textencoder "^1.0.1" + jsbn "^1.1.0" + sha.js "^2.4.11" -"@jest/create-cache-key-function@^29.7.0": - version "29.7.0" - resolved "https://registry.npmmirror.com/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz#793be38148fab78e65f40ae30c36785f4ad859f0" - integrity sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA== +"@isomorphic-pgp/util@^0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@isomorphic-pgp/util/-/util-0.0.6.tgz#557e650745a6c6c7f8794c261e11d935a534d689" + integrity sha512-6J60flPSPJpsuGiVZ29F5oJ8ma7v44ya9FwpjjEJUV4mTYuMujXFuKlAX1VNnNmi2DaerE8XRB5ocJi15Fe5Dg== dependencies: - "@jest/types" "^29.6.3" + "@isomorphic-pgp/parser" "^0.0.3" + array-buffer-to-hex "^1.0.0" + concat-buffers "^1.0.0" + sha.js "^2.4.11" -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.npmmirror.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== +"@jest-mock/express@^2.0.1": + version "2.0.2" + resolved "https://registry.npmmirror.com/@jest-mock/express/-/express-2.0.2.tgz#e4f61c30b45e517c14b35ea5d67d89a7e52908f7" + integrity sha512-B1mjh5Tgm/HDd3BLC9s2jZNqRIxiJJD5rMWm48gEeK0K2hfUE66QZ+AxHxHlb/uaqL9H+PFJzCSjJPl46oNzDg== dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" + "@types/express" "^4.17.17" + +"@jest/create-cache-key-function@^30.0.0": + version "30.3.0" + resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-30.3.0.tgz#c504533e2b2c6403c6dacaa6b0484e9b6df3b602" + integrity sha512-hTupmOWylzeyqbMNeSNi7ZDprpjrcroAOOG+qCEW66st3+Z5RnYHVYkUt+zjIcLmrTUi2lPY79hJz8mB3L2oXQ== + dependencies: + "@jest/types" "30.3.0" "@jest/expect-utils@^29.7.0": version "29.7.0" @@ -5858,65 +6182,20 @@ dependencies: jest-get-type "^29.6.3" -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.npmmirror.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" - -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== +"@jest/pattern@30.0.1": + version "30.0.1" + resolved "https://registry.yarnpkg.com/@jest/pattern/-/pattern-30.0.1.tgz#d5304147f49a052900b4b853dedb111d080e199f" + integrity sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA== dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.npmmirror.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" + jest-regex-util "30.0.1" -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.npmmirror.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== +"@jest/schemas@30.0.5": + version "30.0.5" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-30.0.5.tgz#7bdf69fc5a368a5abdb49fd91036c55225846473" + integrity sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA== dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^6.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - v8-to-istanbul "^9.0.1" + "@sinclair/typebox" "^0.34.0" "@jest/schemas@^29.6.3": version "29.6.3" @@ -5925,55 +6204,18 @@ dependencies: "@sinclair/typebox" "^0.27.8" -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.npmmirror.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.npmmirror.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.npmmirror.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - slash "^3.0.0" - -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.npmmirror.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== +"@jest/types@30.3.0": + version "30.3.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-30.3.0.tgz#cada800d323cb74945c24ac74615fdb312a6c85f" + integrity sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw== dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^2.0.0" - fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" + "@jest/pattern" "30.0.1" + "@jest/schemas" "30.0.5" + "@types/istanbul-lib-coverage" "^2.0.6" + "@types/istanbul-reports" "^3.0.4" + "@types/node" "*" + "@types/yargs" "^17.0.33" + chalk "^4.1.2" "@jest/types@^29.6.3": version "29.6.3" @@ -6027,7 +6269,15 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.25": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jridgewell/trace-mapping@^0.3.9": version "0.3.22" resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== @@ -6035,26 +6285,137 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@js-sdsl/ordered-map@^4.4.2": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c" + integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== + "@jsdevtools/ono@7.1.3", "@jsdevtools/ono@^7.1.3": version "7.1.3" resolved "https://registry.npmmirror.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== +"@jsep-plugin/assignment@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@jsep-plugin/assignment/-/assignment-1.3.0.tgz#fcfc5417a04933f7ceee786e8ab498aa3ce2b242" + integrity sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ== + "@jsep-plugin/regex@^1.0.1": version "1.0.3" resolved "https://registry.npmmirror.com/@jsep-plugin/regex/-/regex-1.0.3.tgz#3aeaa2e5fa45d89de116aeafbfa41c95935b7f6d" integrity sha512-XfZgry4DwEZvSFtS/6Y+R48D7qJYJK6R9/yJFyUFHCIUMEEHuJ4X95TDgJp5QkmzfLYvapMPzskV5HpIDrREug== +"@jsep-plugin/regex@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@jsep-plugin/regex/-/regex-1.0.4.tgz#cb2fc423220fa71c609323b9ba7f7d344a755fcc" + integrity sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg== + "@jsep-plugin/ternary@^1.0.2": version "1.1.3" resolved "https://registry.npmmirror.com/@jsep-plugin/ternary/-/ternary-1.1.3.tgz#9ac0b752b9e99f55d23bfcb32cf08c5c2c03ce67" integrity sha512-qtLGzCNzPVJ3kdH6/zoLWDPjauHIKiLSBAR71Wa0+PWvGA8wODUQvRgxtpUA5YqAYL3CQ8S4qXhd/9WuWTZirg== -"@jsonjoy.com/base64@^1.1.1": +"@jsonjoy.com/base64@17.67.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-17.67.0.tgz#7eeda3cb41138d77a90408fd2e42b2aba10576d7" + integrity sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw== + +"@jsonjoy.com/base64@^1.1.1", "@jsonjoy.com/base64@^1.1.2": version "1.1.2" resolved "https://registry.npmmirror.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== +"@jsonjoy.com/buffers@17.67.0", "@jsonjoy.com/buffers@^17.65.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz#5c58dbcdeea8824ce296bd1cfce006c2eb167b3d" + integrity sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw== + +"@jsonjoy.com/buffers@^1.0.0", "@jsonjoy.com/buffers@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz#8d99c7f67eaf724d3428dfd9826c6455266a5c83" + integrity sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA== + +"@jsonjoy.com/codegen@17.67.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz#3635fd8769d77e19b75dc5574bc9756019b2e591" + integrity sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q== + +"@jsonjoy.com/codegen@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207" + integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g== + +"@jsonjoy.com/fs-core@4.57.2": + version "4.57.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-core/-/fs-core-4.57.2.tgz#e28f357ba9983ce53577ba34fc72d344f19ec459" + integrity sha512-SVjwklkpIV5wrynpYtuYnfYH1QF4/nDuLBX7VXdb+3miglcAgBVZb/5y0cOsehRV/9Vb+3UqhkMq3/NR3ztdkQ== + dependencies: + "@jsonjoy.com/fs-node-builtins" "4.57.2" + "@jsonjoy.com/fs-node-utils" "4.57.2" + thingies "^2.5.0" + +"@jsonjoy.com/fs-fsa@4.57.2": + version "4.57.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.2.tgz#ec6dd492ff8c104a0c1eae74959a013960fe8969" + integrity sha512-fhO8+iR2I+OCw668ISDJdn1aArc9zx033sWejIyzQ8RBeXa9bDSaUeA3ix0poYOfrj1KdOzytmYNv2/uLDfV6g== + dependencies: + "@jsonjoy.com/fs-core" "4.57.2" + "@jsonjoy.com/fs-node-builtins" "4.57.2" + "@jsonjoy.com/fs-node-utils" "4.57.2" + thingies "^2.5.0" + +"@jsonjoy.com/fs-node-builtins@4.57.2": + version "4.57.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.2.tgz#9174b87e70213b38caf1ac8669b130c4dfd6a909" + integrity sha512-xhiegylRmhw43Ki2HO1ZBL7DQ5ja/qpRsL29VtQ2xuUHiuDGbgf2uD4p9Qd8hJI5P6RCtGYD50IXHXVq/Ocjcg== + +"@jsonjoy.com/fs-node-to-fsa@4.57.2": + version "4.57.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.2.tgz#8542449b72dfc48f3bfe311a7b0af5323f9bc926" + integrity sha512-18LmWTSONhoAPW+IWRuf8w/+zRolPFGPeGwMxlAhhfY11EKzX+5XHDBPAw67dBF5dxDErHJbl40U+3IXSDRXSQ== + dependencies: + "@jsonjoy.com/fs-fsa" "4.57.2" + "@jsonjoy.com/fs-node-builtins" "4.57.2" + "@jsonjoy.com/fs-node-utils" "4.57.2" + +"@jsonjoy.com/fs-node-utils@4.57.2": + version "4.57.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.2.tgz#c3234c03b1e59d609a0915572dd6f450be0463b1" + integrity sha512-rsPSJgekz43IlNbLyAM/Ab+ouYLWGp5DDBfYBNNEqDaSpsbXfthBn29Q4muFA9L0F+Z3mKo+CWlgSCXrf+mOyQ== + dependencies: + "@jsonjoy.com/fs-node-builtins" "4.57.2" + +"@jsonjoy.com/fs-node@4.57.2": + version "4.57.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node/-/fs-node-4.57.2.tgz#8db2875df19683683e5852053e0099e233dc45d2" + integrity sha512-nX2AdL6cOFwLdju9G4/nbRnYevmCJbh7N7hvR3gGm97Cs60uEjyd0rpR+YBS7cTg175zzl22pGKXR5USaQMvKg== + dependencies: + "@jsonjoy.com/fs-core" "4.57.2" + "@jsonjoy.com/fs-node-builtins" "4.57.2" + "@jsonjoy.com/fs-node-utils" "4.57.2" + "@jsonjoy.com/fs-print" "4.57.2" + "@jsonjoy.com/fs-snapshot" "4.57.2" + glob-to-regex.js "^1.0.0" + thingies "^2.5.0" + +"@jsonjoy.com/fs-print@4.57.2": + version "4.57.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-print/-/fs-print-4.57.2.tgz#286c4ceda19225a5c54aaad657ad9f466d5bd0c1" + integrity sha512-wK9NSow48i4DbDl9F1CQE5TqnyZOJ04elU3WFG5aJ76p+YxO/ulyBBQvKsessPxdo381Bc2pcEoyPujMOhcRqQ== + dependencies: + "@jsonjoy.com/fs-node-utils" "4.57.2" + tree-dump "^1.1.0" + +"@jsonjoy.com/fs-snapshot@4.57.2": + version "4.57.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.2.tgz#800424a076638a605dad5ef1540915bc0167d7f8" + integrity sha512-GdduDZuoP5V/QCgJkx9+BZ6SC0EZ/smXAdTS7PfMqgMTGXLlt/bH/FqMYaqB9JmLf05sJPtO0XRbAwwkEEPbVw== + dependencies: + "@jsonjoy.com/buffers" "^17.65.0" + "@jsonjoy.com/fs-node-utils" "4.57.2" + "@jsonjoy.com/json-pack" "^17.65.0" + "@jsonjoy.com/util" "^17.65.0" + "@jsonjoy.com/json-pack@^1.0.3": version "1.0.4" resolved "https://registry.npmmirror.com/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz#ab59c642a2e5368e8bcfd815d817143d4f3035d0" @@ -6065,21 +6426,75 @@ hyperdyperid "^1.2.0" thingies "^1.20.0" +"@jsonjoy.com/json-pack@^1.11.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz#93f8dd57fe3a3a92132b33d1eb182dcd9e7629fa" + integrity sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg== + dependencies: + "@jsonjoy.com/base64" "^1.1.2" + "@jsonjoy.com/buffers" "^1.2.0" + "@jsonjoy.com/codegen" "^1.0.0" + "@jsonjoy.com/json-pointer" "^1.0.2" + "@jsonjoy.com/util" "^1.9.0" + hyperdyperid "^1.2.0" + thingies "^2.5.0" + tree-dump "^1.1.0" + +"@jsonjoy.com/json-pack@^17.65.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz#8dd8ff65dd999c5d4d26df46c63915c7bdec093a" + integrity sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w== + dependencies: + "@jsonjoy.com/base64" "17.67.0" + "@jsonjoy.com/buffers" "17.67.0" + "@jsonjoy.com/codegen" "17.67.0" + "@jsonjoy.com/json-pointer" "17.67.0" + "@jsonjoy.com/util" "17.67.0" + hyperdyperid "^1.2.0" + thingies "^2.5.0" + tree-dump "^1.1.0" + +"@jsonjoy.com/json-pointer@17.67.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz#74439573dc046e0c9a3a552fb94b391bc75313b8" + integrity sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA== + dependencies: + "@jsonjoy.com/util" "17.67.0" + +"@jsonjoy.com/json-pointer@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz#049cb530ac24e84cba08590c5e36b431c4843408" + integrity sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg== + dependencies: + "@jsonjoy.com/codegen" "^1.0.0" + "@jsonjoy.com/util" "^1.9.0" + +"@jsonjoy.com/util@17.67.0", "@jsonjoy.com/util@^17.65.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-17.67.0.tgz#7c4288fc3808233e55c7610101e7bb4590cddd3f" + integrity sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew== + dependencies: + "@jsonjoy.com/buffers" "17.67.0" + "@jsonjoy.com/codegen" "17.67.0" + "@jsonjoy.com/util@^1.1.2": version "1.1.3" resolved "https://registry.npmmirror.com/@jsonjoy.com/util/-/util-1.1.3.tgz#75b1c3cf21b70e665789d1ad3eabeff8b7fd1429" integrity sha512-g//kkF4kOwUjemValCtOc/xiYzmwMRmWq3Bn+YnzOzuZLHq2PpMOxxIayN3cKbo7Ko2Np65t6D9H81IvXbXhqg== +"@jsonjoy.com/util@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.9.0.tgz#7ee95586aed0a766b746cd8d8363e336c3c47c46" + integrity sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ== + dependencies: + "@jsonjoy.com/buffers" "^1.0.0" + "@jsonjoy.com/codegen" "^1.0.0" + "@juggle/resize-observer@^3.3.1": version "3.4.0" resolved "https://registry.npmmirror.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== -"@kamilkisiela/fast-url-parser@^1.1.4": - version "1.1.4" - resolved "https://registry.npmmirror.com/@kamilkisiela/fast-url-parser/-/fast-url-parser-1.1.4.tgz#9d68877a489107411b953c54ea65d0658b515809" - integrity sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew== - "@keyv/memcache@^1.3.5": version "1.4.0" resolved "https://registry.npmmirror.com/@keyv/memcache/-/memcache-1.4.0.tgz#89108a5f0ec8ed301d77291f2b485afbd34a6bff" @@ -6088,6 +6503,15 @@ json-buffer "^3.0.1" memjs "^1.3.1" +"@keyv/memcache@^2.0.1": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@keyv/memcache/-/memcache-2.0.2.tgz#5e32b94309c84ea8b4e381a77a447655a3dd19e7" + integrity sha512-0gxCi3X5I8I4gzHdce+3T2QsxHMujjL9IqJN5VCBtHGivTPg83PIKs7eOnQ/JCcqvt1rwfnu6/HNreL3FqwoCw== + dependencies: + "@keyv/serialize" "^1.0.3" + buffer "^6.0.3" + memjs "^1.3.2" + "@keyv/redis@^2.5.3": version "2.8.4" resolved "https://registry.npmmirror.com/@keyv/redis/-/redis-2.8.4.tgz#0d1afb74ef4588c849658509fb69051648ac17d9" @@ -6095,7 +6519,28 @@ dependencies: ioredis "^5.3.2" -"@kubernetes-models/apimachinery@^1.1.0", "@kubernetes-models/apimachinery@^1.2.1": +"@keyv/redis@^4.0.1": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-4.6.0.tgz#518076b29dea24cd141d8f8204f5f5af20310b3d" + integrity sha512-FP3FP42RiQ3j0UC6f4Maf7ISTLAIivm37/SdfG5xvhqceMMq3kabtC6T4a2h5byMnh4S8PjP51DY/9CpyrcfsQ== + dependencies: + "@redis/client" "^1.6.0" + cluster-key-slot "^1.1.2" + hookified "^1.10.0" + +"@keyv/serialize@^1.0.3", "@keyv/serialize@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@keyv/serialize/-/serialize-1.1.1.tgz#0c01dd3a3483882af7cf3878d4e71d505c81fc4a" + integrity sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA== + +"@keyv/valkey@^1.0.1": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@keyv/valkey/-/valkey-1.0.11.tgz#4fe53d6980dac71342c78e88913116dbde617716" + integrity sha512-uXf4TftClagJxquhlo1QFKd7JIcmxVm9vlWkDZGlkLQAIesocKaap2ojJocMDvon6h56L2SczoWkkL5OZs4AfQ== + dependencies: + iovalkey "^0.3.3" + +"@kubernetes-models/apimachinery@^1.2.1": version "1.2.1" resolved "https://registry.npmmirror.com/@kubernetes-models/apimachinery/-/apimachinery-1.2.1.tgz#39725bf5e1f50972475ee6e614d5d70e41876b13" integrity sha512-mURvFnel3gaMXFchp8YeFmPBWuYifakuJnmRK1ad0Y7bxcPbcEntcb1rjdwitnHE0qTq3JZ2kBzpNqGO3+YJUw== @@ -6104,7 +6549,16 @@ "@kubernetes-models/validate" "^3.1.1" tslib "^2.4.0" -"@kubernetes-models/base@^4.0.1", "@kubernetes-models/base@^4.0.3": +"@kubernetes-models/apimachinery@^2.0.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@kubernetes-models/apimachinery/-/apimachinery-2.2.0.tgz#12cbfbba3e66adca716e04236feafadb2a4dac59" + integrity sha512-7Yj3aMz/nCTdr221wHOMsw5vAMJnLqANMI3BTuCmYjbP+7/tGAaOsiFwT75F4TJH45Dk1P6wcAEqDeCD1ur82Q== + dependencies: + "@kubernetes-models/base" "^5.0.1" + "@kubernetes-models/validate" "^4.0.0" + "@swc/helpers" "^0.5.8" + +"@kubernetes-models/base@^4.0.3": version "4.0.3" resolved "https://registry.npmmirror.com/@kubernetes-models/base/-/base-4.0.3.tgz#e973dfb60bb6d2fa29cbb281e2a74979d40efc9d" integrity sha512-9Uo/RzB1ZvvPmnnpAE6yWPaFerMkpBxIHLuObexVDF813ZwVPdn56mmOOFfA6RyZtPdIT1AlhMozlHKOX16AGQ== @@ -6113,6 +6567,15 @@ is-plain-object "^5.0.0" tslib "^2.4.0" +"@kubernetes-models/base@^5.0.0", "@kubernetes-models/base@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@kubernetes-models/base/-/base-5.0.1.tgz#0a4a73b98b0732c757538ae5cac2fe069e6035fb" + integrity sha512-Yfzmh965y/hT8qs9eE+Ms9sO1iT31c/sPoJerBFRGS9KechXXfxHgeqtpOzq+eByQ1INblkcZ09rt2V0FxG0lA== + dependencies: + "@kubernetes-models/validate" "^4.0.0" + is-plain-object "^5.0.0" + tslib "^2.4.0" + "@kubernetes-models/validate@^3.1.1": version "3.1.1" resolved "https://registry.npmmirror.com/@kubernetes-models/validate/-/validate-3.1.1.tgz#952362caf93d8e5d6b863c15558fd359d08346c2" @@ -6123,7 +6586,21 @@ ajv-formats-draft2019 "^1.6.1" tslib "^2.4.0" -"@kubernetes/client-node@0.20.0", "@kubernetes/client-node@^0.20.0", "@kubernetes/client-node@~0.20.0": +"@kubernetes-models/validate@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@kubernetes-models/validate/-/validate-4.0.0.tgz#669314ec4a4f0e8271d23ce4fdfa9dfffb278a9c" + integrity sha512-rsfF5t3sd5c+3ejUgcy8q0cVG2/BxT064L4Xz+CuKEe014u8T4MtFZiWjWZFpfMXSGKzFYEA6DJYm9CqjmIfZg== + dependencies: + ajv "^8.12.0" + ajv-formats "^2.1.1" + ajv-formats-draft2019 "^1.6.1" + ajv-i18n "^4.2.0" + is-cidr "^4.0.0" + tslib "^2.4.0" + optionalDependencies: + re2-wasm "^1.0.2" + +"@kubernetes/client-node@0.20.0", "@kubernetes/client-node@~0.20.0": version "0.20.0" resolved "https://registry.npmmirror.com/@kubernetes/client-node/-/client-node-0.20.0.tgz#4447ae27fd6eef3d4830a5a039f3b84ffd5c5913" integrity sha512-xxlv5GLX4FVR/dDKEsmi4SPeuB49aRc35stndyxcC73XnUEEwF39vXbROpHOirmDse8WE9vxOjABnSVS+jb7EA== @@ -6145,91 +6622,40 @@ optionalDependencies: openid-client "^5.3.0" +"@kubernetes/client-node@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@kubernetes/client-node/-/client-node-1.4.0.tgz#35b72d31f662befd9a2869e172b3153a3443e368" + integrity sha512-Zge3YvF7DJi264dU1b3wb/GmzR99JhUpqTvp+VGHfwZT+g7EOOYNScDJNZwXy9cszyIGPIs0VHr+kk8e95qqrA== + dependencies: + "@types/js-yaml" "^4.0.1" + "@types/node" "^24.0.0" + "@types/node-fetch" "^2.6.13" + "@types/stream-buffers" "^3.0.3" + form-data "^4.0.0" + hpagent "^1.2.0" + isomorphic-ws "^5.0.0" + js-yaml "^4.1.0" + jsonpath-plus "^10.3.0" + node-fetch "^2.7.0" + openid-client "^6.1.3" + rfc4648 "^1.3.0" + socks-proxy-agent "^8.0.4" + stream-buffers "^3.0.2" + tar-fs "^3.0.9" + ws "^8.18.2" + +"@kwsites/file-exists@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99" + integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw== + dependencies: + debug "^4.1.1" + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.npmmirror.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@lerna/child-process@7.4.2": - version "7.4.2" - resolved "https://registry.npmmirror.com/@lerna/child-process/-/child-process-7.4.2.tgz#a2fd013ac2150dc288270d3e0d0b850c06bec511" - integrity sha512-je+kkrfcvPcwL5Tg8JRENRqlbzjdlZXyaR88UcnCdNW0AJ1jX9IfHRys1X7AwSroU2ug8ESNC+suoBw1vX833Q== - dependencies: - chalk "^4.1.0" - execa "^5.0.0" - strong-log-transformer "^2.1.0" - -"@lerna/create@7.4.2": - version "7.4.2" - resolved "https://registry.npmmirror.com/@lerna/create/-/create-7.4.2.tgz#f845fad1480e46555af98bd39af29571605dddc9" - integrity sha512-1wplFbQ52K8E/unnqB0Tq39Z4e+NEoNrpovEnl6GpsTUrC6WDp8+w0Le2uCBV0hXyemxChduCkLz4/y1H1wTeg== - dependencies: - "@lerna/child-process" "7.4.2" - "@npmcli/run-script" "6.0.2" - "@nx/devkit" ">=16.5.1 < 17" - "@octokit/plugin-enterprise-rest" "6.0.1" - "@octokit/rest" "19.0.11" - byte-size "8.1.1" - chalk "4.1.0" - clone-deep "4.0.1" - cmd-shim "6.0.1" - columnify "1.6.0" - conventional-changelog-core "5.0.1" - conventional-recommended-bump "7.0.1" - cosmiconfig "^8.2.0" - dedent "0.7.0" - execa "5.0.0" - fs-extra "^11.1.1" - get-stream "6.0.0" - git-url-parse "13.1.0" - glob-parent "5.1.2" - globby "11.1.0" - graceful-fs "4.2.11" - has-unicode "2.0.1" - ini "^1.3.8" - init-package-json "5.0.0" - inquirer "^8.2.4" - is-ci "3.0.1" - is-stream "2.0.0" - js-yaml "4.1.0" - libnpmpublish "7.3.0" - load-json-file "6.2.0" - lodash "^4.17.21" - make-dir "4.0.0" - minimatch "3.0.5" - multimatch "5.0.0" - node-fetch "2.6.7" - npm-package-arg "8.1.1" - npm-packlist "5.1.1" - npm-registry-fetch "^14.0.5" - npmlog "^6.0.2" - nx ">=16.5.1 < 17" - p-map "4.0.0" - p-map-series "2.1.0" - p-queue "6.6.2" - p-reduce "^2.1.0" - pacote "^15.2.0" - pify "5.0.0" - read-cmd-shim "4.0.0" - read-package-json "6.0.4" - resolve-from "5.0.0" - rimraf "^4.4.1" - semver "^7.3.4" - signal-exit "3.0.7" - slash "^3.0.0" - ssri "^9.0.1" - strong-log-transformer "2.1.0" - tar "6.1.11" - temp-dir "1.0.0" - upath "2.0.1" - uuid "^9.0.0" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "5.0.0" - write-file-atomic "5.0.1" - write-pkg "4.0.0" - yargs "16.2.0" - yargs-parser "20.2.4" - "@lezer/common@^1.0.0", "@lezer/common@^1.1.0": version "1.2.1" resolved "https://registry.npmmirror.com/@lezer/common/-/common-1.2.1.tgz#198b278b7869668e1bebbe687586e12a42731049" @@ -6289,7 +6715,7 @@ react-double-scrollbar "0.0.15" uuid "^3.4.0" -"@material-ui/core@^4.11.0", "@material-ui/core@^4.12.2", "@material-ui/core@^4.12.4", "@material-ui/core@^4.9.13": +"@material-ui/core@^4.12.2", "@material-ui/core@^4.12.4", "@material-ui/core@^4.9.13": version "4.12.4" resolved "https://registry.npmmirror.com/@material-ui/core/-/core-4.12.4.tgz#4ac17488e8fcaf55eb6a7f5efb2a131e10138a73" integrity sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ== @@ -6314,17 +6740,6 @@ dependencies: "@babel/runtime" "^7.4.4" -"@material-ui/lab@4.0.0-alpha.45": - version "4.0.0-alpha.45" - resolved "https://registry.npmmirror.com/@material-ui/lab/-/lab-4.0.0-alpha.45.tgz#6e1abbdd6e44b9ef7b3eff8ef892a3da5dc52f10" - integrity sha512-zT6kUU87SHsPukiu3tlWg8V6o0tGS38c1b/xst/kPqX6eLbfqrROyxhHn1A8ZtHmqga1AKQdv/1llQoG80Afww== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.7.1" - clsx "^1.0.4" - prop-types "^15.7.2" - react-is "^16.8.0" - "@material-ui/lab@4.0.0-alpha.61", "@material-ui/lab@^4.0.0-alpha.61": version "4.0.0-alpha.61" resolved "https://registry.npmmirror.com/@material-ui/lab/-/lab-4.0.0-alpha.61.tgz#9bf8eb389c0c26c15e40933cc114d4ad85e3d978" @@ -6385,12 +6800,7 @@ resolved "https://registry.npmmirror.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== -"@material-ui/types@^6.0.1": - version "6.0.2" - resolved "https://registry.npmmirror.com/@material-ui/types/-/types-6.0.2.tgz#a6d384196c6e2e130eb2765b62d944c0b1ea1015" - integrity sha512-/XUca4wUb9pWimLLdM1PE8KS8rTbDEGohSGkGtk3WST7lm23m+8RYv9uOmrvOg/VSsl4bMiOv4t2/LCb+RLbTg== - -"@material-ui/utils@^4.11.3", "@material-ui/utils@^4.7.1": +"@material-ui/utils@^4.11.3": version "4.11.3" resolved "https://registry.npmmirror.com/@material-ui/utils/-/utils-4.11.3.tgz#232bd86c4ea81dab714f21edad70b7fdf0253942" integrity sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg== @@ -6404,107 +6814,210 @@ resolved "https://registry.yarnpkg.com/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz#9ceecc94b49fbaa15666e38ae8587f64acce007d" integrity sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA== -"@module-federation/dts-plugin@0.1.21": - version "0.1.21" - resolved "https://registry.yarnpkg.com/@module-federation/dts-plugin/-/dts-plugin-0.1.21.tgz#dd5c843a93266ea9442ef1ff000fc4f53e699a42" - integrity sha512-o0floS9ZN6i9C3Jmx0O65LasJga03ejxtzjIALzJUJR6fKykOP/Bm39MaBNk/MHoFrgnx0q6SVmARBjINcvPjA== +"@module-federation/bridge-react-webpack-plugin@0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.21.6.tgz#67f543576328bafe022106686f859d01b3496a9f" + integrity sha512-lJMmdhD4VKVkeg8RHb+Jwe6Ou9zKVgjtb1inEURDG/sSS2ksdZA8pVKLYbRPRbdmjr193Y8gJfqFbI2dqoyc/g== + dependencies: + "@module-federation/sdk" "0.21.6" + "@types/semver" "7.5.8" + semver "7.6.3" + +"@module-federation/cli@0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/cli/-/cli-0.21.6.tgz#a8acd0eca6b1c33a45f2fb5fd7c70d12c38b6aaf" + integrity sha512-qNojnlc8pTyKtK7ww3i/ujLrgWwgXqnD5DcDPsjADVIpu7STaoaVQ0G5GJ7WWS/ajXw6EyIAAGW/AMFh4XUxsQ== + dependencies: + "@module-federation/dts-plugin" "0.21.6" + "@module-federation/sdk" "0.21.6" + chalk "3.0.0" + commander "11.1.0" + jiti "2.4.2" + +"@module-federation/data-prefetch@0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/data-prefetch/-/data-prefetch-0.21.6.tgz#b79fda013967b4098ea753766094e150654ef999" + integrity sha512-8HD7ZhtWZ9vl6i3wA7M8cEeCRdtvxt09SbMTfqIPm+5eb/V4ijb8zGTYSRhNDb5RCB+BAixaPiZOWKXJ63/rVw== + dependencies: + "@module-federation/runtime" "0.21.6" + "@module-federation/sdk" "0.21.6" + fs-extra "9.1.0" + +"@module-federation/dts-plugin@0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/dts-plugin/-/dts-plugin-0.21.6.tgz#a73e5883fbbede846138fff667994a6176837c6a" + integrity sha512-YIsDk8/7QZIWn0I1TAYULniMsbyi2LgKTi9OInzVmZkwMC6644x/ratTWBOUDbdY1Co+feNkoYeot1qIWv2L7w== dependencies: - "@module-federation/managers" "0.1.21" - "@module-federation/sdk" "0.1.21" - "@module-federation/third-party-dts-extractor" "0.1.21" + "@module-federation/error-codes" "0.21.6" + "@module-federation/managers" "0.21.6" + "@module-federation/sdk" "0.21.6" + "@module-federation/third-party-dts-extractor" "0.21.6" adm-zip "^0.5.10" ansi-colors "^4.1.3" - axios "^1.6.7" + axios "^1.12.0" chalk "3.0.0" fs-extra "9.1.0" isomorphic-ws "5.0.0" - koa "2.11.0" + koa "3.0.3" lodash.clonedeepwith "4.5.0" log4js "6.9.1" node-schedule "2.1.1" rambda "^9.1.0" - ws "8.17.0" - -"@module-federation/enhanced@^0.1.19": - version "0.1.21" - resolved "https://registry.yarnpkg.com/@module-federation/enhanced/-/enhanced-0.1.21.tgz#1a4d8d6c3824d9cac15882a809a9b68ffc03cbec" - integrity sha512-FUrwcxj6qdyDG6RhaUR1vhO4aJq8/ZtvWxi4Hf9QTE7yLsBY87cCV0FD0bsYLN5femuik53Q7f3Zw/WxQ8u6Qg== - dependencies: - "@module-federation/dts-plugin" "0.1.21" - "@module-federation/managers" "0.1.21" - "@module-federation/manifest" "0.1.21" - "@module-federation/rspack" "0.1.21" - "@module-federation/runtime-tools" "0.1.21" - "@module-federation/sdk" "0.1.21" + ws "8.18.0" + +"@module-federation/enhanced@^0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/enhanced/-/enhanced-0.21.6.tgz#c917485505998c854307e7504f24755a3017d583" + integrity sha512-8PFQxtmXc6ukBC4CqGIoc96M2Ly9WVwCPu4Ffvt+K/SB6rGbeFeZoYAwREV1zGNMJ5v5ly6+AHIEOBxNuSnzSg== + dependencies: + "@module-federation/bridge-react-webpack-plugin" "0.21.6" + "@module-federation/cli" "0.21.6" + "@module-federation/data-prefetch" "0.21.6" + "@module-federation/dts-plugin" "0.21.6" + "@module-federation/error-codes" "0.21.6" + "@module-federation/inject-external-runtime-core-plugin" "0.21.6" + "@module-federation/managers" "0.21.6" + "@module-federation/manifest" "0.21.6" + "@module-federation/rspack" "0.21.6" + "@module-federation/runtime-tools" "0.21.6" + "@module-federation/sdk" "0.21.6" + btoa "^1.2.1" + schema-utils "^4.3.0" upath "2.0.1" -"@module-federation/managers@0.1.21": - version "0.1.21" - resolved "https://registry.yarnpkg.com/@module-federation/managers/-/managers-0.1.21.tgz#c0ca089453308371f285b43a28b0bfe58ff61dfd" - integrity sha512-rmN379q8SIovzZBK3s9z1KE84wXgeJR83cFdHJo/1xDAiou7WneW/fyefIvMsGN61hfFxygHoK0GcgXinFq9GA== +"@module-federation/error-codes@0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/error-codes/-/error-codes-0.21.6.tgz#d0c9fa71f9469b2150165ef4461dfd5be0e7f79b" + integrity sha512-MLJUCQ05KnoVl8xd6xs9a5g2/8U+eWmVxg7xiBMeR0+7OjdWUbHwcwgVFatRIwSZvFgKHfWEiI7wsU1q1XbTRQ== + +"@module-federation/error-codes@0.22.0": + version "0.22.0" + resolved "https://registry.yarnpkg.com/@module-federation/error-codes/-/error-codes-0.22.0.tgz#31ccc990dc240d73912ba7bd001f7e35ac751992" + integrity sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug== + +"@module-federation/inject-external-runtime-core-plugin@0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-0.21.6.tgz#d87fdfa6df94059c0b3b12f333394989c555e489" + integrity sha512-DJQne7NQ988AVi3QB8byn12FkNb+C2lBeU1NRf8/WbL0gmHsr6kW8hiEJCm8LYaURwtsQqtsEV7i+8+51qjSmQ== + +"@module-federation/managers@0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/managers/-/managers-0.21.6.tgz#dc854f1ae24508322d71bae91d6c9380b3fc1e5f" + integrity sha512-BeV6m2/7kF5MDVz9JJI5T8h8lMosnXkH2bOxxFewcra7ZjvDOgQu7WIio0mgk5l1zjNPvnEVKhnhrenEdcCiWg== dependencies: - "@module-federation/sdk" "0.1.21" + "@module-federation/sdk" "0.21.6" find-pkg "2.0.0" fs-extra "9.1.0" -"@module-federation/manifest@0.1.21": - version "0.1.21" - resolved "https://registry.yarnpkg.com/@module-federation/manifest/-/manifest-0.1.21.tgz#11cc876a1da7f8aba8d68b35bcdeeca5ab8aa372" - integrity sha512-L4iz5Y3qKJzz0bEAG6bDpPy+hHToHyW5xk8XhLJWFGVuXHjEHBl+cvE8tUAZkuWrhHrEmZBGHeHFxlDvdCKMjg== +"@module-federation/manifest@0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/manifest/-/manifest-0.21.6.tgz#4790467e788e0031e054366a85e2625a98ab6c42" + integrity sha512-yg93+I1qjRs5B5hOSvjbjmIoI2z3th8/yst9sfwvx4UDOG1acsE3HHMyPN0GdoIGwplC/KAnU5NmUz4tREUTGQ== dependencies: - "@module-federation/dts-plugin" "0.1.21" - "@module-federation/managers" "0.1.21" - "@module-federation/sdk" "0.1.21" + "@module-federation/dts-plugin" "0.21.6" + "@module-federation/managers" "0.21.6" + "@module-federation/sdk" "0.21.6" chalk "3.0.0" find-pkg "2.0.0" -"@module-federation/rspack@0.1.21": - version "0.1.21" - resolved "https://registry.yarnpkg.com/@module-federation/rspack/-/rspack-0.1.21.tgz#8085b50840b3cf6fc48fb2f5e24671dcc6207a52" - integrity sha512-30bmfb7tCQ8Uu4UKbapoSNNo+52a/rF3Nkje3/lv7xcmW/HGC2+/XJvckITo28jWsl5bzYe+pAu7XSExEAC0Ew== - dependencies: - "@module-federation/dts-plugin" "0.1.21" - "@module-federation/managers" "0.1.21" - "@module-federation/manifest" "0.1.21" - "@module-federation/runtime-tools" "0.1.21" - "@module-federation/sdk" "0.1.21" - -"@module-federation/runtime-tools@0.1.21": - version "0.1.21" - resolved "https://registry.yarnpkg.com/@module-federation/runtime-tools/-/runtime-tools-0.1.21.tgz#0e3e2168bde378cd5d6745b41befeddcd5bdbe3e" - integrity sha512-anayDx/wiL80XhD+CPTVvpYvKc4CNbEIy9fGoOCbMQKaKZhgDDE1461fy5abpgJphtj9NoUgCIpEn/O5fHNIfA== - dependencies: - "@module-federation/runtime" "0.1.21" - "@module-federation/webpack-bundler-runtime" "0.1.21" - -"@module-federation/runtime@0.1.21": - version "0.1.21" - resolved "https://registry.yarnpkg.com/@module-federation/runtime/-/runtime-0.1.21.tgz#1d233b29dd136488f2ba682017b53f13e015788a" - integrity sha512-/p4BhZ0SnjJuiL0wwu+FebFgIUJ9vM+oCY7CyprUHImyi/Y23ulI61WNWMVrKQGgdMoXQDQCL8RH4EnrVP2ZFw== - dependencies: - "@module-federation/sdk" "0.1.21" - -"@module-federation/sdk@0.1.21": - version "0.1.21" - resolved "https://registry.yarnpkg.com/@module-federation/sdk/-/sdk-0.1.21.tgz#adb15c38ddfea65f45bd989a94c3a575c8df6991" - integrity sha512-r7xPiAm+O4e+8Zvw+8b4ToeD0D0VJD004nHmt+Y8r/l98J2eA6di72Vn1FeyjtQbCrFtiMw3ts/dlqtcmIBipw== - -"@module-federation/third-party-dts-extractor@0.1.21": - version "0.1.21" - resolved "https://registry.yarnpkg.com/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.1.21.tgz#1c37aa4057ae618cb4b0dd5968e9adb3a7ed4744" - integrity sha512-gf+8Ah+/3Fs7jgOycVYDBe6o/tDh/+k7WpaeaQGnRV2p7bkrqfZ07g3IoB/kza1VEJFH4SV3u3VmKD7eB5BjQw== +"@module-federation/rspack@0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/rspack/-/rspack-0.21.6.tgz#7c5f39e870d56c735cf4d12698aed0779ad7482b" + integrity sha512-SB+z1P+Bqe3R6geZje9dp0xpspX6uash+zO77nodmUy8PTTBlkL7800Cq2FMLKUdoTZHJTBVXf0K6CqQWSlItg== + dependencies: + "@module-federation/bridge-react-webpack-plugin" "0.21.6" + "@module-federation/dts-plugin" "0.21.6" + "@module-federation/inject-external-runtime-core-plugin" "0.21.6" + "@module-federation/managers" "0.21.6" + "@module-federation/manifest" "0.21.6" + "@module-federation/runtime-tools" "0.21.6" + "@module-federation/sdk" "0.21.6" + btoa "1.2.1" + +"@module-federation/runtime-core@0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/runtime-core/-/runtime-core-0.21.6.tgz#2bcd24db2192179c96ce49772b09d72820ab9ea3" + integrity sha512-5Hd1Y5qp5lU/aTiK66lidMlM/4ji2gr3EXAtJdreJzkY+bKcI5+21GRcliZ4RAkICmvdxQU5PHPL71XmNc7Lsw== + dependencies: + "@module-federation/error-codes" "0.21.6" + "@module-federation/sdk" "0.21.6" + +"@module-federation/runtime-core@0.22.0": + version "0.22.0" + resolved "https://registry.yarnpkg.com/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz#7321ec792bb7d1d22bee6162ec43564b769d2a3c" + integrity sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA== + dependencies: + "@module-federation/error-codes" "0.22.0" + "@module-federation/sdk" "0.22.0" + +"@module-federation/runtime-tools@0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/runtime-tools/-/runtime-tools-0.21.6.tgz#40cbcc16af4c597169834a2d8b71a9d31779ab0c" + integrity sha512-fnP+ZOZTFeBGiTAnxve+axGmiYn2D60h86nUISXjXClK3LUY1krUfPgf6MaD4YDJ4i51OGXZWPekeMe16pkd8Q== + dependencies: + "@module-federation/runtime" "0.21.6" + "@module-federation/webpack-bundler-runtime" "0.21.6" + +"@module-federation/runtime-tools@0.22.0": + version "0.22.0" + resolved "https://registry.yarnpkg.com/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz#36f2a7cb267af208a9d1a237fe9a71b4bf31431e" + integrity sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA== + dependencies: + "@module-federation/runtime" "0.22.0" + "@module-federation/webpack-bundler-runtime" "0.22.0" + +"@module-federation/runtime@0.21.6", "@module-federation/runtime@^0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/runtime/-/runtime-0.21.6.tgz#8d4a29a792ed4a94e5a811fe097d314a6f9dcab7" + integrity sha512-+caXwaQqwTNh+CQqyb4mZmXq7iEemRDrTZQGD+zyeH454JAYnJ3s/3oDFizdH6245pk+NiqDyOOkHzzFQorKhQ== + dependencies: + "@module-federation/error-codes" "0.21.6" + "@module-federation/runtime-core" "0.21.6" + "@module-federation/sdk" "0.21.6" + +"@module-federation/runtime@0.22.0": + version "0.22.0" + resolved "https://registry.yarnpkg.com/@module-federation/runtime/-/runtime-0.22.0.tgz#f789c9ef40d846d110711c8221ecc0ad938d43d8" + integrity sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA== + dependencies: + "@module-federation/error-codes" "0.22.0" + "@module-federation/runtime-core" "0.22.0" + "@module-federation/sdk" "0.22.0" + +"@module-federation/sdk@0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/sdk/-/sdk-0.21.6.tgz#8aac1159ff37f418ed72bc79afccbbfb025f847a" + integrity sha512-x6hARETb8iqHVhEsQBysuWpznNZViUh84qV2yE7AD+g7uIzHKiYdoWqj10posbo5XKf/147qgWDzKZoKoEP2dw== + +"@module-federation/sdk@0.22.0": + version "0.22.0" + resolved "https://registry.yarnpkg.com/@module-federation/sdk/-/sdk-0.22.0.tgz#6ad4c1de85a900c3c80ff26cb87cce253e3a2770" + integrity sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g== + +"@module-federation/third-party-dts-extractor@0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.21.6.tgz#c99b3ae9243893b0064598eb19a13fd542b64a82" + integrity sha512-Il6x4hLsvCgZNk1DFwuMBNeoxD1BsZ5AW2BI/nUgu0k5FiAvfcz1OFawRFEHtaM/kVrCsymMOW7pCao90DaX3A== dependencies: find-pkg "2.0.0" fs-extra "9.1.0" resolve "1.22.8" -"@module-federation/webpack-bundler-runtime@0.1.21": - version "0.1.21" - resolved "https://registry.yarnpkg.com/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.1.21.tgz#022d96900b0e71c817593d2e08d4f087afd6974d" - integrity sha512-WJg133fvC8PMm3RRCul9+bzaMgyTYD7QpseDBscIWyKdZB80wMBTXuRKbKMwujLXHEPCJX+rkgGwolECnSuCiA== +"@module-federation/webpack-bundler-runtime@0.21.6": + version "0.21.6" + resolved "https://registry.yarnpkg.com/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.21.6.tgz#6831eaf147356fe5b096d24c7a902c323e810bb9" + integrity sha512-7zIp3LrcWbhGuFDTUMLJ2FJvcwjlddqhWGxi/MW3ur1a+HaO8v5tF2nl+vElKmbG1DFLU/52l3PElVcWf/YcsQ== + dependencies: + "@module-federation/runtime" "0.21.6" + "@module-federation/sdk" "0.21.6" + +"@module-federation/webpack-bundler-runtime@0.22.0": + version "0.22.0" + resolved "https://registry.yarnpkg.com/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz#dcbe8f972d722fe278e6a7c21988d4bee53d401d" + integrity sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA== dependencies: - "@module-federation/runtime" "0.1.21" - "@module-federation/sdk" "0.1.21" + "@module-federation/runtime" "0.22.0" + "@module-federation/sdk" "0.22.0" "@motionone/animation@^10.12.0": version "10.17.0" @@ -6581,81 +7094,76 @@ strict-event-emitter "^0.2.4" web-encoding "^1.1.5" -"@mui/base@5.0.0-beta.33": - version "5.0.0-beta.33" - resolved "https://registry.npmmirror.com/@mui/base/-/base-5.0.0-beta.33.tgz#fbb844e2d840d47dd7a48850a03152aed2381d10" - integrity sha512-WcSpoJUw/UYHXpvgtl4HyMar2Ar97illUpqiS/X1gtSBp6sdDW6kB2BJ9OlVQ+Kk/RL2GDp/WHA9sbjAYV35ow== - dependencies: - "@babel/runtime" "^7.23.8" - "@floating-ui/react-dom" "^2.0.6" - "@mui/types" "^7.2.13" - "@mui/utils" "^5.15.6" - "@popperjs/core" "^2.11.8" - clsx "^2.1.0" - prop-types "^15.8.1" +"@mui/core-downloads-tracker@^5.18.0": + version "5.18.0" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.18.0.tgz#85019a8704b0f63305fc5600635ee663810f2b66" + integrity sha512-jbhwoQ1AY200PSSOrNXmrFCaSDSJWP7qk6urkTmIirvRXDROkqe+QwcLlUiw/PrREwsIF/vm3/dAXvjlMHF0RA== -"@mui/core-downloads-tracker@^5.15.6": - version "5.15.6" - resolved "https://registry.npmmirror.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.6.tgz#9b82ba86d5a0fe55e9479b68dd5068943cc3835b" - integrity sha512-0aoWS4qvk1uzm9JBs83oQmIMIQeTBUeqqu8u+3uo2tMznrB5fIKqQVCbCgq+4Tm4jG+5F7dIvnjvQ2aV7UKtdw== +"@mui/icons-material@^5.0.0": + version "5.18.0" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.18.0.tgz#97d87f1b7bee5fa7b9ba844518631de3112c1e57" + integrity sha512-1s0vEZj5XFXDMmz3Arl/R7IncFqJ+WQ95LDp1roHWGDE2oCO3IS4/hmiOv1/8SD9r6B7tv9GLiqVZYHo+6PkTg== + dependencies: + "@babel/runtime" "^7.23.9" -"@mui/material@^5.12.2": - version "5.15.6" - resolved "https://registry.npmmirror.com/@mui/material/-/material-5.15.6.tgz#e32944ae4e01f85b314bc26e4cbbb700d598f30c" - integrity sha512-rw7bDdpi2kzfmcDN78lHp8swArJ5sBCKsn+4G3IpGfu44ycyWAWX0VdlvkjcR9Yrws2KIm7c+8niXpWHUDbWoA== +"@mui/material@^5.12.2", "@mui/material@^5.15.6": + version "5.18.0" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.18.0.tgz#71e72d52338252edc6f8d9461e04fdf0d61905cd" + integrity sha512-bbH/HaJZpFtXGvWg3TsBWG4eyt3gah3E7nCNU8GLyRjVoWcA91Vm/T+sjHfUcwgJSw9iLtucfHBoq+qW/T30aA== dependencies: - "@babel/runtime" "^7.23.8" - "@mui/base" "5.0.0-beta.33" - "@mui/core-downloads-tracker" "^5.15.6" - "@mui/system" "^5.15.6" - "@mui/types" "^7.2.13" - "@mui/utils" "^5.15.6" + "@babel/runtime" "^7.23.9" + "@mui/core-downloads-tracker" "^5.18.0" + "@mui/system" "^5.18.0" + "@mui/types" "~7.2.15" + "@mui/utils" "^5.17.1" + "@popperjs/core" "^2.11.8" "@types/react-transition-group" "^4.4.10" clsx "^2.1.0" - csstype "^3.1.2" + csstype "^3.1.3" prop-types "^15.8.1" - react-is "^18.2.0" + react-is "^19.0.0" react-transition-group "^4.4.5" -"@mui/private-theming@^5.15.6": - version "5.15.6" - resolved "https://registry.npmmirror.com/@mui/private-theming/-/private-theming-5.15.6.tgz#224819694ed76df041b1257256152a45d1fd733d" - integrity sha512-ZBX9E6VNUSscUOtU8uU462VvpvBS7eFl5VfxAzTRVQBHflzL+5KtnGrebgf6Nd6cdvxa1o0OomiaxSKoN2XDmg== +"@mui/private-theming@^5.17.1": + version "5.17.1" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.17.1.tgz#b4b6fbece27830754ef78186e3f1307dca42f295" + integrity sha512-XMxU0NTYcKqdsG8LRmSoxERPXwMbp16sIXPcLVgLGII/bVNagX0xaheWAwFv8+zDK7tI3ajllkuD3GZZE++ICQ== dependencies: - "@babel/runtime" "^7.23.8" - "@mui/utils" "^5.15.6" + "@babel/runtime" "^7.23.9" + "@mui/utils" "^5.17.1" prop-types "^15.8.1" -"@mui/styled-engine@^5.15.6": - version "5.15.6" - resolved "https://registry.npmmirror.com/@mui/styled-engine/-/styled-engine-5.15.6.tgz#3f4a8804de6ddeee17cb52ec92225686f423398a" - integrity sha512-KAn8P8xP/WigFKMlEYUpU9z2o7jJnv0BG28Qu1dhNQVutsLVIFdRf5Nb+0ijp2qgtcmygQ0FtfRuXv5LYetZTg== +"@mui/styled-engine@^5.18.0": + version "5.18.0" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.18.0.tgz#914cca1385bb33ce0cde31721f529c8bd7fa301c" + integrity sha512-BN/vKV/O6uaQh2z5rXV+MBlVrEkwoS/TK75rFQ2mjxA7+NBo8qtTAOA4UaM0XeJfn7kh2wZ+xQw2HAx0u+TiBg== dependencies: - "@babel/runtime" "^7.23.8" - "@emotion/cache" "^11.11.0" - csstype "^3.1.2" + "@babel/runtime" "^7.23.9" + "@emotion/cache" "^11.13.5" + "@emotion/serialize" "^1.3.3" + csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^5.15.6": - version "5.15.6" - resolved "https://registry.npmmirror.com/@mui/system/-/system-5.15.6.tgz#d278adb09d57ee21f4eef2f6bc335bf9bd062fca" - integrity sha512-J01D//u8IfXvaEHMBQX5aO2l7Q+P15nt96c4NskX7yp5/+UuZP8XCQJhtBtLuj+M2LLyXHYGmCPeblsmmscP2Q== +"@mui/system@^5.18.0": + version "5.18.0" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.18.0.tgz#e55331203a40584b26c5a855a07949ac8973bfb6" + integrity sha512-ojZGVcRWqWhu557cdO3pWHloIGJdzVtxs3rk0F9L+x55LsUjcMUVkEhiF7E4TMxZoF9MmIHGGs0ZX3FDLAf0Xw== dependencies: - "@babel/runtime" "^7.23.8" - "@mui/private-theming" "^5.15.6" - "@mui/styled-engine" "^5.15.6" - "@mui/types" "^7.2.13" - "@mui/utils" "^5.15.6" + "@babel/runtime" "^7.23.9" + "@mui/private-theming" "^5.17.1" + "@mui/styled-engine" "^5.18.0" + "@mui/types" "~7.2.15" + "@mui/utils" "^5.17.1" clsx "^2.1.0" - csstype "^3.1.2" + csstype "^3.1.3" prop-types "^15.8.1" -"@mui/types@^7.2.13": - version "7.2.13" - resolved "https://registry.npmmirror.com/@mui/types/-/types-7.2.13.tgz#d1584912942f9dc042441ecc2d1452be39c666b8" - integrity sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g== +"@mui/types@~7.2.15": + version "7.2.24" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.24.tgz#5eff63129d9c29d80bbf2d2e561bd0690314dec2" + integrity sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw== -"@mui/utils@^5.14.15", "@mui/utils@^5.15.6": +"@mui/utils@^5.14.15": version "5.15.6" resolved "https://registry.npmmirror.com/@mui/utils/-/utils-5.15.6.tgz#bbcc302b8e83e360a87230afe3ed8fc99e29fae9" integrity sha512-qfEhf+zfU9aQdbzo1qrSWlbPQhH1nCgeYgwhOVnj9Bn39shJQitEnXpSQpSNag8+uty5Od6PxmlNKPTnPySRKA== @@ -6665,39 +7173,31 @@ prop-types "^15.8.1" react-is "^18.2.0" +"@mui/utils@^5.17.1": + version "5.17.1" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.17.1.tgz#72ba4ffa79f7bdf69d67458139390f18484b6e6b" + integrity sha512-jEZ8FTqInt2WzxDV8bhImWBqeQRD99c/id/fq83H0ER9tFl+sfZlaAoCdznGvbSQQ9ividMxqSV2c7cC1vBcQg== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/types" "~7.2.15" + "@types/prop-types" "^15.7.12" + clsx "^2.1.1" + prop-types "^15.8.1" + react-is "^19.0.0" + "@n1ru4l/push-pull-async-iterable-iterator@^3.1.0": version "3.2.0" resolved "https://registry.npmmirror.com/@n1ru4l/push-pull-async-iterable-iterator/-/push-pull-async-iterable-iterator-3.2.0.tgz#c15791112db68dd9315d329d652b7e797f737655" integrity sha512-3fkKj25kEjsfObL6IlKPAlHYPq/oYwUkkQ03zsTTiDjD7vg/RxjdiLeCydqtxHZP0JgsXL3D/X5oAkMGzuUp/Q== -"@node-saml/node-saml@^4.0.4": - version "4.0.5" - resolved "https://registry.npmmirror.com/@node-saml/node-saml/-/node-saml-4.0.5.tgz#039e387095b54639b06df62b1b4a6d8941c6d907" - integrity sha512-J5DglElbY1tjOuaR1NPtjOXkXY5bpUhDoKVoeucYN98A3w4fwgjIOPqIGcb6cQsqFq2zZ6vTCeKn5C/hvefSaw== - dependencies: - "@types/debug" "^4.1.7" - "@types/passport" "^1.0.11" - "@types/xml-crypto" "^1.4.2" - "@types/xml-encryption" "^1.2.1" - "@types/xml2js" "^0.4.11" - "@xmldom/xmldom" "^0.8.6" - debug "^4.3.4" - xml-crypto "^3.0.1" - xml-encryption "^3.0.2" - xml2js "^0.5.0" - xmlbuilder "^15.1.1" - -"@node-saml/passport-saml@^4.0.4": - version "4.0.4" - resolved "https://registry.npmmirror.com/@node-saml/passport-saml/-/passport-saml-4.0.4.tgz#dce5ca38828fb2e5f63d56d4c0aefa01ba3c1dbc" - integrity sha512-xFw3gw0yo+K1mzlkW15NeBF7cVpRHN/4vpjmBKzov5YFImCWh/G0LcTZ8krH3yk2/eRPc3Or8LRPudVJBjmYaw== +"@napi-rs/wasm-runtime@1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz#dcfea99a75f06209a235f3d941e3460a51e9b14c" + integrity sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw== dependencies: - "@node-saml/node-saml" "^4.0.4" - "@types/express" "^4.17.14" - "@types/passport" "^1.0.11" - "@types/passport-strategy" "^0.2.35" - passport "^0.6.0" - passport-strategy "^1.0.0" + "@emnapi/core" "^1.5.0" + "@emnapi/runtime" "^1.5.0" + "@tybys/wasm-util" "^0.10.1" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -6720,13 +7220,16 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/fs@^2.1.0": - version "2.1.2" - resolved "https://registry.npmmirror.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" - integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== +"@npmcli/agent@^2.0.0": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.2.tgz#967604918e62f620a648c7975461c9c9e74fc5d5" + integrity sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og== dependencies: - "@gar/promisify" "^1.1.3" - semver "^7.3.5" + agent-base "^7.1.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.1" + lru-cache "^10.0.1" + socks-proxy-agent "^8.0.3" "@npmcli/fs@^3.1.0": version "3.1.0" @@ -6735,137 +7238,6 @@ dependencies: semver "^7.3.5" -"@npmcli/git@^4.0.0": - version "4.1.0" - resolved "https://registry.npmmirror.com/@npmcli/git/-/git-4.1.0.tgz#ab0ad3fd82bc4d8c1351b6c62f0fa56e8fe6afa6" - integrity sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ== - dependencies: - "@npmcli/promise-spawn" "^6.0.0" - lru-cache "^7.4.4" - npm-pick-manifest "^8.0.0" - proc-log "^3.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^3.0.0" - -"@npmcli/installed-package-contents@^2.0.1": - version "2.0.2" - resolved "https://registry.npmmirror.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" - integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== - dependencies: - npm-bundled "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -"@npmcli/move-file@^2.0.0": - version "2.0.1" - resolved "https://registry.npmmirror.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" - integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@npmcli/node-gyp@^3.0.0": - version "3.0.0" - resolved "https://registry.npmmirror.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" - integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== - -"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": - version "6.0.2" - resolved "https://registry.npmmirror.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" - integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== - dependencies: - which "^3.0.0" - -"@npmcli/run-script@6.0.2", "@npmcli/run-script@^6.0.0": - version "6.0.2" - resolved "https://registry.npmmirror.com/@npmcli/run-script/-/run-script-6.0.2.tgz#a25452d45ee7f7fb8c16dfaf9624423c0c0eb885" - integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA== - dependencies: - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/promise-spawn" "^6.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^3.0.0" - which "^3.0.0" - -"@nrwl/devkit@16.10.0": - version "16.10.0" - resolved "https://registry.npmmirror.com/@nrwl/devkit/-/devkit-16.10.0.tgz#ac8c5b4db00f12c4b817c937be2f7c4eb8f2593c" - integrity sha512-fRloARtsDQoQgQ7HKEy0RJiusg/HSygnmg4gX/0n/Z+SUS+4KoZzvHjXc6T5ZdEiSjvLypJ+HBM8dQzIcVACPQ== - dependencies: - "@nx/devkit" "16.10.0" - -"@nrwl/tao@16.10.0": - version "16.10.0" - resolved "https://registry.npmmirror.com/@nrwl/tao/-/tao-16.10.0.tgz#94642a0380709b8e387e1e33705a5a9624933375" - integrity sha512-QNAanpINbr+Pod6e1xNgFbzK1x5wmZl+jMocgiEFXZ67KHvmbD6MAQQr0MMz+GPhIu7EE4QCTLTyCEMlAG+K5Q== - dependencies: - nx "16.10.0" - tslib "^2.3.0" - -"@nx/devkit@16.10.0", "@nx/devkit@>=16.5.1 < 17": - version "16.10.0" - resolved "https://registry.npmmirror.com/@nx/devkit/-/devkit-16.10.0.tgz#7e466be2dee2dcb1ccaf286786ca2a0a639aa007" - integrity sha512-IvKQqRJFDDiaj33SPfGd3ckNHhHi6ceEoqCbAP4UuMXOPPVOX6H0KVk+9tknkPb48B7jWIw6/AgOeWkBxPRO5w== - dependencies: - "@nrwl/devkit" "16.10.0" - ejs "^3.1.7" - enquirer "~2.3.6" - ignore "^5.0.4" - semver "7.5.3" - tmp "~0.2.1" - tslib "^2.3.0" - -"@nx/nx-darwin-arm64@16.10.0": - version "16.10.0" - resolved "https://registry.npmmirror.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.10.0.tgz#0c73010cac7a502549483b12bad347da9014e6f1" - integrity sha512-YF+MIpeuwFkyvM5OwgY/rTNRpgVAI/YiR0yTYCZR+X3AAvP775IVlusNgQ3oedTBRUzyRnI4Tknj1WniENFsvQ== - -"@nx/nx-darwin-x64@16.10.0": - version "16.10.0" - resolved "https://registry.npmmirror.com/@nx/nx-darwin-x64/-/nx-darwin-x64-16.10.0.tgz#2ccf270418d552fd0a8e0d6089aee4944315adaa" - integrity sha512-ypi6YxwXgb0kg2ixKXE3pwf5myVNUgWf1CsV5OzVccCM8NzheMO51KDXTDmEpXdzUsfT0AkO1sk5GZeCjhVONg== - -"@nx/nx-freebsd-x64@16.10.0": - version "16.10.0" - resolved "https://registry.npmmirror.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.10.0.tgz#c3ee6914256e69493fed9355b0d6661d0e86da44" - integrity sha512-UeEYFDmdbbDkTQamqvtU8ibgu5jQLgFF1ruNb/U4Ywvwutw2d4ruOMl2e0u9hiNja9NFFAnDbvzrDcMo7jYqYw== - -"@nx/nx-linux-arm-gnueabihf@16.10.0": - version "16.10.0" - resolved "https://registry.npmmirror.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.10.0.tgz#a961eccbb38acb2da7fc125b29d1fead0b39152f" - integrity sha512-WV3XUC2DB6/+bz1sx+d1Ai9q2Cdr+kTZRN50SOkfmZUQyEBaF6DRYpx/a4ahhxH3ktpNfyY8Maa9OEYxGCBkQA== - -"@nx/nx-linux-arm64-gnu@16.10.0": - version "16.10.0" - resolved "https://registry.npmmirror.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.10.0.tgz#795f20072549d03822b5c4639ef438e473dbb541" - integrity sha512-aWIkOUw995V3ItfpAi5FuxQ+1e9EWLS1cjWM1jmeuo+5WtaKToJn5itgQOkvSlPz+HSLgM3VfXMvOFALNk125g== - -"@nx/nx-linux-arm64-musl@16.10.0": - version "16.10.0" - resolved "https://registry.npmmirror.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.10.0.tgz#f2428ee6dbe2b2c326e8973f76c97666def33607" - integrity sha512-uO6Gg+irqpVcCKMcEPIQcTFZ+tDI02AZkqkP7koQAjniLEappd8DnUBSQdcn53T086pHpdc264X/ZEpXFfrKWQ== - -"@nx/nx-linux-x64-gnu@16.10.0": - version "16.10.0" - resolved "https://registry.npmmirror.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.10.0.tgz#d36c2bcf94d49eaa24e3880ddaf6f1f617de539b" - integrity sha512-134PW/u/arNFAQKpqMJniC7irbChMPz+W+qtyKPAUXE0XFKPa7c1GtlI/wK2dvP9qJDZ6bKf0KtA0U/m2HMUOA== - -"@nx/nx-linux-x64-musl@16.10.0": - version "16.10.0" - resolved "https://registry.npmmirror.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.10.0.tgz#78bd2ab97a583b3d4ea3387b67fd7b136907493c" - integrity sha512-q8sINYLdIJxK/iUx9vRk5jWAWb/2O0PAbOJFwv4qkxBv4rLoN7y+otgCZ5v0xfx/zztFgk/oNY4lg5xYjIso2Q== - -"@nx/nx-win32-arm64-msvc@16.10.0": - version "16.10.0" - resolved "https://registry.npmmirror.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.10.0.tgz#ef20ec8d0c83d66e73e20df12d2c788b8f866396" - integrity sha512-moJkL9kcqxUdJSRpG7dET3UeLIciwrfP08mzBQ12ewo8K8FzxU8ZUsTIVVdNrwt01CXOdXoweGfdQLjJ4qTURA== - -"@nx/nx-win32-x64-msvc@16.10.0": - version "16.10.0" - resolved "https://registry.npmmirror.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.10.0.tgz#7410a51d0f8be631eec9552f01b2e5946285927c" - integrity sha512-5iV2NKZnzxJwZZ4DM5JVbRG/nkhAbzEskKaLBB82PmYGKzaDHuMHP1lcPoD/rtYMlowZgNA/RQndfKvPBPwmXA== - "@octokit/app@^14.0.2": version "14.0.2" resolved "https://registry.npmmirror.com/@octokit/app/-/app-14.0.2.tgz#b47c52020221351fb58640f113eb38b2ad3998fe" @@ -6984,18 +7356,10 @@ resolved "https://registry.npmmirror.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== -"@octokit/auth-token@^4.0.0": - version "4.0.0" - resolved "https://registry.npmmirror.com/@octokit/auth-token/-/auth-token-4.0.0.tgz#40d203ea827b9f17f42a29c6afb93b7745ef80c7" - integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== - -"@octokit/auth-unauthenticated@^3.0.0": - version "3.0.5" - resolved "https://registry.npmmirror.com/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.5.tgz#a562bffd6ca0d0e80541eaf9f9b89b8d53020228" - integrity sha512-yH2GPFcjrTvDWPwJWWCh0tPPtTL5SMgivgKPA+6v/XmYN6hGQkAto8JtZibSKOpf8ipmeYhLNWQ2UgW0GYILCw== - dependencies: - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" +"@octokit/auth-token@^4.0.0": + version "4.0.0" + resolved "https://registry.npmmirror.com/@octokit/auth-token/-/auth-token-4.0.0.tgz#40d203ea827b9f17f42a29c6afb93b7745ef80c7" + integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== "@octokit/auth-unauthenticated@^5.0.0": version "5.0.1" @@ -7005,7 +7369,7 @@ "@octokit/request-error" "^5.0.0" "@octokit/types" "^12.0.0" -"@octokit/core@^4.0.0", "@octokit/core@^4.2.1": +"@octokit/core@^4.2.1": version "4.2.4" resolved "https://registry.npmmirror.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== @@ -7048,14 +7412,6 @@ "@octokit/types" "^12.0.0" universal-user-agent "^6.0.0" -"@octokit/graphql-schema@^13.7.0": - version "13.10.0" - resolved "https://registry.npmmirror.com/@octokit/graphql-schema/-/graphql-schema-13.10.0.tgz#7e47d846a7f3f0f57e23ad5fcd75dcfd57fea967" - integrity sha512-D9ci/oCYOIea/AFmWUxD67aMaoMw392Nu4sxaO+kW+w/aeDeyECpGuztzXASyCn53ROPTweAg1fk7Payzmu5xQ== - dependencies: - graphql "^16.0.0" - graphql-tag "^2.10.3" - "@octokit/graphql@^5.0.0": version "5.0.6" resolved "https://registry.npmmirror.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" @@ -7074,21 +7430,6 @@ "@octokit/types" "^12.0.0" universal-user-agent "^6.0.0" -"@octokit/oauth-app@^4.2.0": - version "4.2.4" - resolved "https://registry.npmmirror.com/@octokit/oauth-app/-/oauth-app-4.2.4.tgz#d385ffebe116c684940bf255a2189665c61ee5a0" - integrity sha512-iuOVFrmm5ZKNavRtYu5bZTtmlKLc5uVgpqTfMEqYYf2OkieV6VdxKZAb5qLVdEPL8LU2lMWcGpavPBV835cgoA== - dependencies: - "@octokit/auth-oauth-app" "^5.0.0" - "@octokit/auth-oauth-user" "^2.0.0" - "@octokit/auth-unauthenticated" "^3.0.0" - "@octokit/core" "^4.0.0" - "@octokit/oauth-authorization-url" "^5.0.0" - "@octokit/oauth-methods" "^2.0.0" - "@types/aws-lambda" "^8.10.83" - fromentries "^1.3.1" - universal-user-agent "^6.0.0" - "@octokit/oauth-app@^6.0.0": version "6.1.0" resolved "https://registry.npmmirror.com/@octokit/oauth-app/-/oauth-app-6.1.0.tgz#22c276f6ad2364c6999837bfdd5d9c1092838726" @@ -7150,11 +7491,6 @@ resolved "https://registry.npmmirror.com/@octokit/openapi-types/-/openapi-types-19.1.0.tgz#75ec7e64743870fc73e1ab4bc6ec252ecdd624dc" integrity sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw== -"@octokit/plugin-enterprise-rest@6.0.1": - version "6.0.1" - resolved "https://registry.npmmirror.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" - integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== - "@octokit/plugin-paginate-graphql@^4.0.0": version "4.0.0" resolved "https://registry.npmmirror.com/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-4.0.0.tgz#b26024fa454039c18b948f13bf754ff86b89e8b9" @@ -7251,16 +7587,6 @@ "@octokit/types" "^12.0.0" universal-user-agent "^6.0.0" -"@octokit/rest@19.0.11": - version "19.0.11" - resolved "https://registry.npmmirror.com/@octokit/rest/-/rest-19.0.11.tgz#2ae01634fed4bd1fca5b642767205ed3fd36177c" - integrity sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw== - dependencies: - "@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" - "@octokit/rest@^19.0.3": version "19.0.13" resolved "https://registry.npmmirror.com/@octokit/rest/-/rest-19.0.13.tgz#e799393264edc6d3c67eeda9e5bd7832dcf974e4" @@ -7324,9 +7650,9 @@ resolved "https://registry.npmmirror.com/@octokit/webhooks-types/-/webhooks-types-7.1.0.tgz#d533dea253416e02dd6c2bfab25e533295bd5d3f" integrity sha512-y92CpG4kFFtBBjni8LHoV12IegJ+KFxLgKRengrVjKmGE5XMeCuGvlfRe75lTRrgXaG6XIWJlFpIDTlkoJsU8w== -"@octokit/webhooks@^10.0.0": +"@octokit/webhooks@^10.9.2": version "10.9.2" - resolved "https://registry.npmmirror.com/@octokit/webhooks/-/webhooks-10.9.2.tgz#1b1e79a70fa5b22a3149b18432cbf3f39dbcb544" + resolved "https://registry.yarnpkg.com/@octokit/webhooks/-/webhooks-10.9.2.tgz#1b1e79a70fa5b22a3149b18432cbf3f39dbcb544" integrity sha512-hFVF/szz4l/Y/GQdKxNmQjUke0XJXK986p+ucIlubTGVPVtVtup5G1jarQfvCMBs9Fvlf9dvH8K83E4lefmofQ== dependencies: "@octokit/request-error" "^3.0.0" @@ -7356,7 +7682,7 @@ dependencies: fast-deep-equal "^3.1.3" -"@opentelemetry/api@^1.0.1", "@opentelemetry/api@^1.3.0": +"@opentelemetry/api@^1.0.1": version "1.7.0" resolved "https://registry.npmmirror.com/@opentelemetry/api/-/api-1.7.0.tgz#b139c81999c23e3c8d3c0a7234480e945920fc40" integrity sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw== @@ -7366,39 +7692,33 @@ resolved "https://registry.npmmirror.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== -"@parcel/watcher@2.0.4": - version "2.0.4" - resolved "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" - integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== - dependencies: - node-addon-api "^3.2.1" - node-gyp-build "^4.3.0" +"@opentelemetry/api@^1.9.0": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.1.tgz#c1b0346de336ba55af2d5a7970882037baedec05" + integrity sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q== "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@playwright/test@^1.32.3": - version "1.41.1" - resolved "https://registry.npmmirror.com/@playwright/test/-/test-1.41.1.tgz#6954139ed4a67999f1b17460aa3d184f4b334f18" - integrity sha512-9g8EWTjiQ9yFBXc6HjCWe41msLpxEX0KhmfmPl9RPLJdfzL4F0lg2BdJ91O9azFdl11y1pmpwdjBiSxvqc+btw== +"@playwright/test@^1.59.1": + version "1.59.1" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.59.1.tgz#5c4d38eac84a61527af466602ae20277685a02d6" + integrity sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg== dependencies: - playwright "1.41.1" + playwright "1.59.1" -"@pmmmwh/react-refresh-webpack-plugin@^0.5.7": - version "0.5.11" - resolved "https://registry.npmmirror.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz#7c2268cedaa0644d677e8c4f377bc8fb304f714a" - integrity sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ== +"@pmmmwh/react-refresh-webpack-plugin@^0.6.0": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.6.2.tgz#c17661001ef4d7ad5c6e7dd714c142962b00b5dc" + integrity sha512-IhIAD5n4XvGHuL9nAgWfsBR0TdxtjrUWETYKCBHxauYXEv+b+ctEbs9neEgPC7Ecgzv4bpZTBwesAoGDeFymzA== dependencies: - ansi-html-community "^0.0.8" - common-path-prefix "^3.0.0" + anser "^2.1.1" core-js-pure "^3.23.3" error-stack-parser "^2.0.6" - find-up "^5.0.0" html-entities "^2.1.0" - loader-utils "^2.0.4" - schema-utils "^3.0.0" + schema-utils "^4.2.0" source-map "^0.7.3" "@popperjs/core@^2.11.8": @@ -7620,184 +7940,611 @@ "@radix-ui/react-use-size" "1.0.1" "@radix-ui/rect" "1.0.1" -"@radix-ui/react-portal@1.0.4": - version "1.0.4" - resolved "https://registry.npmmirror.com/@radix-ui/react-portal/-/react-portal-1.0.4.tgz#df4bfd353db3b1e84e639e9c63a5f2565fb00e15" - integrity sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q== +"@radix-ui/react-portal@1.0.4": + version "1.0.4" + resolved "https://registry.npmmirror.com/@radix-ui/react-portal/-/react-portal-1.0.4.tgz#df4bfd353db3b1e84e639e9c63a5f2565fb00e15" + integrity sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/react-presence@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@radix-ui/react-presence/-/react-presence-1.0.1.tgz#491990ba913b8e2a5db1b06b203cb24b5cdef9ba" + integrity sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-use-layout-effect" "1.0.1" + +"@radix-ui/react-primitive@1.0.3": + version "1.0.3" + resolved "https://registry.npmmirror.com/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz#d49ea0f3f0b2fe3ab1cb5667eb03e8b843b914d0" + integrity sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-slot" "1.0.2" + +"@radix-ui/react-roving-focus@1.0.4": + version "1.0.4" + resolved "https://registry.npmmirror.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz#e90c4a6a5f6ac09d3b8c1f5b5e81aab2f0db1974" + integrity sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-collection" "1.0.3" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-controllable-state" "1.0.1" + +"@radix-ui/react-slot@1.0.2": + version "1.0.2" + resolved "https://registry.npmmirror.com/@radix-ui/react-slot/-/react-slot-1.0.2.tgz#a9ff4423eade67f501ffb32ec22064bc9d3099ab" + integrity sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.1" + +"@radix-ui/react-tooltip@^1.0.6": + version "1.0.7" + resolved "https://registry.npmmirror.com/@radix-ui/react-tooltip/-/react-tooltip-1.0.7.tgz#8f55070f852e7e7450cc1d9210b793d2e5a7686e" + integrity sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-dismissable-layer" "1.0.5" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-popper" "1.1.3" + "@radix-ui/react-portal" "1.0.4" + "@radix-ui/react-presence" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-slot" "1.0.2" + "@radix-ui/react-use-controllable-state" "1.0.1" + "@radix-ui/react-visually-hidden" "1.0.3" + +"@radix-ui/react-use-callback-ref@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz#f4bb1f27f2023c984e6534317ebc411fc181107a" + integrity sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-controllable-state@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz#ecd2ced34e6330caf89a82854aa2f77e07440286" + integrity sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "1.0.1" + +"@radix-ui/react-use-escape-keydown@1.0.3": + version "1.0.3" + resolved "https://registry.npmmirror.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz#217b840c250541609c66f67ed7bab2b733620755" + integrity sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "1.0.1" + +"@radix-ui/react-use-layout-effect@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz#be8c7bc809b0c8934acf6657b577daf948a75399" + integrity sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-rect@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz#fde50b3bb9fd08f4a1cd204572e5943c244fcec2" + integrity sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/rect" "1.0.1" + +"@radix-ui/react-use-size@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz#1c5f5fea940a7d7ade77694bb98116fb49f870b2" + integrity sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-layout-effect" "1.0.1" + +"@radix-ui/react-visually-hidden@1.0.3", "@radix-ui/react-visually-hidden@^1.0.3": + version "1.0.3" + resolved "https://registry.npmmirror.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz#51aed9dd0fe5abcad7dee2a234ad36106a6984ac" + integrity sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/rect@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@radix-ui/rect/-/rect-1.0.1.tgz#bf8e7d947671996da2e30f4904ece343bc4a883f" + integrity sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ== + dependencies: + "@babel/runtime" "^7.13.10" + +"@react-aria/autocomplete@3.0.0-rc.6": + version "3.0.0-rc.6" + resolved "https://registry.yarnpkg.com/@react-aria/autocomplete/-/autocomplete-3.0.0-rc.6.tgz#34a8194e58fca1582495f1f71e4dc62d98c1ca41" + integrity sha512-uymUNJ8NW+dX7lmgkHE+SklAbxwktycAJcI5lBBw6KPZyc0EdMHC+/Fc5CUz3enIAhNwd2oxxogcSHknquMzQA== + dependencies: + "@react-aria/combobox" "^3.15.0" + "@react-aria/focus" "^3.21.5" + "@react-aria/i18n" "^3.12.16" + "@react-aria/interactions" "^3.27.1" + "@react-aria/listbox" "^3.15.3" + "@react-aria/searchfield" "^3.8.12" + "@react-aria/textfield" "^3.18.5" + "@react-aria/utils" "^3.33.1" + "@react-stately/autocomplete" "3.0.0-beta.4" + "@react-stately/combobox" "^3.13.0" + "@react-types/autocomplete" "3.0.0-alpha.38" + "@react-types/button" "^3.15.1" + "@react-types/shared" "^3.33.1" + "@swc/helpers" "^0.5.0" + +"@react-aria/button@^3.15.0": + version "3.15.0" + resolved "https://registry.yarnpkg.com/@react-aria/button/-/button-3.15.0.tgz#1f9e8dbe4475e4d94852e3fbe992a84335a9f2af" + integrity sha512-p8KehQ+OmhvhYmsjkp4K/Yv0tufyEBOHu6woJlRYL6kq5m6GKY5MZp8pyO26FpSiOyjhnZe6wbTyvCifvaokwQ== + dependencies: + "@swc/helpers" "^0.5.0" + react-aria "3.48.0" + +"@react-aria/collections@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@react-aria/collections/-/collections-3.1.0.tgz#8dac8bc41e628d95e50f308fdc0df8c5ec179db9" + integrity sha512-OwWoxHaAN0jNw7oo17TfTPY2KZksDme4p5a8KCnNBfm/a0zo+y4wiOUaFpGDmDT6HxwznyBcu3x3oSN7orTtvA== + dependencies: + "@swc/helpers" "^0.5.0" + react-aria "3.48.0" + +"@react-aria/combobox@^3.15.0", "@react-aria/combobox@^3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@react-aria/combobox/-/combobox-3.16.0.tgz#382b1c71551dcfb4a8d7acb64cbe2c43725a199e" + integrity sha512-yPPLduVUluCBuIFSZ+WgBMgl5oH7A5oQTemSpvf9ZmJ2oABIe+h6VQcwkEtMdokveHrdbmWIB9BL0E5jdDczAA== + dependencies: + "@swc/helpers" "^0.5.0" + react-aria "3.48.0" + +"@react-aria/dnd@^3.11.6": + version "3.12.0" + resolved "https://registry.yarnpkg.com/@react-aria/dnd/-/dnd-3.12.0.tgz#65c9b7b5c12db24e2a05c2a02b52c455bd6a1f47" + integrity sha512-FqAaxIMCgpq83UQhJRpSR+o3K4XQQYbJMKxhBWGL84Wn1p6m8QmWGvRKAiHeUoQXlY8R6KNxlMR/KjJvV8/lBA== + dependencies: + "@react-types/shared" "^3.34.0" + "@swc/helpers" "^0.5.0" + react-aria "3.48.0" + +"@react-aria/focus@^3.21.5": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.22.0.tgz#68aebf279ccdf8238507c3db871382cbd29c0b8f" + integrity sha512-ZfDOVuVhqDsM9mkNji3QUZ/d40JhlVgXrDkrfXylM1035QCrcTHN7m2DpbE95sU2A8EQb4wikvt5jM6K/73BPg== + dependencies: + "@swc/helpers" "^0.5.0" + react-aria "3.48.0" + +"@react-aria/i18n@^3.12.16": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.13.0.tgz#624333ef62de2f7a4fd68fc99dd9141780b2db3f" + integrity sha512-APjw4EwmvlnIyDxixSWfjHvOFFkW2rVTyKZ4l9FV0v7hOerh+FWLE6mF1XnnX3pgz3yARkKWwhSR9xYcRK6tpg== + dependencies: + "@internationalized/date" "^3.12.1" + "@internationalized/message" "^3.1.9" + "@internationalized/string" "^3.2.8" + "@swc/helpers" "^0.5.0" + react-aria "3.48.0" + +"@react-aria/interactions@^3.27.1": + version "3.28.0" + resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.28.0.tgz#83aeb39dd221a9b8f2f1e7c810b4e54f92c03519" + integrity sha512-OXwdU1EWFdMxmr/K1CXNGJzmNlCClByb+PuCaqUyzBymHPCGVhawirLIon/CrIN5psh3AiWpHSh4H0WeJdVpng== + dependencies: + "@react-types/shared" "^3.34.0" + "@swc/helpers" "^0.5.0" + react-aria "3.48.0" + +"@react-aria/interactions@~3.27.1": + version "3.27.1" + resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.27.1.tgz#0f4d3eafb7a9acd25d864e9ab1e4a8a68602db2a" + integrity sha512-M3wLpTTmDflI0QGNK0PJNUaBXXfeBXue8ZxLMngfc1piHNiH4G5lUvWd9W14XVbqrSCVY8i8DfGrNYpyyZu0tw== + dependencies: + "@react-aria/ssr" "^3.9.10" + "@react-aria/utils" "^3.33.1" + "@react-stately/flags" "^3.1.2" + "@react-types/shared" "^3.33.1" + "@swc/helpers" "^0.5.0" + +"@react-aria/listbox@^3.15.3": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@react-aria/listbox/-/listbox-3.16.0.tgz#cf535d0ca2bdafa525fe36798e09f4bb0cdded42" + integrity sha512-Jv6aTJECRntBvG+0ZQtXniAtHEQjvEi2QSm35FxRcsB8kgv7TmcinUOSZuHe5r8RDY2djILwdrqmfy6ApX0MDA== + dependencies: + "@swc/helpers" "^0.5.0" + react-aria "3.48.0" + +"@react-aria/live-announcer@^3.4.4": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-aria/live-announcer/-/live-announcer-3.5.0.tgz#b82c5df99badb492eff444e07d61b460f2661990" + integrity sha512-1b+Txq00WQ/PJPCsZT+CI5qP86DrfFGPuJL5ifKtdMVXrxNGJWrfu7jTj6q9AbAOOXLG11BJ6blILu7sZeRPxg== + dependencies: + "@swc/helpers" "^0.5.0" + react-aria "3.48.0" + +"@react-aria/overlays@^3.31.2", "@react-aria/overlays@^3.32.0": + version "3.32.0" + resolved "https://registry.yarnpkg.com/@react-aria/overlays/-/overlays-3.32.0.tgz#94430f0a92771912da5af203a025ea4b03da04fd" + integrity sha512-H9meBB14/M0bDwk8gZl8Fu8bwZN2El9LDlk5cNkgAozbEiRuQvTFOeE3RoP6XI6bwEnSBvb0ovPmx3/kNyOehQ== + dependencies: + "@swc/helpers" "^0.5.0" + react-aria "3.48.0" + +"@react-aria/searchfield@^3.8.12", "@react-aria/searchfield@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/searchfield/-/searchfield-3.9.0.tgz#392368e4fd4da22b3bd2fbe42de7fa241b7df3af" + integrity sha512-B8oOFhwGDotb7enoQ0bmXjhVkx8BkzK/ZnMmr4aF2ezexSFpG/ELkWqJPlfwknCwoBgBzhmpIKZvkoxQHR/iIw== + dependencies: + "@swc/helpers" "^0.5.0" + react-aria "3.48.0" + +"@react-aria/ssr@^3.9.10": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.10.0.tgz#1cea873259f3dbbb5afcf1b2ff1e20e37653085b" + integrity sha512-mnelvACtfNWWKFCT1YHebxJRmfBmmANGwHQhCFPByMVTx1L8RumcaLxChYkE87g2KPuP5xX2il/oRn1DytW+qQ== + dependencies: + "@swc/helpers" "^0.5.0" + react-aria "3.48.0" + +"@react-aria/textfield@^3.18.5": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@react-aria/textfield/-/textfield-3.19.0.tgz#fc0b44bd9e6460c85d50529fab58b37ed3d9600d" + integrity sha512-P5Da8QFV/bCp3oCXQAqaTWhXNtx4vWEjvoqa49oG5TM1blodLjFrzNyiRM7TmQU0VLwiQPAQrqD4yaDLXZ0Nqg== + dependencies: + "@swc/helpers" "^0.5.0" + react-aria "3.48.0" + +"@react-aria/toolbar@3.0.0-beta.24": + version "3.0.0-beta.24" + resolved "https://registry.yarnpkg.com/@react-aria/toolbar/-/toolbar-3.0.0-beta.24.tgz#6a74e0b28dfad6a5f5a22c6c971facb88d8ddbdc" + integrity sha512-B2Rmpko7Ghi2RbNfsGdbR7I+RQBDhPGVE4bU3/EwHz+P/vNe5LyGPTeSwqaOMsQTF9lKNCkY8424dVTCr6RUMg== + dependencies: + "@react-aria/focus" "^3.21.5" + "@react-aria/i18n" "^3.12.16" + "@react-aria/utils" "^3.33.1" + "@react-types/shared" "^3.33.1" + "@swc/helpers" "^0.5.0" + +"@react-aria/utils@^3.33.1": + version "3.34.0" + resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.34.0.tgz#ea01c8d50fbd6db64180b8c97d553e9a2438cad9" + integrity sha512-ZM1ZXIqpwGTJjjL6o3JhlZkEaBpQdxuOCqLEvwEwooaj5GsYI3E9UfOl5vy3UW6bYiEEWl9pNBntrb9CR9kItQ== + dependencies: + "@swc/helpers" "^0.5.0" + react-aria "3.48.0" + react-stately "3.46.0" + +"@react-aria/virtualizer@^4.1.13": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@react-aria/virtualizer/-/virtualizer-4.2.0.tgz#58409d03942ebef12e446f8c5835a82da7fc1fc3" + integrity sha512-j4Dj/PMQK+d/2E2Dxyr5ifPdg8IG/NYsfZJtPnvKHXeKlI3vj7F/InamujwCuEFHZBK3YmxlRPRGcoMdS66qfw== + dependencies: + "@swc/helpers" "^0.5.0" + react-aria "3.48.0" + +"@react-hookz/deep-equal@^1.0.4": + version "1.0.4" + resolved "https://registry.npmmirror.com/@react-hookz/deep-equal/-/deep-equal-1.0.4.tgz#68a71f36cbc88724b3ce6f4036183778b6e7f282" + integrity sha512-N56fTrAPUDz/R423pag+n6TXWbvlBZDtTehaGFjK0InmN+V2OFWLE/WmORhmn6Ce7dlwH5+tQN1LJFw3ngTJVg== + +"@react-hookz/web@^24.0.0": + version "24.0.4" + resolved "https://registry.npmmirror.com/@react-hookz/web/-/web-24.0.4.tgz#7a13d4c2cc65861b926ef6c4452fba00408c8778" + integrity sha512-DcIM6JiZklDyHF6CRD1FTXzuggAkQ+3Ncq2Wln7Kdih8GV6ZIeN9JfS6ZaQxpQUxan8/4n0J2V/R7nMeiSrb2Q== + dependencies: + "@react-hookz/deep-equal" "^1.0.4" + +"@react-spectrum/button@^3.18.0": + version "3.18.0" + resolved "https://registry.yarnpkg.com/@react-spectrum/button/-/button-3.18.0.tgz#edaf59383ee8affd4f6208d871f46b923c753cf4" + integrity sha512-SmjsXt+mLK2cf8PGstNZvLBfjqE5TjHW15yPIATI6ddqMdcC9JZ3ldnBTdFji9P/B6Rlop4ajnAdDV6bpxLtXA== + dependencies: + "@adobe/react-spectrum" "3.47.0" + "@swc/helpers" "^0.5.0" + +"@react-spectrum/combobox@^3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@react-spectrum/combobox/-/combobox-3.17.0.tgz#a47a7d0b78fd5f052d5e474344cd3292fe0556dd" + integrity sha512-HuJjm7m5W/lvpak0KQXAdqkvO17GpIfQ6/AuddnXEyltWhl481oRok04b9VQKdZAy9xrmmpReFcvXJ4zFDIGvg== + dependencies: + "@adobe/react-spectrum" "3.47.0" + "@swc/helpers" "^0.5.0" + react-stately "3.46.0" + +"@react-spectrum/form@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-spectrum/form/-/form-3.8.0.tgz#4845a355a20b3dd2834b742ba499403b77fe8a21" + integrity sha512-zNFA1zRFvoEZAhK6HxWyo2yUDlUXqCaaySxHvuCaevq4Zw3DKndbxq72ax9YDaUAvYlhgnb/bI616JBCZUAhdA== + dependencies: + "@adobe/react-spectrum" "3.47.0" + "@swc/helpers" "^0.5.0" + +"@react-spectrum/overlays@^5.10.0": + version "5.10.0" + resolved "https://registry.yarnpkg.com/@react-spectrum/overlays/-/overlays-5.10.0.tgz#f856dbd93289af2841aaed022e81682cdf775e3f" + integrity sha512-iGHXE5wdF4wNqdkgTKWAoeJUeKec+ki1BeRdiguywjY/SGMIx8Htd4dWyglDsOboBBJuEWMHKFAmTbMDhz6B9w== + dependencies: + "@adobe/react-spectrum" "3.47.0" + "@swc/helpers" "^0.5.0" + +"@react-spectrum/searchfield@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-spectrum/searchfield/-/searchfield-3.9.0.tgz#cc8db2c7393d2cc01686a60a407faafc5b316c71" + integrity sha512-so1IeolnYPsgjoIJmoGakUuQv+Ij5NVoWx2VTBc3o2sUva1GkxtFp6Woiow2Qqw0mFyoTwwoKi6zQJHLMqHhvQ== + dependencies: + "@adobe/react-spectrum" "3.47.0" + "@swc/helpers" "^0.5.0" + +"@react-spectrum/table@^3.18.0": + version "3.18.0" + resolved "https://registry.yarnpkg.com/@react-spectrum/table/-/table-3.18.0.tgz#30e3ff72e86e7c1ae235f6862e11aae521138788" + integrity sha512-ckvjjz/Tp8Y/Ck/OOOXX/dTs8PtoWCy7+QDBxWzNpqvxcLiLviudNKJFhGfeyGGDi3IOMWRSaG5yWN9wrvItNQ== + dependencies: + "@adobe/react-spectrum" "3.47.0" + "@swc/helpers" "^0.5.0" + react-stately "3.46.0" + +"@react-stately/autocomplete@3.0.0-beta.4": + version "3.0.0-beta.4" + resolved "https://registry.yarnpkg.com/@react-stately/autocomplete/-/autocomplete-3.0.0-beta.4.tgz#113894dc39fc5da607dcf90e3421d419fe1978f9" + integrity sha512-K2Uy7XEdseFvgwRQ8CyrYEHMupjVKEszddOapP8deNz4hntYvT1aRm0m+sKa5Kl/4kvg9c/3NZpQcrky/vRZIg== + dependencies: + "@react-stately/utils" "^3.11.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/collections@^3.12.10": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@react-stately/collections/-/collections-3.13.0.tgz#69940f5ce2e0fc1b95e75b6a8eaae90e111e6661" + integrity sha512-f5HPoCjofrubOTbxch/GfGCV53U7C2y8JJM6RmLssbraw/iYGFME+UiorO+i7UFdMPQbyB6SoOpvtIYwuzS9WA== + dependencies: + "@swc/helpers" "^0.5.0" + react-stately "3.46.0" + +"@react-stately/combobox@^3.13.0", "@react-stately/combobox@^3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@react-stately/combobox/-/combobox-3.14.0.tgz#316e6ab7dc99c3e918f782a26e0d1c7c01e20657" + integrity sha512-WYWJK9IzWKDqnFk1HF6FGISrhPh/bzYkRLgd40Psyke5dwYusOrEUzG161P8v9vxAzs621pYB4hz2UhrRWsMPQ== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" + "@swc/helpers" "^0.5.0" + react-stately "3.46.0" -"@radix-ui/react-presence@1.0.1": - version "1.0.1" - resolved "https://registry.npmmirror.com/@radix-ui/react-presence/-/react-presence-1.0.1.tgz#491990ba913b8e2a5db1b06b203cb24b5cdef9ba" - integrity sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg== +"@react-stately/flags@^3.1.2": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@react-stately/flags/-/flags-3.2.0.tgz#4df462af9e32b4ae030cf5366c6269f54542bdc6" + integrity sha512-HcfFk5sUpSVUgjOHUSi4izUWbiya+iTt2/PAviW+cKmCJOy507CQ3VG3Yu0Rqs0cr66yt3foDKy0MRNQ2zmGmQ== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-use-layout-effect" "1.0.1" + "@swc/helpers" "^0.5.0" + react-stately "3.46.0" -"@radix-ui/react-primitive@1.0.3": - version "1.0.3" - resolved "https://registry.npmmirror.com/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz#d49ea0f3f0b2fe3ab1cb5667eb03e8b843b914d0" - integrity sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g== +"@react-stately/grid@^3.12.0": + version "3.12.0" + resolved "https://registry.yarnpkg.com/@react-stately/grid/-/grid-3.12.0.tgz#bf3645106bdda66d1d2f9b8ee2218b74d8403055" + integrity sha512-MLCN3hyxRpaj4tUnQyc+aFR2/QBP2rmFcXGdADHO1c0kvxd9Vk+bEe88uA9MJTz2VClQ+AN7yRGCTIuME+QvNQ== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-slot" "1.0.2" + "@swc/helpers" "^0.5.0" + react-stately "3.46.0" -"@radix-ui/react-roving-focus@1.0.4": - version "1.0.4" - resolved "https://registry.npmmirror.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz#e90c4a6a5f6ac09d3b8c1f5b5e81aab2f0db1974" - integrity sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ== +"@react-stately/layout@^4.6.0": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@react-stately/layout/-/layout-4.7.0.tgz#dc7bd03d34b9d1bf23c8c8f3e2f8ee0bc6e924ad" + integrity sha512-63VvOKI8KXeD3SO7yt41511CdZ+9wK2LVY2mpY+c87ML5fVVgMTc/o1IsYWI07rW3IjEFcWoW93eItgMbJCXyg== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-collection" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-controllable-state" "1.0.1" + "@swc/helpers" "^0.5.0" + react-stately "3.46.0" -"@radix-ui/react-slot@1.0.2": - version "1.0.2" - resolved "https://registry.npmmirror.com/@radix-ui/react-slot/-/react-slot-1.0.2.tgz#a9ff4423eade67f501ffb32ec22064bc9d3099ab" - integrity sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg== +"@react-stately/layout@~4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@react-stately/layout/-/layout-4.6.0.tgz#c9228f7a1c4cca08c64c5753ef4be80464afb163" + integrity sha512-kBenEsP03nh5rKgfqlVMPcoKTJv0v92CTvrAb5gYY8t9g8LOwzdL89Yannq7f5xv8LFck/MmRQlotpMt2InETg== + dependencies: + "@react-stately/collections" "^3.12.10" + "@react-stately/table" "^3.15.4" + "@react-stately/virtualizer" "^4.4.6" + "@react-types/grid" "^3.3.8" + "@react-types/shared" "^3.33.1" + "@react-types/table" "^3.13.6" + "@swc/helpers" "^0.5.0" + +"@react-stately/overlays@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-stately/overlays/-/overlays-3.7.0.tgz#c3b75eeb50e84cdfa07cba7850bd0ba4bf3fbce9" + integrity sha512-VyFlju6JqEUTyr+igrEjTeUi2MXw7IBOxWYzLoq26UJxf+45okqUWfyKRdXTvNjGJqQol9fqIg5Nv8fU4H/CvQ== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.1" + "@swc/helpers" "^0.5.0" + react-stately "3.46.0" -"@radix-ui/react-tooltip@^1.0.6": - version "1.0.7" - resolved "https://registry.npmmirror.com/@radix-ui/react-tooltip/-/react-tooltip-1.0.7.tgz#8f55070f852e7e7450cc1d9210b793d2e5a7686e" - integrity sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw== +"@react-stately/overlays@~3.6.23": + version "3.6.23" + resolved "https://registry.yarnpkg.com/@react-stately/overlays/-/overlays-3.6.23.tgz#f6d6b84b22580fa0c8c9cd7fe1cc773c4f57cd46" + integrity sha512-RzWxots9A6gAzQMP4s8hOAHV7SbJRTFSlQbb6ly1nkWQXacOSZSFNGsKOaS0eIatfNPlNnW4NIkgtGws5UYzfw== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-dismissable-layer" "1.0.5" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-popper" "1.1.3" - "@radix-ui/react-portal" "1.0.4" - "@radix-ui/react-presence" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-slot" "1.0.2" - "@radix-ui/react-use-controllable-state" "1.0.1" - "@radix-ui/react-visually-hidden" "1.0.3" + "@react-stately/utils" "^3.11.0" + "@react-types/overlays" "^3.9.4" + "@swc/helpers" "^0.5.0" -"@radix-ui/react-use-callback-ref@1.0.1": - version "1.0.1" - resolved "https://registry.npmmirror.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz#f4bb1f27f2023c984e6534317ebc411fc181107a" - integrity sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ== +"@react-stately/searchfield@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-stately/searchfield/-/searchfield-3.6.0.tgz#23be581b9bcce13cef9405e962881c01181d862a" + integrity sha512-cSSDXynj3oQdILHSthEaB2pAIXG0POHKqjZZ07k6L/A0fkyhkwAbR/hyg+idHCH7Ah9hWnS+YhicWE1b6nw1zg== dependencies: - "@babel/runtime" "^7.13.10" + "@swc/helpers" "^0.5.0" + react-stately "3.46.0" -"@radix-ui/react-use-controllable-state@1.0.1": - version "1.0.1" - resolved "https://registry.npmmirror.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz#ecd2ced34e6330caf89a82854aa2f77e07440286" - integrity sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA== +"@react-stately/selection@^3.20.9": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@react-stately/selection/-/selection-3.21.0.tgz#aa0e39ac573401cd17d4e0397c6a514feae1ce2c" + integrity sha512-SBafuZoJgDr7L9dCgMjat1Mx85xOnRO7E5UCtAj6TF/7yhisJVnrNkfnryOH2CunPyXCUgfUlUebkxeXjbW+lw== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-callback-ref" "1.0.1" + "@swc/helpers" "^0.5.0" + react-stately "3.46.0" -"@radix-ui/react-use-escape-keydown@1.0.3": - version "1.0.3" - resolved "https://registry.npmmirror.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz#217b840c250541609c66f67ed7bab2b733620755" - integrity sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg== +"@react-stately/table@^3.15.4", "@react-stately/table@^3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@react-stately/table/-/table-3.16.0.tgz#b1404054e23842967ac91ed751a90a201c08824f" + integrity sha512-xuvkFuRj8SYE36T+hEed+30oPCzbkcGNduVBAOJGr9K0z7y/a3OxFdOnAv/OsCvKW1sLK231oTSFvZ36zRFndA== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-callback-ref" "1.0.1" + "@swc/helpers" "^0.5.0" + react-stately "3.46.0" -"@radix-ui/react-use-layout-effect@1.0.1": - version "1.0.1" - resolved "https://registry.npmmirror.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz#be8c7bc809b0c8934acf6657b577daf948a75399" - integrity sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ== +"@react-stately/utils@^3.11.0": + version "3.12.0" + resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.12.0.tgz#98fe480764a7425c12215f00260d06d668fef28a" + integrity sha512-7q+iHz9cENvro1dVKgdTxNh1i1mtWuLUI6UHp10TAgpxM9DyRDvmuN35zLXYCmMDgx3WLY2xkwqoez8xd+CdxQ== dependencies: - "@babel/runtime" "^7.13.10" + "@swc/helpers" "^0.5.0" + react-stately "3.46.0" -"@radix-ui/react-use-rect@1.0.1": - version "1.0.1" - resolved "https://registry.npmmirror.com/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz#fde50b3bb9fd08f4a1cd204572e5943c244fcec2" - integrity sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw== +"@react-stately/virtualizer@^4.4.6": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@react-stately/virtualizer/-/virtualizer-4.5.0.tgz#08d9a149facda20b2472b52d5441d66f8645a0ea" + integrity sha512-Yf1xA9U7PuuaHgxWExwO5MrWCqzDZZTPCzo9YCcsilkOFk2GxMcGNysM71funj+d4CMqsWjCNmgNhZQjBXKjNw== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/rect" "1.0.1" + "@swc/helpers" "^0.5.0" + react-stately "3.46.0" -"@radix-ui/react-use-size@1.0.1": - version "1.0.1" - resolved "https://registry.npmmirror.com/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz#1c5f5fea940a7d7ade77694bb98116fb49f870b2" - integrity sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g== +"@react-types/autocomplete@3.0.0-alpha.38": + version "3.0.0-alpha.38" + resolved "https://registry.yarnpkg.com/@react-types/autocomplete/-/autocomplete-3.0.0-alpha.38.tgz#fd37e5e5e40c42d8a371d871d0651cd497124e70" + integrity sha512-0XrlVC8drzcrCNzybbkZdLcTofXEzBsHuaFevt5awW1J0xBJ+SMLIQMDeUYrvKjjwXUBlCtjJJpOvitGt4Z+KA== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-layout-effect" "1.0.1" + "@react-types/combobox" "^3.14.0" + "@react-types/searchfield" "^3.6.8" + "@react-types/shared" "^3.33.1" -"@radix-ui/react-visually-hidden@1.0.3", "@radix-ui/react-visually-hidden@^1.0.3": - version "1.0.3" - resolved "https://registry.npmmirror.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz#51aed9dd0fe5abcad7dee2a234ad36106a6984ac" - integrity sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA== +"@react-types/button@^3.15.1": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@react-types/button/-/button-3.16.0.tgz#8c6945232737e1bf07036af45c475e14f9962a11" + integrity sha512-Z5///n2Y1jtF0gokBq2Y1K1cpOwsWZ24HPeAm3eEmZrbBXMrxC2oEA5ZThsSHuIGsqiyNJiQ2scsDftmr+PkZw== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" + "@react-aria/button" "^3.15.0" + "@react-spectrum/button" "^3.18.0" -"@radix-ui/rect@1.0.1": - version "1.0.1" - resolved "https://registry.npmmirror.com/@radix-ui/rect/-/rect-1.0.1.tgz#bf8e7d947671996da2e30f4904ece343bc4a883f" - integrity sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ== +"@react-types/calendar@~3.8.3": + version "3.8.3" + resolved "https://registry.yarnpkg.com/@react-types/calendar/-/calendar-3.8.3.tgz#7f849885217ab74f5c5b463defe78bee8690fd60" + integrity sha512-fpH6WNXotzH0TlKHXXxtjeLZ7ko0sbyHmwDAwmDFyP7T0Iwn1YQZ+lhceLifvynlxuOgX6oBItyUKmkHQ0FouQ== dependencies: - "@babel/runtime" "^7.13.10" + "@internationalized/date" "^3.12.0" + "@react-types/shared" "^3.33.1" -"@react-hookz/deep-equal@^1.0.4": - version "1.0.4" - resolved "https://registry.npmmirror.com/@react-hookz/deep-equal/-/deep-equal-1.0.4.tgz#68a71f36cbc88724b3ce6f4036183778b6e7f282" - integrity sha512-N56fTrAPUDz/R423pag+n6TXWbvlBZDtTehaGFjK0InmN+V2OFWLE/WmORhmn6Ce7dlwH5+tQN1LJFw3ngTJVg== +"@react-types/combobox@^3.14.0": + version "3.15.0" + resolved "https://registry.yarnpkg.com/@react-types/combobox/-/combobox-3.15.0.tgz#04bb3b1d34a92273538ca66351e8af697b5d5d9d" + integrity sha512-iWV9UfLg1P0XhEqPTbnhsVMHFwc0RnrZjHfCLwgilH0Af0z1CQ8RyWiT8cOd1eqbkOAiVgCv29Xs8PAxaQBHSg== + dependencies: + "@react-aria/combobox" "^3.16.0" + "@react-spectrum/combobox" "^3.17.0" + "@react-stately/combobox" "^3.14.0" -"@react-hookz/web@^23.0.0": - version "23.1.0" - resolved "https://registry.npmmirror.com/@react-hookz/web/-/web-23.1.0.tgz#4e9bf133c56519924b4c2988aca20d09387f5e0a" - integrity sha512-fvbURdsa1ukttbLR1ASE/XmqXP09vZ1PiCYppYeR1sNMzCrdkG0iBnjxniFSVjJ8gIw2fRs6nqMTbeBz2uAkuA== +"@react-types/form@^3.7.18": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-types/form/-/form-3.8.0.tgz#aa1cb4f28eb642c39f11e08e11f4a213071225ea" + integrity sha512-ff38E4/5xLxqVemicLw+GefRoWBJEAro+hDwFZ5sde6kslktYt2LHJ7+IkID6yQYy+T3qxXgIdfxX+O1rlpWvw== dependencies: - "@react-hookz/deep-equal" "^1.0.4" + "@react-spectrum/form" "^3.8.0" + "@react-types/shared" "^3.34.0" -"@react-hookz/web@^24.0.0": - version "24.0.4" - resolved "https://registry.npmmirror.com/@react-hookz/web/-/web-24.0.4.tgz#7a13d4c2cc65861b926ef6c4452fba00408c8778" - integrity sha512-DcIM6JiZklDyHF6CRD1FTXzuggAkQ+3Ncq2Wln7Kdih8GV6ZIeN9JfS6ZaQxpQUxan8/4n0J2V/R7nMeiSrb2Q== +"@react-types/grid@^3.3.8": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-types/grid/-/grid-3.4.0.tgz#55e4ce6fbbd19c8b101d444bd6a7849ad7a72549" + integrity sha512-h+u3hKli9gVwfYx6cabkTNZrP+HQ97vAmTugGIk5IAfouE6kjhoDaDzVD0VUvIWqc12LIkrqe1LdBMZ0ofbV6A== dependencies: - "@react-hookz/deep-equal" "^1.0.4" + "@react-stately/grid" "^3.12.0" + +"@react-types/overlays@^3.9.4": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@react-types/overlays/-/overlays-3.10.0.tgz#e263133b214cb428c2719487b9f51c93da317b7b" + integrity sha512-cgrcOTxy6ac0kiphQOkc8mj5artZMB/XVrFgukRZ2FcbYNEERpg2VQ5ztd0+H1ER7O0kx7AmwHxdut+x1EAjrw== + dependencies: + "@react-aria/overlays" "^3.32.0" + "@react-spectrum/overlays" "^5.10.0" + "@react-stately/overlays" "^3.7.0" + "@react-types/shared" "^3.34.0" + +"@react-types/searchfield@^3.6.8": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-types/searchfield/-/searchfield-3.7.0.tgz#e2f80cb0bc661e3a8bd49839233e27c7d9b02df7" + integrity sha512-/JBVYkXLB4EozPEfgpYW7C9tzw4xUmdVmuf7g+8ip/AsFgsyW/FjdLpbaXESXR78D0nppWaNxUxcdUXcuo+eEg== + dependencies: + "@react-aria/searchfield" "^3.9.0" + "@react-spectrum/searchfield" "^3.9.0" + "@react-stately/searchfield" "^3.6.0" + +"@react-types/shared@^3.33.1", "@react-types/shared@^3.34.0": + version "3.34.0" + resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.34.0.tgz#f9688443fdf8e29f7a06b499598a930be96a2f65" + integrity sha512-gp6xo/s2lX54AlTjOiqwDnxA7UW79BNvI9dB9pr3LZTzRKCd1ZA+ZbgKw/ReIiWuvvVw/8QFJpnqeeFyLocMcQ== + +"@react-types/table@^3.13.6": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@react-types/table/-/table-3.14.0.tgz#918a7de4de7cc2408ddd10f8bb28536feae7dd5b" + integrity sha512-emTYu9biFFlVEN208EmYpnO3bzi0f7q+07rnerUWRRRqXQpgNW/G5Tc6ifgCUXLp+KjwzLIeoDl4hs3ZnG5NSA== + dependencies: + "@react-spectrum/table" "^3.18.0" + "@react-stately/table" "^3.16.0" + "@react-types/shared" "^3.34.0" + +"@react-types/table@~3.13.6": + version "3.13.6" + resolved "https://registry.yarnpkg.com/@react-types/table/-/table-3.13.6.tgz#7cf94792d70ab077b6fbe6b843b8314c2456850b" + integrity sha512-eluL+iFfnVmFm7OSZrrFG9AUjw+tcv898zbv+NsZACa8oXG1v9AimhZfd+Mo8q/5+sX/9hguWNXFkSvmTjuVPQ== + dependencies: + "@react-types/grid" "^3.3.8" + "@react-types/shared" "^3.33.1" + +"@redis/client@^1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@redis/client/-/client-1.6.1.tgz#c4636b7cb34e96008a988409b7e787364ae761a2" + integrity sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw== + dependencies: + cluster-key-slot "1.1.2" + generic-pool "3.9.0" + yallist "4.0.0" "@remix-run/router@1.14.2": version "1.14.2" resolved "https://registry.npmmirror.com/@remix-run/router/-/router-1.14.2.tgz#4d58f59908d9197ba3179310077f25c88e49ed17" integrity sha512-ACXpdMM9hmKZww21yEqWwiLws/UPLhNKvimN8RrYSqPSvB3ov7sLvAcfvaxePeLvccTQKGdkDIhLYApZVDFuKg== -"@repeaterjs/repeater@^3.0.4": - version "3.0.5" - resolved "https://registry.npmmirror.com/@repeaterjs/repeater/-/repeater-3.0.5.tgz#b77571685410217a548a9c753aa3cdfc215bfc78" - integrity sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA== +"@remixicon/react@^4.6.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@remixicon/react/-/react-4.9.0.tgz#e4469985dc88af987f03c2309e36b04028cb4600" + integrity sha512-5/jLDD4DtKxH2B4QVXTobvV1C2uL8ab9D5yAYNtFt+w80O0Ys1xFOrspqROL3fjrZi+7ElFUWE37hBfaAl6U+Q== -"@rjsf/core@5.18.5": - version "5.18.5" - resolved "https://registry.yarnpkg.com/@rjsf/core/-/core-5.18.5.tgz#580209de5cf66fac975b0a649df9b8e921aac96a" - integrity sha512-TTG6zSybzfSp+ko4U/WIeyVX5dRLbl7C0ZU2lpK/f6ruuLbBji8A523iLYINOzyDQL5uBtMdmRdO6oMdCz79tw== +"@rjsf/core@5.24.13": + version "5.24.13" + resolved "https://registry.yarnpkg.com/@rjsf/core/-/core-5.24.13.tgz#ef98e5dc6ac064b2be2f56e0887c99df2b1f8d44" + integrity sha512-ONTr14s7LFIjx2VRFLuOpagL76sM/HPy6/OhdBfq6UukINmTIs6+aFN0GgcR0aXQHFDXQ7f/fel0o/SO05Htdg== dependencies: lodash "^4.17.21" lodash-es "^4.17.21" markdown-to-jsx "^7.4.1" - nanoid "^3.3.7" prop-types "^15.8.1" -"@rjsf/material-ui@5.18.5": - version "5.18.5" - resolved "https://registry.yarnpkg.com/@rjsf/material-ui/-/material-ui-5.18.5.tgz#bbb68519217a67b80679429fb97dd3e57c56e823" - integrity sha512-1JiXnwvvnOin6/PfmbFVxSUN7ZQA780QSFEoscoi2VlB008rLpLPQcxFxPJFNGw37QjXvCiySjsFpHKJKqvqIw== +"@rjsf/material-ui@5.24.13": + version "5.24.13" + resolved "https://registry.yarnpkg.com/@rjsf/material-ui/-/material-ui-5.24.13.tgz#9d9b33c60dc84c475fcb0d8a6f823dd521887e15" + integrity sha512-aoOFLWXmPBxg5L15a5Sh9CiUfh7bp/SoMIN6/LasToxzoqMezFezKOCHg5fly+KJD4EwflyAgCbOnqAb5787Mw== -"@rjsf/utils@5.18.5": - version "5.18.5" - resolved "https://registry.yarnpkg.com/@rjsf/utils/-/utils-5.18.5.tgz#638724740b29784804dd244b0574213aa181469b" - integrity sha512-b39ZSPv2lpH+VXUKrVsPnPyOKcTa9P08h50J0A1+7xHj6dm4KG1KY/mY4QCaNavZVXsQoieHOe8kmdFDlXirzA== +"@rjsf/utils@5.24.13": + version "5.24.13" + resolved "https://registry.yarnpkg.com/@rjsf/utils/-/utils-5.24.13.tgz#b19ca434bf518ec3e652c4a0510b293ff5fac279" + integrity sha512-rNF8tDxIwTtXzz5O/U23QU73nlhgQNYJ+Sv5BAwQOIyhIE2Z3S5tUiSVMwZHt0julkv/Ryfwi+qsD4FiE5rOuw== dependencies: json-schema-merge-allof "^0.8.1" jsonpointer "^5.0.1" @@ -7805,84 +8552,107 @@ lodash-es "^4.17.21" react-is "^18.2.0" -"@rjsf/validator-ajv8@5.18.5": - version "5.18.5" - resolved "https://registry.yarnpkg.com/@rjsf/validator-ajv8/-/validator-ajv8-5.18.5.tgz#0f02f39462b3cdc15641df9dd63263600556b374" - integrity sha512-R1kPl86NzhbVYyRQ7Sa3GLDEmZdum7Qcvi9wKBy0GmnONM9dX6wZGikzr5/7x8mVYCIjukAd3eL129uchIv95w== +"@rjsf/validator-ajv8@5.24.13": + version "5.24.13" + resolved "https://registry.yarnpkg.com/@rjsf/validator-ajv8/-/validator-ajv8-5.24.13.tgz#8d56ca1e92c87f6b6234d97e07e96f80016a68c0" + integrity sha512-oWHP7YK581M8I5cF1t+UXFavnv+bhcqjtL1a7MG/Kaffi0EwhgcYjODrD8SsnrhncsEYMqSECr4ZOEoirnEUWw== dependencies: ajv "^8.12.0" ajv-formats "^2.1.1" lodash "^4.17.21" lodash-es "^4.17.21" -"@roadiehq/backstage-plugin-argo-cd-backend@3.0.2": - version "3.0.2" - resolved "https://registry.npmmirror.com/@roadiehq/backstage-plugin-argo-cd-backend/-/backstage-plugin-argo-cd-backend-3.0.2.tgz#2f5790b572f9d510342bb2f9717e654efdb6edde" - integrity sha512-41KYppBH3Gn8wN5GmHR0Tfp9ug1QJW33bm/RIe4kKoNzMxbHH42r7bBRWYKDd9ukJU4VKQzSuBOPRUpQzOAtkQ== +"@roadiehq/backstage-plugin-argo-cd-backend@^4.5.0", "@roadiehq/backstage-plugin-argo-cd-backend@^4.7.1": + version "4.8.0" + resolved "https://registry.yarnpkg.com/@roadiehq/backstage-plugin-argo-cd-backend/-/backstage-plugin-argo-cd-backend-4.8.0.tgz#00310465b50461ad4acc54f7172da8c91c7de72f" + integrity sha512-lbtSnktsmgkxuz6g5xDuBF+fgJuV1u+eYVU0pazBmSaTtH7S0VRNNGLCreIRYlWoHLqXIJMaltoYfg3pzpnONw== dependencies: - "@backstage/backend-common" "^0.21.7" - "@backstage/catalog-client" "^1.6.4" - "@backstage/config" "^1.2.0" + "@backstage/backend-plugin-api" "^1.4.4" + "@backstage/config" "^1.3.5" + "@roadiehq/backstage-plugin-argo-cd-node" "^2.0.0" "@types/express" "^4.17.6" cross-fetch "^3.1.4" - express "^4.17.1" express-promise-router "^4.1.0" - winston "^3.2.1" - yn "^4.0.0" -"@roadiehq/backstage-plugin-argo-cd@^2.5.1": - version "2.5.1" - resolved "https://registry.npmmirror.com/@roadiehq/backstage-plugin-argo-cd/-/backstage-plugin-argo-cd-2.5.1.tgz#e234d81fc4cc55633330ab174b617c9671bf8dfb" - integrity sha512-R2NyZ0EGOn5vu5XD8ia+PYPs0DbX1U/qjODoROfWVTPQbqQj3ogsxXfDFU3Zitx0IQHAPFAcRBcCWmd89fvujw== - dependencies: - "@backstage/catalog-model" "^1.4.3" - "@backstage/core-components" "^0.13.8" - "@backstage/core-plugin-api" "^1.8.0" - "@backstage/plugin-catalog-react" "^1.9.1" - "@backstage/theme" "^0.4.4" - "@material-ui/core" "^4.11.0" +"@roadiehq/backstage-plugin-argo-cd-node@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@roadiehq/backstage-plugin-argo-cd-node/-/backstage-plugin-argo-cd-node-2.0.0.tgz#48a8bb13d17ef4e3b01fbb126b1f8249fda7128b" + integrity sha512-HawAQCrPfE7QaS380mPP+fF8I1IdLHD9Xh6wiXg7YiSVAtOyb8yfiFNbTq7i8Dodxy+tO/5uXbKoUtKiZjOskw== + dependencies: + "@backstage/backend-plugin-api" "^1.4.4" + "@backstage/config" "^1.3.5" + cross-fetch "^3.1.4" + +"@roadiehq/backstage-plugin-argo-cd@^2.12.5": + version "2.12.5" + resolved "https://registry.yarnpkg.com/@roadiehq/backstage-plugin-argo-cd/-/backstage-plugin-argo-cd-2.12.5.tgz#049284602dc23181eff4cd487612b45dd5dd9b91" + integrity sha512-sTYZQcvDlmfz+XerhThDjprqT2UEzgc3NCVHry0HzxeX6UzAWaydCpGP4cchBtFexuQKlGyjPP53/XTVCcJDPg== + dependencies: + "@backstage/catalog-model" "^1.7.5" + "@backstage/core-compat-api" "^0.5.3" + "@backstage/core-components" "^0.18.2" + "@backstage/core-plugin-api" "^1.11.1" + "@backstage/frontend-plugin-api" "^0.12.1" + "@backstage/plugin-catalog-react" "^1.21.2" + "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" - "@material-ui/lab" "4.0.0-alpha.45" cross-fetch "^3.1.4" - date-fns "^2.21.1" fp-ts "^2.10.0" - history "^5.0.0" io-ts "^2.2.16" io-ts-promise "^2.0.2" io-ts-reporters "^1.2.2" - moment "^2.29.1" + luxon "^3.5.0" react-use "^17.2.4" -"@roadiehq/scaffolder-backend-module-utils@^1.17.0": - version "1.17.0" - resolved "https://registry.npmmirror.com/@roadiehq/scaffolder-backend-module-utils/-/scaffolder-backend-module-utils-1.17.0.tgz#dc715e033a01f6f6e7ee16850071ee483a88b6d4" - integrity sha512-jI5SBuOu3ZMTvDysa2/2qXm5sXY+2lBrvQNPaswAU1XOQy7gWmQIjQ8oc01sS6C8AEFVY7O9DabdTZOFLKgLqQ== +"@roadiehq/scaffolder-backend-argocd@^1.7.1": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@roadiehq/scaffolder-backend-argocd/-/scaffolder-backend-argocd-1.8.1.tgz#caf05bce043c7864e64453ebe564856c9fcc8a1b" + integrity sha512-6TH96l+0B+c1MgYBN7HeXRGzv9ii4GmkEaaVCND9OQ/TKt5Ry+y9ITv24hUlN5/+SDLOhd0lQEZA0SQc6whGkQ== dependencies: - "@backstage/backend-common" "^0.21.7" - "@backstage/backend-plugin-api" "^0.6.17" - "@backstage/config" "^1.2.0" - "@backstage/errors" "^1.2.4" - "@backstage/plugin-scaffolder-backend" "^1.22.5" - "@backstage/plugin-scaffolder-node" "^0.4.3" + "@backstage/backend-plugin-api" "^1.4.4" + "@backstage/config" "^1.3.5" + "@backstage/plugin-scaffolder-node" "^0.12.0" + "@roadiehq/backstage-plugin-argo-cd-backend" "^4.5.0" + winston "^3.2.1" + +"@roadiehq/scaffolder-backend-module-http-request@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@roadiehq/scaffolder-backend-module-http-request/-/scaffolder-backend-module-http-request-5.6.0.tgz#71f3ebd86eec69c5d8de6272b51436cbbfced487" + integrity sha512-CdXeKJIDZF5Cpv0teoI0zzalqEZ933i039G/NBdwm90VVChyTuom0sEeTMPJr85/9ny/Z9gUgDMcXe7Iq9F4Hw== + dependencies: + "@backstage/backend-plugin-api" "^1.4.4" + "@backstage/core-plugin-api" "^1.11.1" + "@backstage/plugin-scaffolder-node" "^0.12.0" + cross-fetch "^4.0.0" + +"@roadiehq/scaffolder-backend-module-utils@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@roadiehq/scaffolder-backend-module-utils/-/scaffolder-backend-module-utils-4.1.2.tgz#16fa1479818fec6d0b71042cfa8571373c8f6a5a" + integrity sha512-M9qgKxh/l16J4DbrfeyhvHjW0auuCIVH2Nn/uhaBM7TjNO707hBvWwxhf2f+t/dDW/ldhNmwCf+naPqKU9KDAQ== + dependencies: + "@backstage/backend-plugin-api" "^1.4.4" + "@backstage/config" "^1.3.5" + "@backstage/errors" "^1.2.7" + "@backstage/plugin-scaffolder-node" "^0.12.0" adm-zip "^0.5.9" - cross-fetch "^3.1.4" detect-indent "^6.1.0" + fast-glob "^3.3.3" fs-extra "^10.0.0" jsonata "^2.0.4" lodash "^4.17.21" - winston "^3.2.1" - yaml "^2.3.4" - yawn-yaml "^2.2.0" + yaml "^2.6.1" + yawn-yaml "^2.3.0" + zod "^3.19.1" -"@rollup/plugin-commonjs@^25.0.0": - version "25.0.7" - resolved "https://registry.npmmirror.com/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz#145cec7589ad952171aeb6a585bbeabd0fd3b4cf" - integrity sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ== +"@rollup/plugin-commonjs@^26.0.0": + version "26.0.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-26.0.3.tgz#085ffb49818e43e4a2a96816a37affcc8a8cbaca" + integrity sha512-2BJcolt43MY+y5Tz47djHkodCC3c1VKVrBDKpVqHKpQ9z9S158kCCqB8NF6/gzxLdNlYW9abB3Ibh+kOWLp8KQ== dependencies: "@rollup/pluginutils" "^5.0.1" commondir "^1.0.1" estree-walker "^2.0.2" - glob "^8.0.3" + glob "^10.4.1" is-reference "1.2.1" magic-string "^0.30.3" @@ -7914,14 +8684,6 @@ js-yaml "^4.1.0" tosource "^2.0.0-alpha.3" -"@rollup/pluginutils@^4.2.1": - version "4.2.1" - resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" - integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== - dependencies: - estree-walker "^2.0.1" - picomatch "^2.2.2" - "@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.0.5", "@rollup/pluginutils@^5.1.0": version "5.1.0" resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" @@ -7931,85 +8693,258 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@rollup/rollup-android-arm-eabi@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz#bbd0e616b2078cd2d68afc9824d1fadb2f2ffd27" - integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ== - -"@rollup/rollup-android-arm64@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz#97255ef6384c5f73f4800c0de91f5f6518e21203" - integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA== - -"@rollup/rollup-darwin-arm64@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz#b6dd74e117510dfe94541646067b0545b42ff096" - integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w== - -"@rollup/rollup-darwin-x64@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz#e07d76de1cec987673e7f3d48ccb8e106d42c05c" - integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA== - -"@rollup/rollup-linux-arm-gnueabihf@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz#9f1a6d218b560c9d75185af4b8bb42f9f24736b8" - integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA== - -"@rollup/rollup-linux-arm-musleabihf@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz#53618b92e6ffb642c7b620e6e528446511330549" - integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A== - -"@rollup/rollup-linux-arm64-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz#99a7ba5e719d4f053761a698f7b52291cefba577" - integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw== - -"@rollup/rollup-linux-arm64-musl@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz#f53db99a45d9bc00ce94db8a35efa7c3c144a58c" - integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ== - -"@rollup/rollup-linux-powerpc64le-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz#cbb0837408fe081ce3435cf3730e090febafc9bf" - integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA== - -"@rollup/rollup-linux-riscv64-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz#8ed09c1d1262ada4c38d791a28ae0fea28b80cc9" - integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg== - -"@rollup/rollup-linux-s390x-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz#938138d3c8e0c96f022252a28441dcfb17afd7ec" - integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg== - -"@rollup/rollup-linux-x64-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz#1a7481137a54740bee1ded4ae5752450f155d942" - integrity sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w== - -"@rollup/rollup-linux-x64-musl@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz#f1186afc601ac4f4fc25fac4ca15ecbee3a1874d" - integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg== - -"@rollup/rollup-win32-arm64-msvc@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz#ed6603e93636a96203c6915be4117245c1bd2daf" - integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA== - -"@rollup/rollup-win32-ia32-msvc@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz#14e0b404b1c25ebe6157a15edb9c46959ba74c54" - integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg== - -"@rollup/rollup-win32-x64-msvc@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz#5d694d345ce36b6ecf657349e03eb87297e68da4" - integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g== +"@rollup/rollup-android-arm-eabi@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz#a19c645c375158cd5c50a344106f0fa18eb821c4" + integrity sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw== + +"@rollup/rollup-android-arm64@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz#1af19aa9d3ad6d00df2681f59cfcb8bf7499576b" + integrity sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg== + +"@rollup/rollup-darwin-arm64@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz#3b8463e03ba2a393453fea70e7d907379c27b649" + integrity sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA== + +"@rollup/rollup-darwin-x64@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz#28da23d69fe117f5f0ff330a8549e51bd09f1b6a" + integrity sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g== + +"@rollup/rollup-freebsd-arm64@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz#94bacac3190f621de1355922b599f3817786044c" + integrity sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw== + +"@rollup/rollup-freebsd-x64@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz#8a0094f533b9fda160b5c90ad9e0c78fca341788" + integrity sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ== + +"@rollup/rollup-linux-arm-gnueabihf@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz#3b7e901a555c7245c87f7440979bee0a1ec882bb" + integrity sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg== + +"@rollup/rollup-linux-arm-musleabihf@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz#ee9a09b72e8ad764cfd6188b32ff1de528ff7ebe" + integrity sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw== + +"@rollup/rollup-linux-arm64-gnu@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz#ba483f4aca9be141171d086dbd01ada6ab03b58d" + integrity sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg== + +"@rollup/rollup-linux-arm64-musl@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz#17b595b790e6df68e91c5d02526fc832a985ce4f" + integrity sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA== + +"@rollup/rollup-linux-loong64-gnu@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz#551718714075a2bfb36a2813c466e3a0e9d56abf" + integrity sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A== + +"@rollup/rollup-linux-loong64-musl@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz#ba156ed1243447a3d710972001d5dcfe3827ff3d" + integrity sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q== + +"@rollup/rollup-linux-ppc64-gnu@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz#6a957a709b86ac62ef68e597ac03dbd4336782b1" + integrity sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw== + +"@rollup/rollup-linux-ppc64-musl@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz#ca4176b4ad53f3edee3b4bfa6f9ef48ff38f167b" + integrity sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ== + +"@rollup/rollup-linux-riscv64-gnu@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz#4e6b08f72ebeafdb41f3ec433bd228ba8573473b" + integrity sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A== + +"@rollup/rollup-linux-riscv64-musl@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz#a0b8b8580c7680c8086cb3226527e5472253b895" + integrity sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ== + +"@rollup/rollup-linux-s390x-gnu@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz#79fe15b92ce0bae2b609cf26dd158cd3e2b73634" + integrity sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA== + +"@rollup/rollup-linux-x64-gnu@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz#6aa8302fa45fd3cbbc510ccd223c9c37bf67e53f" + integrity sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ== + +"@rollup/rollup-linux-x64-musl@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz#0c1a5e9799f80c47a66f2c3a5f1a280f38356047" + integrity sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw== + +"@rollup/rollup-openbsd-x64@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz#5f07c863e74fd428794f1dc5749f321b661d1f17" + integrity sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg== + +"@rollup/rollup-openharmony-arm64@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz#8e0d71324be0f423428b12b25a2eb8ea8e0a7833" + integrity sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q== + +"@rollup/rollup-win32-arm64-msvc@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz#a553fdf90a785ace6d7501eed6241c468b088999" + integrity sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ== + +"@rollup/rollup-win32-ia32-msvc@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz#0fb04f0a88027fbfd323e25a446debce4773868c" + integrity sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg== + +"@rollup/rollup-win32-x64-gnu@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz#aaa9e36dbdc0f0e397e5966dcce1b4285354ede2" + integrity sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA== + +"@rollup/rollup-win32-x64-msvc@4.60.2": + version "4.60.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz#3418dcf1388f2abd6b0ccc08fe1ef205ae76d696" + integrity sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA== + +"@rspack/binding-darwin-arm64@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.11.tgz#ea43ac25a9ff99a9faf6c820f5d174a32974e95c" + integrity sha512-oduECiZVqbO5zlVw+q7Vy65sJFth99fWPTyucwvLJJtJkPL5n17Uiql2cYP6Ijn0pkqtf1SXgK8WjiKLG5bIig== + +"@rspack/binding-darwin-x64@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.11.tgz#5c724d91559d642d4a5e6aa4ed380c30bd0f64c0" + integrity sha512-a1+TtTE9ap6RalgFi7FGIgkJP6O4Vy6ctv+9WGJy53E4kuqHR0RygzaiVxCI/GMc/vBT9vY23hyrpWb3d1vtXA== + +"@rspack/binding-linux-arm64-gnu@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.11.tgz#429119939bbe9d51a72caf99cffb8febe0f870fe" + integrity sha512-P0QrGRPbTWu6RKWfN0bDtbnEps3rXH0MWIMreZABoUrVmNQKtXR6e73J3ub6a+di5s2+K0M2LJ9Bh2/H4UsDUA== + +"@rspack/binding-linux-arm64-musl@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.11.tgz#d939b8c2c5bf35380d3c860402f7063031ef469a" + integrity sha512-6ky7R43VMjWwmx3Yx7Jl7faLBBMAgMDt+/bN35RgwjiPgsIByz65EwytUVuW9rikB43BGHvA/eqlnjLrUzNBqw== + +"@rspack/binding-linux-x64-gnu@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.11.tgz#03567317a7e8cfc62d994dcf9683f932fd22054a" + integrity sha512-cuOJMfCOvb2Wgsry5enXJ3iT1FGUjdPqtGUBVupQlEG4ntSYsQ2PtF4wIDVasR3wdxC5nQbipOrDiN/u6fYsdQ== + +"@rspack/binding-linux-x64-musl@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.11.tgz#d93c93ea796eae1572b2353a50d58cc6218c53b6" + integrity sha512-CoK37hva4AmHGh3VCsQXmGr40L36m1/AdnN5LEjUX6kx5rEH7/1nEBN6Ii72pejqDVvk9anEROmPDiPw10tpFg== + +"@rspack/binding-wasm32-wasi@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.11.tgz#c90235032fb14de50baf535592069923c1308f4e" + integrity sha512-OtrmnPUVJMxjNa3eDMfHyPdtlLRmmp/aIm0fQHlAOATbZvlGm12q7rhPW5BXTu1yh+1rQ1/uqvz+SzKEZXuJaQ== + dependencies: + "@napi-rs/wasm-runtime" "1.0.7" + +"@rspack/binding-win32-arm64-msvc@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.11.tgz#0afcfde6a77cdf6fa6a85de4f8a39b94a593aab2" + integrity sha512-lObFW6e5lCWNgTBNwT//yiEDbsxm9QG4BYUojqeXxothuzJ/L6ibXz6+gLMvbOvLGV3nKgkXmx8GvT9WDKR0mA== + +"@rspack/binding-win32-ia32-msvc@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.11.tgz#46606834538e84cd0f95f19089695ab122d69586" + integrity sha512-0pYGnZd8PPqNR68zQ8skamqNAXEA1sUfXuAdYcknIIRq2wsbiwFzIc0Pov1cIfHYab37G7sSIPBiOUdOWF5Ivw== + +"@rspack/binding-win32-x64-msvc@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.11.tgz#e486a33fc1227ec9cbd70439ef1b32ead1faec68" + integrity sha512-EeQXayoQk/uBkI3pdoXfQBXNIUrADq56L3s/DFyM2pJeUDrWmhfIw2UFIGkYPTMSCo8F2JcdcGM32FGJrSnU0Q== + +"@rspack/binding@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@rspack/binding/-/binding-1.7.11.tgz#30f3e87242d9dcb3744edc22752cf24a9ceb4d61" + integrity sha512-2MGdy2s2HimsDT444Bp5XnALzNRxuBNc7y0JzyuqKbHBywd4x2NeXyhWXXoxufaCFu5PBc9Qq9jyfjW2Aeh06Q== + optionalDependencies: + "@rspack/binding-darwin-arm64" "1.7.11" + "@rspack/binding-darwin-x64" "1.7.11" + "@rspack/binding-linux-arm64-gnu" "1.7.11" + "@rspack/binding-linux-arm64-musl" "1.7.11" + "@rspack/binding-linux-x64-gnu" "1.7.11" + "@rspack/binding-linux-x64-musl" "1.7.11" + "@rspack/binding-wasm32-wasi" "1.7.11" + "@rspack/binding-win32-arm64-msvc" "1.7.11" + "@rspack/binding-win32-ia32-msvc" "1.7.11" + "@rspack/binding-win32-x64-msvc" "1.7.11" + +"@rspack/core@^1.4.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@rspack/core/-/core-1.7.11.tgz#8d7d77db3b71332afd22a9c90904fe18a6832e2c" + integrity sha512-rsD9b+Khmot5DwCMiB3cqTQo53ioPG3M/A7BySu8+0+RS7GCxKm+Z+mtsjtG/vsu4Tn2tcqCdZtA3pgLoJB+ew== + dependencies: + "@module-federation/runtime-tools" "0.22.0" + "@rspack/binding" "1.7.11" + "@rspack/lite-tapable" "1.1.0" + +"@rspack/dev-server@^1.1.4": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@rspack/dev-server/-/dev-server-1.2.1.tgz#008425971eeb4b4cf063d934151f5e4f9fbbbcec" + integrity sha512-e/ARvskYn2Qdd02qLvc0i6H9BnOmzP0xGHS2XCr7GZ3t2k5uC5ZlLkeN1iEebU0FkAW+6ot89NahFo3nupKuww== + dependencies: + "@types/bonjour" "^3.5.13" + "@types/connect-history-api-fallback" "^1.5.4" + "@types/express" "^4.17.25" + "@types/express-serve-static-core" "^4.17.21" + "@types/serve-index" "^1.9.4" + "@types/serve-static" "^1.15.5" + "@types/sockjs" "^0.3.36" + "@types/ws" "^8.5.10" + ansi-html-community "^0.0.8" + bonjour-service "^1.2.1" + chokidar "^3.6.0" + colorette "^2.0.10" + compression "^1.8.1" + connect-history-api-fallback "^2.0.0" + express "^4.22.1" + graceful-fs "^4.2.6" + http-proxy-middleware "^2.0.9" + ipaddr.js "^2.1.0" + launch-editor "^2.6.1" + open "^10.0.3" + p-retry "^6.2.0" + schema-utils "^4.2.0" + selfsigned "^2.4.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^7.4.2" + ws "^8.18.0" + +"@rspack/lite-tapable@1.1.0", "@rspack/lite-tapable@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz#3cfdafeed01078e116bd4f191b684c8b484de425" + integrity sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw== + +"@rspack/plugin-react-refresh@^1.4.3": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@rspack/plugin-react-refresh/-/plugin-react-refresh-1.6.2.tgz#bb50a6e3d992cc188db1302dacd899fcd690ebf9" + integrity sha512-k+/VrfTNgo+KirjI6V+8CWRj6y+DH9jOUWv8JorYY4vKf/9xfnZ8xHzuB4iqCwTtoZl9YnxOaOuoyjJipc2tiQ== + dependencies: + error-stack-parser "^2.1.4" + +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== "@sagold/json-pointer@^5.1.2": version "5.1.2" @@ -8024,59 +8959,26 @@ "@sagold/json-pointer" "^5.1.2" ebnf "^1.9.1" -"@sigstore/bundle@^1.1.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@sigstore/bundle/-/bundle-1.1.0.tgz#17f8d813b09348b16eeed66a8cf1c3d6bd3d04f1" - integrity sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog== - dependencies: - "@sigstore/protobuf-specs" "^0.2.0" - -"@sigstore/protobuf-specs@^0.2.0": - version "0.2.1" - resolved "https://registry.npmmirror.com/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz#be9ef4f3c38052c43bd399d3f792c97ff9e2277b" - integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A== - -"@sigstore/sign@^1.0.0": - version "1.0.0" - resolved "https://registry.npmmirror.com/@sigstore/sign/-/sign-1.0.0.tgz#6b08ebc2f6c92aa5acb07a49784cb6738796f7b4" - integrity sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA== - dependencies: - "@sigstore/bundle" "^1.1.0" - "@sigstore/protobuf-specs" "^0.2.0" - make-fetch-happen "^11.0.1" - -"@sigstore/tuf@^1.0.3": - version "1.0.3" - resolved "https://registry.npmmirror.com/@sigstore/tuf/-/tuf-1.0.3.tgz#2a65986772ede996485728f027b0514c0b70b160" - integrity sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg== - dependencies: - "@sigstore/protobuf-specs" "^0.2.0" - tuf-js "^1.1.7" +"@scarf/scarf@=1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@scarf/scarf/-/scarf-1.4.0.tgz#3bbb984085dbd6d982494538b523be1ce6562972" + integrity sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ== "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.npmmirror.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== -"@sindresorhus/is@^4.0.0": +"@sinclair/typebox@^0.34.0": + version "0.34.49" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.49.tgz#4f1369234f2ecf693866476c3b2e1b54d2a9d68e" + integrity sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A== + +"@sindresorhus/is@^4.6.0": version "4.6.0" - resolved "https://registry.npmmirror.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== -"@sinonjs/commons@^3.0.0": - version "3.0.1" - resolved "https://registry.npmmirror.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" - integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.npmmirror.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" - "@smithy/abort-controller@^1.0.1": version "1.1.0" resolved "https://registry.npmmirror.com/@smithy/abort-controller/-/abort-controller-1.1.0.tgz#2da0d73c504b93ca8bb83bdc8d6b8208d73f418b" @@ -8138,6 +9040,18 @@ "@smithy/util-middleware" "^3.0.1" tslib "^2.6.2" +"@smithy/config-resolver@^4.4.17": + version "4.4.17" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.4.17.tgz#5bd7ccf461e126c79072ce84c6b0f3d00b3409bc" + integrity sha512-TzDZcAnhTyAHbXVxWZo7/tEcrIeFq20IBk8So3OLOetWpR8EwY/yEqBMBFaJMeyEiREDq4NfEl+qO3OAUD+vbQ== + dependencies: + "@smithy/node-config-provider" "^4.3.14" + "@smithy/types" "^4.14.1" + "@smithy/util-config-provider" "^4.2.2" + "@smithy/util-endpoints" "^3.4.2" + "@smithy/util-middleware" "^4.2.14" + tslib "^2.6.2" + "@smithy/core@^1.3.1": version "1.3.1" resolved "https://registry.npmmirror.com/@smithy/core/-/core-1.3.1.tgz#ecedc564e68453b02c20db9e8435d59005c066d8" @@ -8166,6 +9080,22 @@ "@smithy/util-middleware" "^3.0.1" tslib "^2.6.2" +"@smithy/core@^3.23.16", "@smithy/core@^3.23.17": + version "3.23.17" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.23.17.tgz#23d02277c8d6d30a1605afd756696265e48ed67e" + integrity sha512-x7BlLbUFL8NWCGjMF9C+1N5cVCxcPa7g6Tv9B4A2luWx3be3oU8hQ96wIwxe/s7OhIzvoJH73HAUSg5JXVlEtQ== + dependencies: + "@smithy/protocol-http" "^5.3.14" + "@smithy/types" "^4.14.1" + "@smithy/url-parser" "^4.2.14" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-body-length-browser" "^4.2.2" + "@smithy/util-middleware" "^4.2.14" + "@smithy/util-stream" "^4.5.25" + "@smithy/util-utf8" "^4.2.2" + "@smithy/uuid" "^1.1.2" + tslib "^2.6.2" + "@smithy/credential-provider-imds@^2.2.1": version "2.2.1" resolved "https://registry.npmmirror.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz#4805bf5e104718b959cf8699113fa9de6ddeeafa" @@ -8188,6 +9118,17 @@ "@smithy/url-parser" "^3.0.1" tslib "^2.6.2" +"@smithy/credential-provider-imds@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.14.tgz#b5dcc198ee240eaf68069e7449bcec29ce279827" + integrity sha512-Au28zBN48ZAoXdooGUHemuVBrkE+Ie6RPmGNIAJsFqj33Vhb6xAgRifUydZ2aY+M+KaMAETAlKk5NC5h1G7wpg== + dependencies: + "@smithy/node-config-provider" "^4.3.14" + "@smithy/property-provider" "^4.2.14" + "@smithy/types" "^4.14.1" + "@smithy/url-parser" "^4.2.14" + tslib "^2.6.2" + "@smithy/eventstream-codec@^1.1.0": version "1.1.0" resolved "https://registry.npmmirror.com/@smithy/eventstream-codec/-/eventstream-codec-1.1.0.tgz#bfe1308ba84ff3db3e79dc1ced8231c52ac0fc36" @@ -8265,6 +9206,17 @@ "@smithy/util-base64" "^3.0.0" tslib "^2.6.2" +"@smithy/fetch-http-handler@^5.3.17": + version "5.3.17" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.17.tgz#bf13a4b03eb8afe101775fef59a1758f8fb5cd4b" + integrity sha512-bXOvQzaSm6MnmLaWA1elgfQcAtN4UP3vXqV97bHuoOrHQOJiLT3ds6o9eo5bqd0TJfRFpzdGnDQdW3FACiAVdw== + dependencies: + "@smithy/protocol-http" "^5.3.14" + "@smithy/querystring-builder" "^4.2.14" + "@smithy/types" "^4.14.1" + "@smithy/util-base64" "^4.3.2" + tslib "^2.6.2" + "@smithy/hash-blob-browser@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.1.1.tgz#f4571d4e2fbc2cc1869c443850e5409bf541ba25" @@ -8295,6 +9247,16 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@smithy/hash-node@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.2.14.tgz#e3ed33dc614e26fff5f043e097750c6931b48592" + integrity sha512-8ZBDY2DD4wr+GGjTpPtiglEsqr0lUP+KHqgZcWczFf6qeZ/YRjMIOoQWVQlmwu7EtxKTd8YXD8lblmYcpBIA1g== + dependencies: + "@smithy/types" "^4.14.1" + "@smithy/util-buffer-from" "^4.2.2" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + "@smithy/hash-stream-node@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/hash-stream-node/-/hash-stream-node-2.1.1.tgz#d1885a3bf159872cbb8c9d9f1aefc596ea6cf5db" @@ -8320,6 +9282,14 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" +"@smithy/invalid-dependency@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.2.14.tgz#a52766f9d4299abcd9d6cd23b5a76f34fc59c7a0" + integrity sha512-c21qJiTSb25xvvOp+H2TNZzPCngrvl5vIPqPB8zQ/DmJF4QWXO19x1dWfMJZ6wZuuWUPPm0gV8C0cU3+ifcWuw== + dependencies: + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/is-array-buffer@^1.1.0": version "1.1.0" resolved "https://registry.npmmirror.com/@smithy/is-array-buffer/-/is-array-buffer-1.1.0.tgz#29948072da2b57575aa9898cda863932e842ab11" @@ -8341,6 +9311,13 @@ dependencies: tslib "^2.6.2" +"@smithy/is-array-buffer@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.2.2.tgz#c401ce54b12a16529eb1c938a0b6c2247cb763b8" + integrity sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow== + dependencies: + tslib "^2.6.2" + "@smithy/md5-js@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/md5-js/-/md5-js-2.1.1.tgz#f414982bc6ab275b80ec517d2e44a779c374ff9c" @@ -8368,6 +9345,15 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" +"@smithy/middleware-content-length@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.2.14.tgz#d8b17f94c4d8f9c3b7992f1db84d3299c83efe78" + integrity sha512-xhHq7fX4/3lv5NHxLUk3OeEvl0xZ+Ek3qIbWaCL4f9JwgDZEclPBElljaZCAItdGPQl/kSM4LPMOpy1MYgprpw== + dependencies: + "@smithy/protocol-http" "^5.3.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/middleware-endpoint@^2.4.1": version "2.4.1" resolved "https://registry.npmmirror.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz#9e500df4d944741808e92018ccd2e948b598a49f" @@ -8394,6 +9380,20 @@ "@smithy/util-middleware" "^3.0.1" tslib "^2.6.2" +"@smithy/middleware-endpoint@^4.4.31", "@smithy/middleware-endpoint@^4.4.32": + version "4.4.32" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.32.tgz#4c7dcf06b637b40dfcc53d3b18d1a784a747c530" + integrity sha512-ZZkgyjnJppiZbIm6Qbx92pbXYi1uzenIvGhBSCDlc7NwuAkiqSgS75j1czAD25ZLs2FjMjYy1q7gyRVWG6JA0Q== + dependencies: + "@smithy/core" "^3.23.17" + "@smithy/middleware-serde" "^4.2.20" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + "@smithy/url-parser" "^4.2.14" + "@smithy/util-middleware" "^4.2.14" + tslib "^2.6.2" + "@smithy/middleware-retry@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz#ddc749dd927f136714f76ca5a52dcfb0993ee162" @@ -8424,6 +9424,22 @@ tslib "^2.6.2" uuid "^9.0.1" +"@smithy/middleware-retry@^4.5.4": + version "4.5.5" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.5.5.tgz#6b3f9dae55f941314d9fca790aae28af55699977" + integrity sha512-wnYOpB5vATFKWrY2Z9Alb0KhjZI6AbzU6Fbz3Hq2GnURdRYWB4q+qWivQtSTwXcmWUA3MZ6krfwL6Cq5MAbxsA== + dependencies: + "@smithy/core" "^3.23.17" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/protocol-http" "^5.3.14" + "@smithy/service-error-classification" "^4.3.0" + "@smithy/smithy-client" "^4.12.13" + "@smithy/types" "^4.14.1" + "@smithy/util-middleware" "^4.2.14" + "@smithy/util-retry" "^4.3.4" + "@smithy/uuid" "^1.1.2" + tslib "^2.6.2" + "@smithy/middleware-serde@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz#2c5750f76e276a5249720f6c3c24fac29abbee16" @@ -8440,6 +9456,16 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" +"@smithy/middleware-serde@^4.2.19", "@smithy/middleware-serde@^4.2.20": + version "4.2.20" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.2.20.tgz#76862c8f9b39b08501539440a2e6bca7a77de508" + integrity sha512-Lx9JMO9vArPtiChE3wbEZ5akMIDQpWQtlu90lhACQmNOXcGXRbaDywMHDzuDZ2OkZzP+9wQfZi3YJT9F67zTQQ== + dependencies: + "@smithy/core" "^3.23.17" + "@smithy/protocol-http" "^5.3.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/middleware-stack@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz#67f992dc36e8a6861f881f80a81c1c30956a0396" @@ -8456,6 +9482,14 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" +"@smithy/middleware-stack@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.2.14.tgz#23a4cf643ccdbde52c8780fe5cc080611efef1c7" + integrity sha512-2dvkUKLuFdKsCRmOE4Mn63co0Djtsm+JMh0bYZQupN1pJwMeE8FmQmRLLzzEMN0dnNi7CDCYYH8F0EVwWiPBeA== + dependencies: + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/node-config-provider@^2.2.1": version "2.2.1" resolved "https://registry.npmmirror.com/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz#c440c7948d58d72f0e212aa1967aa12f0729defd" @@ -8476,7 +9510,17 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" -"@smithy/node-http-handler@^2.1.7", "@smithy/node-http-handler@^2.3.1": +"@smithy/node-config-provider@^4.3.14": + version "4.3.14" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.3.14.tgz#8ca13b86b6123cbb0425d669bd847fcd333ca4bd" + integrity sha512-S+gFjyo/weSVL0P1b9Ts8C/CwIfNCgUPikk3sl6QVsfE/uUuO+QsF+NsE/JkpvWqqyz1wg7HFdiaZuj5CoBMRg== + dependencies: + "@smithy/property-provider" "^4.2.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + +"@smithy/node-http-handler@^2.3.1": version "2.3.1" resolved "https://registry.npmmirror.com/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz#77d23279ff0a12cbe7cde93c5e7c0e86ad56dd20" integrity sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA== @@ -8498,6 +9542,16 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" +"@smithy/node-http-handler@^4.6.0", "@smithy/node-http-handler@^4.6.1": + version "4.6.1" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.6.1.tgz#cb25b9445e46294a6f0dfb1566dbf2a1a19510af" + integrity sha512-iB+orM4x3xrr57X3YaXazfKnntl0LHlZB1kcXSGzMV1Tt0+YwEjGlbjk/44qEGtBzXAz6yFDzkYTKSV6Pj2HUg== + dependencies: + "@smithy/protocol-http" "^5.3.14" + "@smithy/querystring-builder" "^4.2.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/property-provider@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/property-provider/-/property-provider-2.1.1.tgz#0f7ffc5e43829eaca5b2b5aae8554807a52b30f3" @@ -8514,6 +9568,14 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" +"@smithy/property-provider@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.2.14.tgz#8072418672d8c29d3f9ef35e452437ba2c59100a" + integrity sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ== + dependencies: + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/protocol-http@^3.1.1": version "3.1.1" resolved "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-3.1.1.tgz#eee522d0ed964a72b735d64925e07bcfb7a7806f" @@ -8530,6 +9592,22 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" +"@smithy/protocol-http@^4.1.8": + version "4.1.8" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.8.tgz#0461758671335f65e8ff3fc0885ab7ed253819c9" + integrity sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/protocol-http@^5.3.14": + version "5.3.14" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.3.14.tgz#ed1e65cdb0fffb7fd00dce997c04baa236f180cc" + integrity sha512-dN5F8kHx8RNU0r+pCwNmFZyz6ChjMkzShy/zup6MtkRmmix4vZzJdW+di7x//b1LiynIev88FM18ie+wwPcQtQ== + dependencies: + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/querystring-builder@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz#b9693448ad3f8e0767d84cf5cae29f35514591fb" @@ -8548,6 +9626,15 @@ "@smithy/util-uri-escape" "^3.0.0" tslib "^2.6.2" +"@smithy/querystring-builder@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.2.14.tgz#102429e0fb004108babf219edfcf6f111e66d782" + integrity sha512-XYA5Z0IqTeF+5XDdh4BBmSA0HvbgVZIyv4cmOoUheDNR57K1HgBp9ukUMx3Cr3XpDHHpLBnexPE3LAtDsZkj2A== + dependencies: + "@smithy/types" "^4.14.1" + "@smithy/util-uri-escape" "^4.2.2" + tslib "^2.6.2" + "@smithy/querystring-parser@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz#a4282a66cc56844317dbff824e573f469bbfc032" @@ -8564,6 +9651,14 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" +"@smithy/querystring-parser@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.2.14.tgz#c479ba1f346656b9f8ce46d9a91c229e4e50420f" + integrity sha512-hr+YyqBD23GVvRxGGrcc/oOeNlK3PzT5Fu4dzrDXxzS1LpFiuL2PQQqKPs87M79aW7ziMs+nvB3qdw77SqE7Lw== + dependencies: + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/service-error-classification@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz#dd24e1ec529ae9ec8e87d8b15f0fc8f7e17f3d02" @@ -8578,6 +9673,13 @@ dependencies: "@smithy/types" "^3.1.0" +"@smithy/service-error-classification@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.3.0.tgz#7b05485cd834f841c56b382d67ac3c9b54051b3f" + integrity sha512-9jKsBYQRPR0xBLgc2415RsA5PIcP2sis4oBdN9s0D13cg1B1284mNTjx9Yc+BEERXzuPm5ObktI96OxsKh8E9A== + dependencies: + "@smithy/types" "^4.14.1" + "@smithy/shared-ini-file-loader@^2.3.1": version "2.3.1" resolved "https://registry.npmmirror.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz#a2e28b4d85f8a8262a84403fa2b74a086b3a7703" @@ -8594,6 +9696,14 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" +"@smithy/shared-ini-file-loader@^4.4.9": + version "4.4.9" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.9.tgz#fb3719b401d101a65a682380b40efd3a116162f0" + integrity sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ== + dependencies: + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/signature-v4@^1.0.1": version "1.1.0" resolved "https://registry.npmmirror.com/@smithy/signature-v4/-/signature-v4-1.1.0.tgz#e85309995c2475d39598a4f56e68b7ed856bdfa6" @@ -8635,6 +9745,34 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@smithy/signature-v4@^4.1.0": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.2.4.tgz#3501d3d09fd82768867bfc00a7be4bad62f62f4d" + integrity sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA== + 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" + +"@smithy/signature-v4@^5.3.14": + version "5.3.14" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.3.14.tgz#2b28c7d190301a67a520227a2343d1e7bb1c6d22" + integrity sha512-1D9Y/nmlVjCeSivCbhZ7hgEpmHyY1h0GvpSZt3l0xcD9JjmjVC1CHOozS6+Gh+/ldMH8JuJ6cujObQqfayAVFA== + dependencies: + "@smithy/is-array-buffer" "^4.2.2" + "@smithy/protocol-http" "^5.3.14" + "@smithy/types" "^4.14.1" + "@smithy/util-hex-encoding" "^4.2.2" + "@smithy/util-middleware" "^4.2.14" + "@smithy/util-uri-escape" "^4.2.2" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + "@smithy/smithy-client@^2.3.1": version "2.3.1" resolved "https://registry.npmmirror.com/@smithy/smithy-client/-/smithy-client-2.3.1.tgz#0c3a4a0d3935c7ad2240cc23181f276705212b1f" @@ -8659,6 +9797,19 @@ "@smithy/util-stream" "^3.0.2" tslib "^2.6.2" +"@smithy/smithy-client@^4.12.12", "@smithy/smithy-client@^4.12.13": + version "4.12.13" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.12.13.tgz#dec184a1d2d5027370ae1582bddbdbc068c97da5" + integrity sha512-y/Pcj1V9+qG98gyu1gvftHB7rDpdh+7kIBIggs55yGm3JdtBV8GT8IFF3a1qxZ79QnaJHX9GXzvBG6tAd+czJA== + dependencies: + "@smithy/core" "^3.23.17" + "@smithy/middleware-endpoint" "^4.4.32" + "@smithy/middleware-stack" "^4.2.14" + "@smithy/protocol-http" "^5.3.14" + "@smithy/types" "^4.14.1" + "@smithy/util-stream" "^4.5.25" + tslib "^2.6.2" + "@smithy/types@^1.2.0": version "1.2.0" resolved "https://registry.npmmirror.com/@smithy/types/-/types-1.2.0.tgz#9dc65767b0ee3d6681704fcc67665d6fc9b6a34e" @@ -8680,6 +9831,20 @@ dependencies: tslib "^2.6.2" +"@smithy/types@^3.7.2": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.7.2.tgz#05cb14840ada6f966de1bf9a9c7dd86027343e10" + integrity sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg== + dependencies: + tslib "^2.6.2" + +"@smithy/types@^4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.14.1.tgz#aba92b4cdb406f2a2b062e82f1e3728d809a7c23" + integrity sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg== + dependencies: + tslib "^2.6.2" + "@smithy/url-parser@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/url-parser/-/url-parser-2.1.1.tgz#a30de227b6734650d740b6dff74d488b874e85e3" @@ -8698,6 +9863,15 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" +"@smithy/url-parser@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.2.14.tgz#349a442a62eb5907533f204b73a010618198b073" + integrity sha512-p06BiBigJ8bTA3MgnOfCtDUWnAMY0YfedO/GRpmc7p+wg3KW8vbXy1xwSu5ASy0wV7rRYtlfZOIKH4XqfhjSQQ== + dependencies: + "@smithy/querystring-parser" "^4.2.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/util-base64@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/util-base64/-/util-base64-2.1.1.tgz#af729085cc9d92ebd54a5d2c5d0aa5a0c31f83bf" @@ -8715,6 +9889,15 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@smithy/util-base64@^4.3.2": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.3.2.tgz#be02bcb29a87be744356467ea25ffa413e695cea" + integrity sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ== + dependencies: + "@smithy/util-buffer-from" "^4.2.2" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + "@smithy/util-body-length-browser@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz#1fc77072768013ae646415eedb9833cd252d055d" @@ -8729,6 +9912,13 @@ dependencies: tslib "^2.6.2" +"@smithy/util-body-length-browser@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.2.tgz#c4404277d22039872abdb80e7800f9a63f263862" + integrity sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ== + dependencies: + tslib "^2.6.2" + "@smithy/util-body-length-node@^2.2.1": version "2.2.1" resolved "https://registry.npmmirror.com/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz#a6f5c9911f1c3e23efb340d5ce7a590b62f2056e" @@ -8743,6 +9933,13 @@ dependencies: tslib "^2.6.2" +"@smithy/util-body-length-node@^4.2.3": + version "4.2.3" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.2.3.tgz#f923ca530defb86a9ac3ca2d3066bcca7b304fbc" + integrity sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g== + dependencies: + tslib "^2.6.2" + "@smithy/util-buffer-from@^1.1.0": version "1.1.0" resolved "https://registry.npmmirror.com/@smithy/util-buffer-from/-/util-buffer-from-1.1.0.tgz#a000bd9f95c0e8d5b0edb0112f2a586daa5bed49" @@ -8767,6 +9964,14 @@ "@smithy/is-array-buffer" "^3.0.0" tslib "^2.6.2" +"@smithy/util-buffer-from@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.2.2.tgz#2c6b7857757dfd88f6cd2d36016179a40ccc913b" + integrity sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q== + dependencies: + "@smithy/is-array-buffer" "^4.2.2" + tslib "^2.6.2" + "@smithy/util-config-provider@^2.2.1": version "2.2.1" resolved "https://registry.npmmirror.com/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz#aea0a80236d6cedaee60473802899cff4a8cc0ba" @@ -8781,6 +9986,13 @@ dependencies: tslib "^2.6.2" +"@smithy/util-config-provider@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.2.2.tgz#52ebf9d8942838d18bc5fb1520de1e8699d7aad6" + integrity sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ== + dependencies: + tslib "^2.6.2" + "@smithy/util-defaults-mode-browser@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz#be9ac82acee6ec4821b610e7187b0e147f0ba8ff" @@ -8803,6 +10015,16 @@ bowser "^2.11.0" tslib "^2.6.2" +"@smithy/util-defaults-mode-browser@^4.3.48": + version "4.3.49" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.49.tgz#926ce84bf65e56307f25cce7a13b427d33442939" + integrity sha512-a5bNrdiONYB/qE2BuKegvUMd/+ZDwdg4vsNuuSzYE8qs2EYAdK9CynL+Rzn29PbPiUqoz/cbpRbcLzD5lEevHw== + dependencies: + "@smithy/property-provider" "^4.2.14" + "@smithy/smithy-client" "^4.12.13" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/util-defaults-mode-node@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz#0910ee00aac3e8a08aac3e6ae8794e52f3efef02" @@ -8829,6 +10051,19 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" +"@smithy/util-defaults-mode-node@^4.2.53": + version "4.2.54" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.54.tgz#32c4ea9f8a8c74ef9fe0ca5e3d6a10df0327f87e" + integrity sha512-g1cvrJvOnzeJgEdf7AE4luI7gp6L8weE0y9a9wQUSGtjb8QRHDbCJYuE4Sy0SD9N8RrnNPFsPltAz/OSoBR9Zw== + dependencies: + "@smithy/config-resolver" "^4.4.17" + "@smithy/credential-provider-imds" "^4.2.14" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/property-provider" "^4.2.14" + "@smithy/smithy-client" "^4.12.13" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/util-endpoints@^1.1.1": version "1.1.1" resolved "https://registry.npmmirror.com/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz#45426dba6fb42282a0ad955600b2b3ba050d118f" @@ -8847,6 +10082,15 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" +"@smithy/util-endpoints@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.4.2.tgz#ee59c42d039a642b6c6eb2d38e0ae3db6fc48e97" + integrity sha512-a55Tr+3OKld4TTtnT+RhKOQHyPxm3j/xL4OR83WBUhLJaKDS9dnJ7arRMOp3t31dcLhApwG9bgvrRXBHlLdIkg== + dependencies: + "@smithy/node-config-provider" "^4.3.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/util-hex-encoding@^1.1.0": version "1.1.0" resolved "https://registry.npmmirror.com/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz#b5ba919aa076a3fd5e93e368e34ae2b732fa2090" @@ -8868,6 +10112,13 @@ dependencies: tslib "^2.6.2" +"@smithy/util-hex-encoding@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz#4abf3335dd1eb884041d8589ca7628d81a6fd1d3" + integrity sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg== + dependencies: + tslib "^2.6.2" + "@smithy/util-middleware@^1.1.0": version "1.1.0" resolved "https://registry.npmmirror.com/@smithy/util-middleware/-/util-middleware-1.1.0.tgz#9f186489437ca2ef753c5e1de2930f76fd1edc14" @@ -8891,6 +10142,22 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" +"@smithy/util-middleware@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.11.tgz#2ab5c17266b42c225e62befcffb048afa682b5bf" + integrity sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-middleware@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.2.14.tgz#9985dd82b4036db2d03835229b9b0c63d2bb85fa" + integrity sha512-1Su2vj9RYNDEv/V+2E+jXkkwGsgR7dc4sfHn9Z7ruzQHJIEni9zzw5CauvRXlFJfmgcqYP8fWa0dkh2Q2YaQyw== + dependencies: + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/util-retry@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/util-retry/-/util-retry-2.1.1.tgz#f2d3566b6e5b841028c7240c852007d4037e49b2" @@ -8909,6 +10176,15 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" +"@smithy/util-retry@^4.3.3", "@smithy/util-retry@^4.3.4": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.3.4.tgz#97d9635d967405243f0a2c47db35969eeb6860b8" + integrity sha512-FY1UQQ1VFmMwiYp1GVS4MeaGD5O0blLNYK0xCRHU+mJgeoH/hSY8Ld8sJWKQ6uznkh14HveRGQJncgPyNl9J+A== + dependencies: + "@smithy/service-error-classification" "^4.3.0" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/util-stream@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/util-stream/-/util-stream-2.1.1.tgz#3ae0e88c3a1a45899e29c1655d2e5a3865b6c0a6" @@ -8937,6 +10213,20 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@smithy/util-stream@^4.5.24", "@smithy/util-stream@^4.5.25": + version "4.5.25" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.5.25.tgz#f48385a284151c7e099395af4e5fb0978fffe4ff" + integrity sha512-/PFpG4k8Ze8Ei+mMKj3oiPICYekthuzePZMgZbCqMiXIHHf4n2aZ4Ps0aSRShycFTGuj/J6XldmC0x0DwednIA== + dependencies: + "@smithy/fetch-http-handler" "^5.3.17" + "@smithy/node-http-handler" "^4.6.1" + "@smithy/types" "^4.14.1" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-buffer-from" "^4.2.2" + "@smithy/util-hex-encoding" "^4.2.2" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + "@smithy/util-uri-escape@^1.1.0": version "1.1.0" resolved "https://registry.npmmirror.com/@smithy/util-uri-escape/-/util-uri-escape-1.1.0.tgz#a8c5edaf19c0efdb9b51661e840549cf600a1808" @@ -8958,6 +10248,13 @@ dependencies: tslib "^2.6.2" +"@smithy/util-uri-escape@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.2.2.tgz#48e40206e7fe9daefc8d44bb43a1ab17e76abf4a" + integrity sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw== + dependencies: + tslib "^2.6.2" + "@smithy/util-utf8@^1.1.0": version "1.1.0" resolved "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-1.1.0.tgz#b791ab1e3f694374edfe22811e39dd8424a1be69" @@ -8982,6 +10279,14 @@ "@smithy/util-buffer-from" "^3.0.0" tslib "^2.6.2" +"@smithy/util-utf8@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.2.2.tgz#21db686982e6f3393ac262e49143b42370130f13" + integrity sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw== + dependencies: + "@smithy/util-buffer-from" "^4.2.2" + tslib "^2.6.2" + "@smithy/util-waiter@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/util-waiter/-/util-waiter-2.1.1.tgz#292d4d09cda7df38aba6ea2abd7d948e3f11bf2d" @@ -8991,6 +10296,30 @@ "@smithy/types" "^2.9.1" tslib "^2.5.0" +"@smithy/uuid@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@smithy/uuid/-/uuid-1.1.2.tgz#b6e97c7158615e4a3c775e809c00d8c269b5a12e" + integrity sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g== + dependencies: + tslib "^2.6.2" + +"@spectrum-icons/ui@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@spectrum-icons/ui/-/ui-3.7.0.tgz#69bf745cd11e239320d66482a9286b4616a47952" + integrity sha512-86iQSDfJb3Ama1WSJ/mEiFy4DJT7e/v4pSmEuX4aKKMzbNYft+O40N18S2POUnmblrb7MQneLC/pgIp1SDBwEQ== + dependencies: + "@adobe/react-spectrum-ui" "1.2.1" + "@babel/runtime" "^7.24.4" + "@swc/helpers" "^0.5.0" + +"@spectrum-icons/workflow@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@spectrum-icons/workflow/-/workflow-4.3.0.tgz#580e8a264261d3ca20876b34d9d69dbddf3a41a4" + integrity sha512-ILuhgWh9jMXaEVMRuOYgTAjMc22cKyvCtUDyZmc8OEMfOYuejj+Gcp5t6DhaCfE0M9rORtVxCrRgsO2WyEgfUw== + dependencies: + "@adobe/react-spectrum-workflow" "2.3.5" + "@swc/helpers" "^0.5.0" + "@spotify/eslint-config-base@^15.0.0": version "15.0.0" resolved "https://registry.npmmirror.com/@spotify/eslint-config-base/-/eslint-config-base-15.0.0.tgz#fa8a003e656b1c14694528a487bb9e974e013e4d" @@ -9006,10 +10335,15 @@ resolved "https://registry.npmmirror.com/@spotify/eslint-config-typescript/-/eslint-config-typescript-15.0.0.tgz#b1857a76951df6e2cc4a1e92d98e7fd4f5a4baec" integrity sha512-70nKh2v6So0MddkEfKj4xgAcqs1VmR0AS2yb62XYetZ1Ep3AmhYDl/5CYtU5pbAQS4zCap8rd/EYdmVEHXiS6g== -"@spotify/prettier-config@^12.0.0": - version "12.0.0" - resolved "https://registry.npmmirror.com/@spotify/prettier-config/-/prettier-config-12.0.0.tgz#936ca5e977cfccbccd1731ab98b1f2bf65852b5d" - integrity sha512-64WWqE40U/WwWV8iIQBseTU+b2t+SdJSyQoCLdVPCKM9uf7KOjRivVwXe4KlWoV3y7duNSGuB2UgWhkXzscVmQ== +"@spotify/prettier-config@^15.0.0": + version "15.0.0" + resolved "https://registry.yarnpkg.com/@spotify/prettier-config/-/prettier-config-15.0.0.tgz#3dcc94ffa9c3fad68a1e8430ccba57edc0131399" + integrity sha512-ex7bdst1STr97y/MUTgVxadxpEZy48XVQDwZrESYO07EONSRstQYBaQWGVo80jmJ9NXC+r4ZjUqjT2Gw524Nqg== + +"@standard-schema/spec@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.1.0.tgz#a79b55dbaf8604812f52d140b2c9ab41bc150bb8" + integrity sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w== "@stoplight/better-ajv-errors@1.0.3": version "1.0.3" @@ -9043,7 +10377,7 @@ tslib "^2.6.0" urijs "^1.19.11" -"@stoplight/json@^3.17.0", "@stoplight/json@^3.17.1", "@stoplight/json@^3.20.2", "@stoplight/json@^3.21.0", "@stoplight/json@~3.21.0": +"@stoplight/json@3.21.0", "@stoplight/json@^3.17.0", "@stoplight/json@^3.17.1", "@stoplight/json@^3.20.2", "@stoplight/json@^3.21.0", "@stoplight/json@~3.21.0": version "3.21.0" resolved "https://registry.npmmirror.com/@stoplight/json/-/json-3.21.0.tgz#c0dff9c478f3365d7946cb6e34c17cc2fa84250b" integrity sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g== @@ -9092,6 +10426,33 @@ simple-eval "1.0.0" tslib "^2.3.0" +"@stoplight/spectral-core@^1.18.3": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@stoplight/spectral-core/-/spectral-core-1.22.0.tgz#2b224e992fdff1cf8edadb86621e200cbe89239a" + integrity sha512-4hTxMDs4TFUG4/jKjaZttA65gNuV2PCKI9+51I+J4nL6ylo17DlbW+sl6byKnBuV/85HxaV33ri5fEGlp8lTSA== + dependencies: + "@stoplight/better-ajv-errors" "1.0.3" + "@stoplight/json" "~3.21.0" + "@stoplight/path" "1.3.2" + "@stoplight/spectral-parsers" "^1.0.0" + "@stoplight/spectral-ref-resolver" "^1.0.4" + "@stoplight/spectral-runtime" "^1.1.2" + "@stoplight/types" "~13.6.0" + "@types/es-aggregate-error" "^1.0.2" + "@types/json-schema" "^7.0.11" + ajv "^8.18.0" + ajv-errors "~3.0.0" + ajv-formats "~2.1.1" + es-aggregate-error "^1.0.7" + expr-eval-fork "^3.0.1" + jsonpath-plus "^10.3.0" + lodash "^4.18.1" + lodash.topath "^4.5.2" + minimatch "^3.1.4" + nimma "0.2.3" + pony-cause "^1.1.1" + tslib "^2.8.1" + "@stoplight/spectral-formats@^1.0.0": version "1.6.0" resolved "https://registry.npmmirror.com/@stoplight/spectral-formats/-/spectral-formats-1.6.0.tgz#c4a7169ac85a2855a3d76cdcc7a59e8f2e8f2bb3" @@ -9140,6 +10501,17 @@ dependency-graph "0.11.0" tslib "^2.3.1" +"@stoplight/spectral-ref-resolver@^1.0.4": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@stoplight/spectral-ref-resolver/-/spectral-ref-resolver-1.0.5.tgz#2462ae79bbb90b7fcc76b014118a0beeee5e64d5" + integrity sha512-gj3TieX5a9zMW29z3mBlAtDOCgN3GEc1VgZnCVlr5irmR4Qi5LuECuFItAq4pTn5Zu+sW5bqutsCH7D4PkpyAA== + dependencies: + "@stoplight/json-ref-readers" "1.2.2" + "@stoplight/json-ref-resolver" "~3.1.6" + "@stoplight/spectral-runtime" "^1.1.2" + dependency-graph "0.11.0" + tslib "^2.8.1" + "@stoplight/spectral-runtime@^1.0.0", "@stoplight/spectral-runtime@^1.1.0", "@stoplight/spectral-runtime@^1.1.2": version "1.1.2" resolved "https://registry.npmmirror.com/@stoplight/spectral-runtime/-/spectral-runtime-1.1.2.tgz#7315767a09a4a7e5226e997e245bd3eb39561a02" @@ -9161,632 +10533,643 @@ "@types/json-schema" "^7.0.4" utility-types "^3.10.0" -"@stoplight/types@^12.3.0 || ^13.0.0", "@stoplight/types@^13.0.0", "@stoplight/types@^13.12.0", "@stoplight/types@^13.6.0": - version "13.20.0" - resolved "https://registry.npmmirror.com/@stoplight/types/-/types-13.20.0.tgz#d42682f1e3a14a3c60bdf0df08bff4023518763d" - integrity sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA== - dependencies: - "@types/json-schema" "^7.0.4" - utility-types "^3.10.0" - -"@stoplight/types@~13.6.0": - version "13.6.0" - resolved "https://registry.npmmirror.com/@stoplight/types/-/types-13.6.0.tgz#96c6aaae05858b36f589821cd52c95aa9b205ce7" - integrity sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ== - dependencies: - "@types/json-schema" "^7.0.4" - utility-types "^3.10.0" - -"@stoplight/yaml-ast-parser@0.0.48": - version "0.0.48" - resolved "https://registry.npmmirror.com/@stoplight/yaml-ast-parser/-/yaml-ast-parser-0.0.48.tgz#442b21f419427acaa8a3106ebc5d73351c407002" - integrity sha512-sV+51I7WYnLJnKPn2EMWgS4EUfoP4iWEbrWwbXsj0MZCB/xOK8j6+C9fntIdOM50kpx45ZLC3s6kwKivWuqvyg== - -"@stoplight/yaml@~4.2.3": - version "4.2.3" - resolved "https://registry.npmmirror.com/@stoplight/yaml/-/yaml-4.2.3.tgz#d177664fecd6b2fd0d4f264f1078550c30cfd8d1" - integrity sha512-Mx01wjRAR9C7yLMUyYFTfbUf5DimEpHMkRDQ1PKLe9dfNILbgdxyrncsOXM3vCpsQ1Hfj4bPiGl+u4u6e9Akqw== - dependencies: - "@stoplight/ordered-object-literal" "^1.0.1" - "@stoplight/types" "^13.0.0" - "@stoplight/yaml-ast-parser" "0.0.48" - tslib "^2.2.0" - -"@sucrase/webpack-loader@^2.0.0": - version "2.0.0" - resolved "https://registry.npmmirror.com/@sucrase/webpack-loader/-/webpack-loader-2.0.0.tgz#b8a70b8d3df3eeb570e6a3315e1a9c6b723e4a37" - integrity sha512-KUfWr83g70Qm+ZqjGL+M4tX01taDP3BldQcI6NSMlDf7WTDfuo0RvLlS0ekF6dPVslNyZhbFFBy2OBTB6Sa6+Q== - dependencies: - loader-utils "^1.1.0" - -"@svgr/babel-plugin-add-jsx-attribute@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz#74a5d648bd0347bda99d82409d87b8ca80b9a1ba" - integrity sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ== - -"@svgr/babel-plugin-remove-jsx-attribute@*": - version "8.0.0" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" - integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== - -"@svgr/babel-plugin-remove-jsx-empty-expression@*": - version "8.0.0" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" - integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== - -"@svgr/babel-plugin-replace-jsx-attribute-value@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz#fb9d22ea26d2bc5e0a44b763d4c46d5d3f596c60" - integrity sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg== - -"@svgr/babel-plugin-svg-dynamic-title@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz#01b2024a2b53ffaa5efceaa0bf3e1d5a4c520ce4" - integrity sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw== - -"@svgr/babel-plugin-svg-em-dimensions@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz#dd3fa9f5b24eb4f93bcf121c3d40ff5facecb217" - integrity sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA== - -"@svgr/babel-plugin-transform-react-native-svg@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz#1d8e945a03df65b601551097d8f5e34351d3d305" - integrity sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg== - -"@svgr/babel-plugin-transform-svg-component@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz#48620b9e590e25ff95a80f811544218d27f8a250" - integrity sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ== - -"@svgr/babel-preset@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/babel-preset/-/babel-preset-6.5.1.tgz#b90de7979c8843c5c580c7e2ec71f024b49eb828" - integrity sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^6.5.1" - "@svgr/babel-plugin-remove-jsx-attribute" "*" - "@svgr/babel-plugin-remove-jsx-empty-expression" "*" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.5.1" - "@svgr/babel-plugin-svg-dynamic-title" "^6.5.1" - "@svgr/babel-plugin-svg-em-dimensions" "^6.5.1" - "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" - "@svgr/babel-plugin-transform-svg-component" "^6.5.1" - -"@svgr/core@6.5.x", "@svgr/core@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/core/-/core-6.5.1.tgz#d3e8aa9dbe3fbd747f9ee4282c1c77a27410488a" - integrity sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw== - dependencies: - "@babel/core" "^7.19.6" - "@svgr/babel-preset" "^6.5.1" - "@svgr/plugin-jsx" "^6.5.1" - camelcase "^6.2.0" - cosmiconfig "^7.0.1" - -"@svgr/hast-util-to-babel-ast@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz#81800bd09b5bcdb968bf6ee7c863d2288fdb80d2" - integrity sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw== - dependencies: - "@babel/types" "^7.20.0" - entities "^4.4.0" - -"@svgr/plugin-jsx@6.5.x", "@svgr/plugin-jsx@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz#0e30d1878e771ca753c94e69581c7971542a7072" - integrity sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw== - dependencies: - "@babel/core" "^7.19.6" - "@svgr/babel-preset" "^6.5.1" - "@svgr/hast-util-to-babel-ast" "^6.5.1" - svg-parser "^2.0.4" - -"@svgr/plugin-svgo@6.5.x", "@svgr/plugin-svgo@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz#0f91910e988fc0b842f88e0960c2862e022abe84" - integrity sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ== - dependencies: - cosmiconfig "^7.0.1" - deepmerge "^4.2.2" - svgo "^2.8.0" - -"@svgr/rollup@6.5.x": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/rollup/-/rollup-6.5.1.tgz#9fe0e322c6cc3c6324469f049cb4b031efcf4a42" - integrity sha512-GeUfq0grJfpcn2jRWRaZ4npn27nnWK21vUj6MqDqknuJnEqGADcZZjO9wrUAaPLr3InAnQi0Z7nwiNUdzkaj6A== - dependencies: - "@babel/core" "^7.19.6" - "@babel/plugin-transform-react-constant-elements" "^7.18.12" - "@babel/preset-env" "^7.19.4" - "@babel/preset-react" "^7.18.6" - "@babel/preset-typescript" "^7.18.6" - "@rollup/pluginutils" "^4.2.1" - "@svgr/core" "^6.5.1" - "@svgr/plugin-jsx" "^6.5.1" - "@svgr/plugin-svgo" "^6.5.1" - -"@svgr/webpack@6.5.x": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/webpack/-/webpack-6.5.1.tgz#ecf027814fc1cb2decc29dc92f39c3cf691e40e8" - integrity sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA== - dependencies: - "@babel/core" "^7.19.6" - "@babel/plugin-transform-react-constant-elements" "^7.18.12" - "@babel/preset-env" "^7.19.4" - "@babel/preset-react" "^7.18.6" - "@babel/preset-typescript" "^7.18.6" - "@svgr/core" "^6.5.1" - "@svgr/plugin-jsx" "^6.5.1" - "@svgr/plugin-svgo" "^6.5.1" - -"@swagger-api/apidom-ast@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-ast/-/apidom-ast-0.93.0.tgz#f4c8e5293557726f0d63b7de177bb439a3514132" - integrity sha512-iGrhEXdlgFEQYX4bAootcX+FaeLXruoJnHCFTO6IQ7yKlml3QIl1G9l2KwTzHybHQ70u3nfgE3ovLGOiy8NM5g== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-error" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.1.1" - unraw "^3.0.0" - -"@swagger-api/apidom-core@>=0.90.0 <1.0.0", "@swagger-api/apidom-core@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-core/-/apidom-core-0.93.0.tgz#2b8a8127380d8d6ee243b6960f0e6ebef22d4434" - integrity sha512-OxbLBcnJQ8seFmeKqM2KDMkLJox0YTEhnLq3DnCyvOXnzVHdau+wNIhYSUc1+ZzrjsWqJLU0ntS3LEPb7ttnGw== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-ast" "^0.93.0" - "@swagger-api/apidom-error" "^0.93.0" - "@types/ramda" "~0.29.6" - minim "~0.23.8" - ramda "~0.29.1" - ramda-adjunct "^4.1.1" - short-unique-id "^5.0.2" - stampit "^4.3.2" - -"@swagger-api/apidom-error@>=0.90.0 <1.0.0", "@swagger-api/apidom-error@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-error/-/apidom-error-0.93.0.tgz#3b7b69d407b30164c653b1a1e1acb3b5877d8c4e" - integrity sha512-vJiG0IZS8lOhXn8ZPSsKMh0mun6lOB7m4I8Ju6XeWR0khB7dbp15PAtk6xiFjekbWDa7hPn9584hp0YqXb6p5Q== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - -"@swagger-api/apidom-json-pointer@>=0.90.0 <1.0.0", "@swagger-api/apidom-json-pointer@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-0.93.0.tgz#7a9b03f66da01f5291c04e75548e48a45574aea5" - integrity sha512-DnZb/xNKzgBtjKk+5KFMEp5olCeH1wEHbx1YaNY4DDRRtnafphtMxd5/xmapWKj7Glfjfswxi3Uo4m/FAasKPA== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-error" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.0.0" - -"@swagger-api/apidom-ns-api-design-systems@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-0.93.0.tgz#6d366c34239037a7c842cc0891dbaeff8a2a3bf9" - integrity sha512-f3RcUBmZjqmADubnV+yslvtbOJGV3jeMpQuzM9ByS3ASVg+XU1YxKkH5em8BcW3SDj0lqDiQ2ggA9kfPLSuV8A== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-error" "^0.93.0" - "@swagger-api/apidom-ns-openapi-3-1" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.1.1" - ts-mixer "^6.0.3" - -"@swagger-api/apidom-ns-asyncapi-2@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-0.93.0.tgz#8ea40ac4e78ccba63e0aa2b5a364184d4472ca61" - integrity sha512-cEAFsVo/CiPFlw9FAeu/9WR6WixQKxH50SHNvmy8OsCOgYcl5VHF06majZTFCrgZlpCNXPJh9m5A2pUoHtxxUw== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-ns-json-schema-draft-7" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.1.1" - stampit "^4.3.2" - -"@swagger-api/apidom-ns-json-schema-draft-4@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-0.93.0.tgz#002ab375713306b384ba8ea8691c3eece4e0f1bd" - integrity sha512-dBY7LHrWZ+ydsgD00fQtRq/wOAZjdUh2+PE7/Xe3tYPeD1tv3DZ4F1tcVQeiyGBskF7vReUxUwnQo4uPJipPzA== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-ast" "^0.93.0" - "@swagger-api/apidom-core" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.1.1" - stampit "^4.3.2" - -"@swagger-api/apidom-ns-json-schema-draft-6@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-0.93.0.tgz#7feebdbef2e0b977cf4366634c5538ef281d202d" - integrity sha512-u0e0Nq9nuuZyGoOCEjVQJKe5NdsIWezH+q8ev3dABlUNEiWMbtFLS9TvHFBeU11plCsyxjJyYRg8TjnI2Q8xzQ== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-error" "^0.93.0" - "@swagger-api/apidom-ns-json-schema-draft-4" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.1.1" - stampit "^4.3.2" - -"@swagger-api/apidom-ns-json-schema-draft-7@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-0.93.0.tgz#fa072e90dbd7b954ce79a304ba5e57ffc976e71e" - integrity sha512-NkHhyezG5ghx5FhclbIzCwo1wH4gmI8KwMnEuorsXJhanmnkl+JXzDSrpCM3Orvezl+4DEnBeMLyLfbnQMMknw== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-error" "^0.93.0" - "@swagger-api/apidom-ns-json-schema-draft-6" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.1.1" - stampit "^4.3.2" - -"@swagger-api/apidom-ns-openapi-2@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-0.93.0.tgz#4d14682f778a88ac1eb4b58c98dd29ea9aff54c7" - integrity sha512-sUZgGyuraLP7rarBp8CISdDLuO8n8L9Q+G8XMiYgl53HGRUY5a7HSGnybcQPpyNPQSNTFKigytSjvsSu8h33ZQ== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-error" "^0.93.0" - "@swagger-api/apidom-ns-json-schema-draft-4" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.1.1" - stampit "^4.3.2" - -"@swagger-api/apidom-ns-openapi-3-0@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-0.93.0.tgz#218935c25ba522bd98a8867cc60b0dfabf20d800" - integrity sha512-zmyMUg9+BocHxJuNbUmJCYi/ArOv38Am3/oSkh/5+ANAYOzB1O+ukVvdy7pHDxfZId6KRiP9ZWW6M7VBxz/t/g== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-error" "^0.93.0" - "@swagger-api/apidom-ns-json-schema-draft-4" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.1.1" - stampit "^4.3.2" - -"@swagger-api/apidom-ns-openapi-3-1@>=0.90.0 <1.0.0", "@swagger-api/apidom-ns-openapi-3-1@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-0.93.0.tgz#24572306b7bf9dee0609452ed0798427eb5806e3" - integrity sha512-kUkdcNmJloqqhvEDIAGvamyh1fQrITKGFUqRj5v0YWch/hKrfYk61eHG7igWxnVv3r/wDdM9T3uDWlBefMsj1g== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-ast" "^0.93.0" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-ns-openapi-3-0" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.1.1" - stampit "^4.3.2" - -"@swagger-api/apidom-ns-workflows-1@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-ns-workflows-1/-/apidom-ns-workflows-1-0.93.0.tgz#f99ae57e9eec9691e4de7f48f9b18200e0b34fa9" - integrity sha512-dL92YBMULuI6HiuOVnB24ozOp4P02xN6Zw8tWzTm/H/W5EWVdso8krq5utjuSTFcurj4rODkPQxY8WRKuIuMDw== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-ns-openapi-3-1" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.1.1" - stampit "^4.3.2" - -"@swagger-api/apidom-parser-adapter-api-design-systems-json@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-0.93.0.tgz#f7dd4cdb5b4e2fffe4b15f77326e4a4f24b57e6c" - integrity sha512-lKaSt9YOXbhiBMTJcSCIF0C1fjyWLxKrTWkvbFwwqCcjeMt5vg8N/0nKqQeQm4mcZ946mqnssRVpPbJfWEoIWA== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-ns-api-design-systems" "^0.93.0" - "@swagger-api/apidom-parser-adapter-json" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.0.0" - -"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-0.93.0.tgz#13f3bf6b65cc2d0e753035723042d77fb7c3a8f0" - integrity sha512-fjIQs0vRP/46M8kwQ3UGpq8piMboIXvrJqu1lDTylS5PYzE9qXpx1BhESZPtBwuoR9kvVYbumlD+BgjCuyzc8g== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-ns-api-design-systems" "^0.93.0" - "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.0.0" - -"@swagger-api/apidom-parser-adapter-asyncapi-json-2@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-0.93.0.tgz#589a4c46fda7e3746e555c18a195369b9204b624" - integrity sha512-65Io5+Zy5LBJTvRt3yKBXXfk5M/DCq3mDUSiVcZuyRPHGNi9ViMTdEFCH3rzF0x2v0omG+6OqryndIBVAXEo/g== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-ns-asyncapi-2" "^0.93.0" - "@swagger-api/apidom-parser-adapter-json" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.0.0" - -"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-0.93.0.tgz#74fa0f722547a9e0e38a9ac5d9e0861d50273cb2" - integrity sha512-WwGH6StA7kplkTAaV43MziJeJonnJCW6pBOp1bwoEhGaeYO/Yd/dpoFZVDfxAnXJYmDnzk7pqjJm3U6A9BCPcw== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-ns-asyncapi-2" "^0.93.0" - "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.0.0" - -"@swagger-api/apidom-parser-adapter-json@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-0.93.0.tgz#b22a8d46523104b0a207485ca5df4fa4d0fe58b0" - integrity sha512-FNA36GAqG1EMErkRhMFb4GeW8fuYdzRkOwQmTLWZfKIUzLYOvVMbki8R2dE8ruNs/Gf5VhiQH85mLaCyLwp3xw== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-ast" "^0.93.0" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-error" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.1.1" - tree-sitter "=0.20.4" - tree-sitter-json "=0.20.1" - web-tree-sitter "=0.20.3" - -"@swagger-api/apidom-parser-adapter-openapi-json-2@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-0.93.0.tgz#be4acaddd6deb8ab56219029024c5621e82a0507" - integrity sha512-bBEYiZdiYQQoubZVdkHw3I/qwgI3nvCcrbFAlqELvpFgRZywJzXssxqHqFOR8clvoX8+JVYx5E/MgSC6Rn77uQ== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-ns-openapi-2" "^0.93.0" - "@swagger-api/apidom-parser-adapter-json" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.0.0" - -"@swagger-api/apidom-parser-adapter-openapi-json-3-0@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-0.93.0.tgz#9897a86a54e6fc1ce5e5f48149fa325dd561cfa4" - integrity sha512-UlM924syGaSa5c35OuDC614xBsjIm5DaWUqshFf6DmmP5iDZFQUh0cyIfLDD5/n1wZvAtiIL040zwfTBrK0Udw== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-ns-openapi-3-0" "^0.93.0" - "@swagger-api/apidom-parser-adapter-json" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.0.0" - -"@swagger-api/apidom-parser-adapter-openapi-json-3-1@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-0.93.0.tgz#fa27107befc7eab36d85d73f81ffc3d66951b74c" - integrity sha512-9rqOLv0ip7knvbdmk8hNa1aN/kaeIIoUKdwO6GaMW9eFh2cvIDyriLxp+FwTatnwhlJjWMwp7Mfyv62WT0cfKQ== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-ns-openapi-3-1" "^0.93.0" - "@swagger-api/apidom-parser-adapter-json" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.0.0" - -"@swagger-api/apidom-parser-adapter-openapi-yaml-2@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-0.93.0.tgz#466cea25b81a3cea03512f349df3f090b4705ad5" - integrity sha512-8laGpR9MrFBsBDmGNSexKdvLvGnr5QnjhqOSqFIViK/WFG+zEpE5SsWyJkCQJE4EJ5IvxVA8BfBrjjUqe0Z5uA== - dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-ns-openapi-2" "^0.93.0" - "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.0.0" - -"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-0.93.0.tgz#939a7f830be13fd3d3f94030e27a74b914af5814" - integrity sha512-Tf8eX+MzTsCijXbE5lkfF0/wG5VkvCPGg7hZV7ZGYrzQ584R/Z0xkgHEu3Atqu3Ji9XPGP0u6LqWM/wATuWK0A== +"@stoplight/types@^12.3.0 || ^13.0.0", "@stoplight/types@^13.0.0", "@stoplight/types@^13.12.0", "@stoplight/types@^13.6.0": + version "13.20.0" + resolved "https://registry.npmmirror.com/@stoplight/types/-/types-13.20.0.tgz#d42682f1e3a14a3c60bdf0df08bff4023518763d" + integrity sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA== dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-ns-openapi-3-0" "^0.93.0" - "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.0.0" - -"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-0.93.0.tgz#bea175f4dfe1f29b206defca3eb2b3cfd53478c9" - integrity sha512-1Yt3SmgV2x5PAV8NeXIztuRWbIMhAU3cs3SIDJlObzFxXitnsf3cVIRrFTNrK28mqhHU3XNVTat5GrGtlJeD8Q== + "@types/json-schema" "^7.0.4" + utility-types "^3.10.0" + +"@stoplight/types@~13.6.0": + version "13.6.0" + resolved "https://registry.npmmirror.com/@stoplight/types/-/types-13.6.0.tgz#96c6aaae05858b36f589821cd52c95aa9b205ce7" + integrity sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ== dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-ns-openapi-3-1" "^0.93.0" - "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.0.0" - -"@swagger-api/apidom-parser-adapter-workflows-json-1@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-parser-adapter-workflows-json-1/-/apidom-parser-adapter-workflows-json-1-0.93.0.tgz#9d22e1cd3927080853c6569f9364e2dfea72fad1" - integrity sha512-tUm049GrXtBHoP8rcLTp+yz5EbJkq/stSgHb4nUNyFH00MKtMkP3j3KnXSCQz2w6br5gzv54DDCKwqPAh7IjuA== + "@types/json-schema" "^7.0.4" + utility-types "^3.10.0" + +"@stoplight/yaml-ast-parser@0.0.48": + version "0.0.48" + resolved "https://registry.npmmirror.com/@stoplight/yaml-ast-parser/-/yaml-ast-parser-0.0.48.tgz#442b21f419427acaa8a3106ebc5d73351c407002" + integrity sha512-sV+51I7WYnLJnKPn2EMWgS4EUfoP4iWEbrWwbXsj0MZCB/xOK8j6+C9fntIdOM50kpx45ZLC3s6kwKivWuqvyg== + +"@stoplight/yaml@~4.2.3": + version "4.2.3" + resolved "https://registry.npmmirror.com/@stoplight/yaml/-/yaml-4.2.3.tgz#d177664fecd6b2fd0d4f264f1078550c30cfd8d1" + integrity sha512-Mx01wjRAR9C7yLMUyYFTfbUf5DimEpHMkRDQ1PKLe9dfNILbgdxyrncsOXM3vCpsQ1Hfj4bPiGl+u4u6e9Akqw== dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-ns-workflows-1" "^0.93.0" - "@swagger-api/apidom-parser-adapter-json" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.0.0" - -"@swagger-api/apidom-parser-adapter-workflows-yaml-1@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-parser-adapter-workflows-yaml-1/-/apidom-parser-adapter-workflows-yaml-1-0.93.0.tgz#4b0adddfff3a9c7f28b9aeabc0f530389748c0f5" - integrity sha512-8knwzutGHH+69061yHY0xUwmMW/wWUP5jjn4CVDctxYS7BYXb9iaH84VuKJRuDm5M5L/C6yJHgdoWo4IHnpVBw== + "@stoplight/ordered-object-literal" "^1.0.1" + "@stoplight/types" "^13.0.0" + "@stoplight/yaml-ast-parser" "0.0.48" + tslib "^2.2.0" + +"@swagger-api/apidom-ast@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ast/-/apidom-ast-1.10.2.tgz#fd7b49929bdd8ca07c247efeaae3c47c86d7da68" + integrity sha512-vTl8gWyeZaj887/NSWYs3as4K8wXHar5wY/606XRBjR2UgmJBokBgKjq7S23LW9tsYjsT4MjQKC8idjgw17xvg== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-error" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + unraw "^3.0.0" + +"@swagger-api/apidom-core@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-core/-/apidom-core-1.10.2.tgz#1ecf2808a1e3b1814e7f133e5c94cdd9fd5b9dcd" + integrity sha512-qryNBGHNWDvSRyK1w5rox0UOrHrVBjZOHgeXFpGHF+oBO7ntSc/H7BSiYMDR+KQESkzMcAxn4tZMLYItaBt06w== dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-ns-workflows-1" "^0.93.0" - "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.0.0" - -"@swagger-api/apidom-parser-adapter-yaml-1-2@^0.93.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-0.93.0.tgz#48765e12cc5bc4292895eb2026ed237b089df7b8" - integrity sha512-0z/d/t19f78o4CTxtpMMLdi+7js+JNz7s4/WSJXZ0Q0k5O4pEhlARMMEqJXE4qUXxTGnoXbi4sQY9FV/yA5V0Q== + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-ast" "^1.10.2" + "@swagger-api/apidom-error" "^1.10.2" + "@types/ramda" "~0.30.0" + minim "~0.23.8" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + short-unique-id "^5.3.2" + ts-mixer "^6.0.3" + +"@swagger-api/apidom-error@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-error/-/apidom-error-1.10.2.tgz#a017b9653d22414908d664468f12634841f37696" + integrity sha512-SWyPyL5xwTUsDzPi0A5zwTFwqPezvlwj4opEqruqjESNTYupUA7+vt4Mdj7IlDaRYRG1qyCWQgKhIBXznVUD4w== dependencies: "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-ast" "^0.93.0" - "@swagger-api/apidom-core" "^0.93.0" - "@swagger-api/apidom-error" "^0.93.0" - "@types/ramda" "~0.29.6" - ramda "~0.29.1" - ramda-adjunct "^4.1.1" - tree-sitter "=0.20.4" - tree-sitter-yaml "=0.5.0" - web-tree-sitter "=0.20.3" - -"@swagger-api/apidom-reference@>=0.90.0 <1.0.0": - version "0.93.0" - resolved "https://registry.npmmirror.com/@swagger-api/apidom-reference/-/apidom-reference-0.93.0.tgz#c90c70d288ececd43b42ac8cbe97fa2223b45eb1" - integrity sha512-kii8DqU3v+Fqv4gLi/3pTEYqR0AhjogcJnJUuKZqs1G/UiGk2RiEN4i/VyJQn0iwL4w4UyFcLOG4kyYxNgDAJw== + +"@swagger-api/apidom-json-pointer@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.10.2.tgz#f454e11606759432ee87432216eb65703a76057f" + integrity sha512-zySHPqIXF4HZ3VWbHwTxO+H1e9dJw7mGHzoX+tZjx5wVyLQO3kZDCAAXzz3c3/TIY21Y2Zkpkez3q9hjFyuLvQ== dependencies: - "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.93.0" - "@types/ramda" "~0.29.6" - axios "^1.4.0" - minimatch "^7.4.3" - process "^0.11.10" - ramda "~0.29.1" - ramda-adjunct "^4.1.1" - stampit "^4.3.2" + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-error" "^1.10.2" + "@swaggerexpert/json-pointer" "^2.10.1" + +"@swagger-api/apidom-ns-api-design-systems@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.10.2.tgz#0bea51cbfbb86ec272890c58cd771876329368e2" + integrity sha512-MsZ4GWmWN7wkWv7G9Pwk8sHU1j0bwk7xoGeaZmNCylbTfYvGkg6jJGMHdAdQNCQXbbpfLeKt1O+3YCN//JUQ7w== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-error" "^1.10.2" + "@swagger-api/apidom-ns-openapi-3-1" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + ts-mixer "^6.0.3" + +"@swagger-api/apidom-ns-arazzo-1@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-arazzo-1/-/apidom-ns-arazzo-1-1.10.2.tgz#419ac738a943f4990a770dcfd521f0fa6122b08f" + integrity sha512-fQSwDlIR85tbnLXAjtV/ypSGUBfrzFcZ4NbH6BL1DSTR4uEunVxAULdD4wlhCt9gGNDl/zxZD3vQtlYDkXDFmw== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-json-schema-2020-12" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + ts-mixer "^6.0.3" + +"@swagger-api/apidom-ns-asyncapi-2@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.10.2.tgz#37c5e15a847a3dbefb5c002e3033a75476b3744f" + integrity sha512-obWHe3pyAj65Nf9ISwnbtJ4C5mZ15C6mtQXxzHVW5maVZqlqt3s/YbPY87EqK9ArdNOwOZHkQt2Uth02GMmjxA== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-json-schema-draft-7" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + ts-mixer "^6.0.3" + +"@swagger-api/apidom-ns-asyncapi-3@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-asyncapi-3/-/apidom-ns-asyncapi-3-1.10.2.tgz#787851874b278dabe5b9583120f13ed06aafc21a" + integrity sha512-yqNmXeObF2OLAusgGEapXz2CrGjXwkcfG3DYcQDtOvgRytvGZxC2EkCUR+wEXCVNYhoJ7QpVzzTJOHs3jOvptg== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-asyncapi-2" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + ts-mixer "^6.0.3" + +"@swagger-api/apidom-ns-json-schema-2019-09@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-json-schema-2019-09/-/apidom-ns-json-schema-2019-09-1.10.2.tgz#358652692fb3dc89dbfc5f775ec79a27791b9620" + integrity sha512-I1FaBoDFMjybF4QVsesIYl8OilkwycZ0mQ0jf1P++zfTRG27uIePB8M+Iuj6iqMsE3qpkjjJJ6ZLnrLPdKvmRw== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-error" "^1.10.2" + "@swagger-api/apidom-ns-json-schema-draft-7" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + ts-mixer "^6.0.4" + +"@swagger-api/apidom-ns-json-schema-2020-12@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-json-schema-2020-12/-/apidom-ns-json-schema-2020-12-1.10.2.tgz#f83dc1f6f403d1572acd2457557c37618379581d" + integrity sha512-lg9XfRlJRNoBa2EDGpEFc7HvFV39G6RG0/SbjQY0BE/WZer10wmfTCU7l3RUNJXRFGKH6/O/nsYgP7AFjTanXQ== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-error" "^1.10.2" + "@swagger-api/apidom-ns-json-schema-2019-09" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + ts-mixer "^6.0.4" + +"@swagger-api/apidom-ns-json-schema-draft-4@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.10.2.tgz#79e984a17ce86a5a768cab521ea0bd79987d705f" + integrity sha512-C50KnSKynrmHky/oOB6+hHyZVpwng78Fz5aZjay3h8X5C/PJHmm3sDJFvF3/9wkYHO3N9sPp7cpu4Xm9VJ4/wQ== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-ast" "^1.10.2" + "@swagger-api/apidom-core" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + ts-mixer "^6.0.4" + +"@swagger-api/apidom-ns-json-schema-draft-6@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.10.2.tgz#e55d05c44bb580e6690b1d8bdbafc29c9480c822" + integrity sha512-/wiP8+2lF8UJRrkoQ9HvKnMbnqijk2uY/hAg+/Bo73T9NGKkEa29jYVUKYNYj7gJBw4hhkUHfHFWuZUpxPC4ZA== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-error" "^1.10.2" + "@swagger-api/apidom-ns-json-schema-draft-4" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + ts-mixer "^6.0.4" + +"@swagger-api/apidom-ns-json-schema-draft-7@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.10.2.tgz#357b62e4df4f07912c5283ac9a214e175aa27593" + integrity sha512-firN/uvnVxQgACqcyzV3NU9qjbMvNMJkpmm3wOat3URmaFMaFBT3qjbU1pFHBGbnXI3+I9pQJZHmJSwqNzfUbQ== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-error" "^1.10.2" + "@swagger-api/apidom-ns-json-schema-draft-6" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + ts-mixer "^6.0.4" + +"@swagger-api/apidom-ns-openapi-2@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.10.2.tgz#9b2bec035501d40393291a70f9260e333c8d3ee5" + integrity sha512-FK5kYvo/1uwAByumRVRsynBlnKxUUImfsjPEFgRCW6yhbCGRqN47NaZ7GYFHpbhjC3OmMN5/etYj6B0jnZx7Gg== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-error" "^1.10.2" + "@swagger-api/apidom-ns-json-schema-draft-4" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + ts-mixer "^6.0.3" + +"@swagger-api/apidom-ns-openapi-3-0@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.10.2.tgz#8f86fd918cd1909444bb7b7c6b0ecc06bdaa76f2" + integrity sha512-ziyv85QbJYHRdc9oTEFBy3pxwxg7BW/a9GrwH01/SmuXVQPjLjwzRb+SjCxLogJppm0yjxOkDFI2VWPp2RADFg== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-error" "^1.10.2" + "@swagger-api/apidom-ns-json-schema-draft-4" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + ts-mixer "^6.0.3" + +"@swagger-api/apidom-ns-openapi-3-1@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.10.2.tgz#968eaa27f98595a7bb0e820d5b805e770c886be0" + integrity sha512-ngcmO4dH77JT5hZB04OJdyTzgKnt2lNhAZQ+4wXjum/xhszjUmDhOeYfXdHw3Lm7MxsEsTesWzLYQ5LKADc41A== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-ast" "^1.10.2" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-json-pointer" "^1.10.2" + "@swagger-api/apidom-ns-json-schema-2020-12" "^1.10.2" + "@swagger-api/apidom-ns-openapi-3-0" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + ts-mixer "^6.0.3" + +"@swagger-api/apidom-ns-openapi-3-2@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-openapi-3-2/-/apidom-ns-openapi-3-2-1.10.2.tgz#b2bb8f0d8ac71660255d6744aa71cb870c76fabf" + integrity sha512-3SWJ5ipWwn+w11HTUESWex/522jy2aGLzBqqMgH36sy+Wdwx+9Mw2bgSDqkxmNC5+jpzOGUOIWoQAMuCpS/Gzg== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-ast" "^1.10.2" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-json-pointer" "^1.10.2" + "@swagger-api/apidom-ns-json-schema-2020-12" "^1.10.2" + "@swagger-api/apidom-ns-openapi-3-0" "^1.10.2" + "@swagger-api/apidom-ns-openapi-3-1" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + ts-mixer "^6.0.3" + +"@swagger-api/apidom-parser-adapter-api-design-systems-json@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.10.2.tgz#8249b5abdd430624a7c7f9d1a007ecfc9e2bc3cc" + integrity sha512-kzhJUGzsJ38Uohj5xRQDkQC08rqNhatbqgD30LZ0/UWryJ9nAsjqK2ovuP9t+5WKcDE4iwcYeGSt1NA2XgEZwg== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-api-design-systems" "^1.10.2" + "@swagger-api/apidom-parser-adapter-json" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.10.2.tgz#053cc675e02bce40b16e2773fc57a11689cceb26" + integrity sha512-i3CmSxJ/iG67ybRDAJ9xpuMrOMFvC/obX2lI36E0VZzBTb+llw4Zd5qFmBqNnImLpwdmk11Z1V7i+5HM+J7ijQ== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-api-design-systems" "^1.10.2" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-arazzo-json-1@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-arazzo-json-1/-/apidom-parser-adapter-arazzo-json-1-1.10.2.tgz#988b6999d34df1b85bfbc3f5dc54f419b3b448f0" + integrity sha512-HwiUkwvo5i2hV2SS6KWrdj62BdceZGfhuXhr1il8akWekpU4jXPtr5pv4gOnKKJN7VgjAmwt/DlcCSRo1+9jVA== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-arazzo-1" "^1.10.2" + "@swagger-api/apidom-parser-adapter-json" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-arazzo-yaml-1@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-arazzo-yaml-1/-/apidom-parser-adapter-arazzo-yaml-1-1.10.2.tgz#fe2371ff7a9cf84094b1ec1554c404c804958c28" + integrity sha512-w8VTVuE7GPbRqWxvMgRoTb726JRsMhFPMfTBf8+MJ4pQThjk78dSXPV2Zlse71b2DWBuQy2sr6zGyLUNs/3ePQ== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-arazzo-1" "^1.10.2" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-asyncapi-json-2@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.10.2.tgz#aca77a0e3abb7643aab18fa7dcb370334de6d264" + integrity sha512-FDNjqmn2vV1jFoVVwQDO0XPPm8R5xzmcyY/6yBLFmKZADin3smSKVZ+njYHmfRjpspXwN0AwI0drdvuH0FZLJg== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-asyncapi-2" "^1.10.2" + "@swagger-api/apidom-parser-adapter-json" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-asyncapi-json-3@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-asyncapi-json-3/-/apidom-parser-adapter-asyncapi-json-3-1.10.2.tgz#01ff7e0b05336288776791c9d537d6abe98ddb57" + integrity sha512-x/0vM2nDDzYzFnXr69+so/KSH+2py2TiZd1K49pWcX8cHsPV1Y4Ppih7GVOMymd8m/IOCjLYlV7qt4eWDwdldg== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-asyncapi-3" "^1.10.2" + "@swagger-api/apidom-parser-adapter-json" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.10.2.tgz#0912939a3d6f0845587bcd0ed6b67ae36c9989b0" + integrity sha512-2bVACmU9ZmAVVnqQWSc3Bs+xG0HHLU1tfZbYL8xNgSi8kw4HcnejF5mWtN+MLFzTaBmWCi2In7P7BYNR8+2Dyg== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-asyncapi-2" "^1.10.2" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-asyncapi-yaml-3/-/apidom-parser-adapter-asyncapi-yaml-3-1.10.2.tgz#b8de51551d183f74e9c3eb3d0754200bc5751ff0" + integrity sha512-oHpbf+iqBcDS3qtsipMpgCwAeckKMxg0qFKYTCRZyJdctRgupJTxVeir6t/SGo0Ny0a1iknt2LN0u5frEen0kg== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-asyncapi-3" "^1.10.2" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-json@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.10.2.tgz#fd52f62064a2456a30f020b208d80715d4bb9ae2" + integrity sha512-VnwEkarKfsJYRF0zCI9AGiSIyBUXqS2d32KQuhVCt/HeuF1XO9sjeLjGiosA/24YVOnO0ul5TpiNFQn0pw89mA== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-ast" "^1.10.2" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-error" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + tree-sitter "=0.21.1" + tree-sitter-json "=0.24.8" + web-tree-sitter "=0.24.5" + +"@swagger-api/apidom-parser-adapter-openapi-json-2@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.10.2.tgz#18a604e5197f095d7633ec47263ed31c856c2b87" + integrity sha512-+d/o/8TrNBjvFzgPb0RQhrCc8gOWnrHZF+xvCO5gwp+4MUr1XP1AJIox1e6t1SO+j7IQjiF2ocx2r7eFE5QC7w== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-openapi-2" "^1.10.2" + "@swagger-api/apidom-parser-adapter-json" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-openapi-json-3-0@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.10.2.tgz#80c16b46d5ef355848d7cc5ab57aec589ada20e1" + integrity sha512-3ieUeX8/WywkUzdOO1U1QKQDNmpZFfOeTAeb4ISDd/PKOVwuEx/b0w5I8EuOu97tKAe3UUesEdii+pJlkcFlFw== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-openapi-3-0" "^1.10.2" + "@swagger-api/apidom-parser-adapter-json" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-openapi-json-3-1@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.10.2.tgz#58e2342896bc7a270d5b6cd5951b7b2536b7502e" + integrity sha512-z0c7IgMPLSDhE+ldTb54Xlhq+yPF0w/8LHXyeHX4V6BS1VG3Utb+mM/qTVfy1Eo+p1KGNlwNDEPsBp6jIaVb5Q== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-openapi-3-1" "^1.10.2" + "@swagger-api/apidom-parser-adapter-json" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-openapi-json-3-2@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-json-3-2/-/apidom-parser-adapter-openapi-json-3-2-1.10.2.tgz#ec4ed3b67067a1ba3f48432feb02316a25453dc5" + integrity sha512-bx/kEIXWtpHu+4LEiyNdt0v8ER5EVwPjhQdlpOaC5qghnRH9aUYOTawZtVHsNHAQWTIMNn9DdPKYQgttQKD0Pw== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-openapi-3-2" "^1.10.2" + "@swagger-api/apidom-parser-adapter-json" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-openapi-yaml-2@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.10.2.tgz#9156fd645e4c262fb7d40a5a1893c933b9c4e2ff" + integrity sha512-e86JUXHGGEVsO4/xpy/GRSvYXGN30hLt1lMUhjzCFuE95N6/K3hmQHE3rA/H7ot1ajCWUhzukW5rGQac79NIjA== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-openapi-2" "^1.10.2" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.10.2.tgz#311050d1aaeae227773c8487f3210acd02b6f209" + integrity sha512-ucfc13Ai31tJ0ruAm1YiHhqENgcBuiOXL00OhoICWA56ggAcnA5WfWmvtsXVMlZsTHVbhZP3XpsH5rui2N8u5w== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-openapi-3-0" "^1.10.2" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.10.2.tgz#5d50ae20d9dbb4f23edfa2042deb3ec9ea3516e6" + integrity sha512-7o8j93qgf9yYAaaJ/GpH+5sB3fC9EmvmjTCqlw5YWXp+cRgCn9q7f80Sv4+NjbracUafB6qL4i9F/m+Xs0XZaQ== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-openapi-3-1" "^1.10.2" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-2@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-yaml-3-2/-/apidom-parser-adapter-openapi-yaml-3-2-1.10.2.tgz#0b8e12e981cfb2361fb7317342897c7484fc706a" + integrity sha512-blDIeVmo8bpXYV/C+b6PYi54yS+5jPEZTFsK5jQ2NzpCPrkBPacp/KTuHBUBzJsYj4bj/ivRL3+JXGw4YovUHw== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-ns-openapi-3-2" "^1.10.2" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^1.10.2" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + +"@swagger-api/apidom-parser-adapter-yaml-1-2@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.10.2.tgz#d723a5f2668e5eb4aa0428f4045c3bca157b90c6" + integrity sha512-I5eCls8XS3SVEwH/cuL6T3iar1TPaFYh3gXwS/2rzP1aZQNKSHDP3y3ney7nAomKG4dFvE8Q248FL36arG7T/w== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-ast" "^1.10.2" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-error" "^1.10.2" + "@tree-sitter-grammars/tree-sitter-yaml" "=0.7.1" + "@types/ramda" "~0.30.0" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" + tree-sitter "=0.22.4" + web-tree-sitter "=0.24.5" + +"@swagger-api/apidom-reference@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-reference/-/apidom-reference-1.10.2.tgz#82069138540116c35ec782a5395c41ced7b20942" + integrity sha512-H5UqOmae9CXdiLJbbh1j+/hwvcECmr6ci2XtUKTQpFviemvsIDZmPV1DKUAxCfzGr2iOkDO6SZc+/OEWlETqiQ== + dependencies: + "@babel/runtime-corejs3" "^7.26.10" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-error" "^1.10.2" + "@types/ramda" "~0.30.0" + axios "^1.15.0" + minimatch "^10.2.1" + ramda "~0.30.0" + ramda-adjunct "^5.0.0" optionalDependencies: - "@swagger-api/apidom-error" "^0.93.0" - "@swagger-api/apidom-json-pointer" "^0.93.0" - "@swagger-api/apidom-ns-asyncapi-2" "^0.93.0" - "@swagger-api/apidom-ns-openapi-2" "^0.93.0" - "@swagger-api/apidom-ns-openapi-3-0" "^0.93.0" - "@swagger-api/apidom-ns-openapi-3-1" "^0.93.0" - "@swagger-api/apidom-ns-workflows-1" "^0.93.0" - "@swagger-api/apidom-parser-adapter-api-design-systems-json" "^0.93.0" - "@swagger-api/apidom-parser-adapter-api-design-systems-yaml" "^0.93.0" - "@swagger-api/apidom-parser-adapter-asyncapi-json-2" "^0.93.0" - "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2" "^0.93.0" - "@swagger-api/apidom-parser-adapter-json" "^0.93.0" - "@swagger-api/apidom-parser-adapter-openapi-json-2" "^0.93.0" - "@swagger-api/apidom-parser-adapter-openapi-json-3-0" "^0.93.0" - "@swagger-api/apidom-parser-adapter-openapi-json-3-1" "^0.93.0" - "@swagger-api/apidom-parser-adapter-openapi-yaml-2" "^0.93.0" - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0" "^0.93.0" - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1" "^0.93.0" - "@swagger-api/apidom-parser-adapter-workflows-json-1" "^0.93.0" - "@swagger-api/apidom-parser-adapter-workflows-yaml-1" "^0.93.0" - "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.93.0" - -"@swc/core-darwin-arm64@1.3.107": - version "1.3.107" - resolved "https://registry.npmmirror.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.107.tgz#abac4c19816751de1dcbaab456710ca55e580782" - integrity sha512-47tD/5vSXWxPd0j/ZllyQUg4bqalbQTsmqSw0J4dDdS82MWqCAwUErUrAZPRjBkjNQ6Kmrf5rpCWaGTtPw+ngw== - -"@swc/core-darwin-x64@1.3.107": - version "1.3.107" - resolved "https://registry.npmmirror.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.107.tgz#4c0df233ebf293429cd2f10224d6a870a5cc019e" - integrity sha512-hwiLJ2ulNkBGAh1m1eTfeY1417OAYbRGcb/iGsJ+LuVLvKAhU/itzsl535CvcwAlt2LayeCFfcI8gdeOLeZa9A== - -"@swc/core-linux-arm-gnueabihf@1.3.107": - version "1.3.107" - resolved "https://registry.npmmirror.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.107.tgz#81004cca4c7554007ea5ac51e276147e958e3e9f" - integrity sha512-I2wzcC0KXqh0OwymCmYwNRgZ9nxX7DWnOOStJXV3pS0uB83TXAkmqd7wvMBuIl9qu4Hfomi9aDM7IlEEn9tumQ== - -"@swc/core-linux-arm64-gnu@1.3.107": - version "1.3.107" - resolved "https://registry.npmmirror.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.107.tgz#c01d75df662067fb7805bfdfa66c2f17f2b3185f" - integrity sha512-HWgnn7JORYlOYnGsdunpSF8A+BCZKPLzLtEUA27/M/ZuANcMZabKL9Zurt7XQXq888uJFAt98Gy+59PU90aHKg== - -"@swc/core-linux-arm64-musl@1.3.107": - version "1.3.107" - resolved "https://registry.npmmirror.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.107.tgz#5e0c4fe3fcc49a7bb77ffafa680622e53c982e0a" - integrity sha512-vfPF74cWfAm8hyhS8yvYI94ucMHIo8xIYU+oFOW9uvDlGQRgnUf/6DEVbLyt/3yfX5723Ln57U8uiMALbX5Pyw== - -"@swc/core-linux-x64-gnu@1.3.107": - version "1.3.107" - resolved "https://registry.npmmirror.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.107.tgz#afb4a656a1717170b2c8b76c9b2349b5077630b4" - integrity sha512-uBVNhIg0ip8rH9OnOsCARUFZ3Mq3tbPHxtmWk9uAa5u8jQwGWeBx5+nTHpDOVd3YxKb6+5xDEI/edeeLpha/9g== - -"@swc/core-linux-x64-musl@1.3.107": - version "1.3.107" - resolved "https://registry.npmmirror.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.107.tgz#3f9bce2fe13691be39fddc39bba8558fe6308823" - integrity sha512-mvACkUvzSIB12q1H5JtabWATbk3AG+pQgXEN95AmEX2ZA5gbP9+B+mijsg7Sd/3tboHr7ZHLz/q3SHTvdFJrEw== - -"@swc/core-win32-arm64-msvc@1.3.107": - version "1.3.107" - resolved "https://registry.npmmirror.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.107.tgz#5b485e9ce2de6f27ce2fbc1ba8c0b4e98009318d" - integrity sha512-J3P14Ngy/1qtapzbguEH41kY109t6DFxfbK4Ntz9dOWNuVY3o9/RTB841ctnJk0ZHEG+BjfCJjsD2n8H5HcaOA== - -"@swc/core-win32-ia32-msvc@1.3.107": - version "1.3.107" - resolved "https://registry.npmmirror.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.107.tgz#1bbe3ce6784b3e4203bf89443c33411c27389b56" - integrity sha512-ZBUtgyjTHlz8TPJh7kfwwwFma+ktr6OccB1oXC8fMSopD0AxVnQasgun3l3099wIsAB9eEsJDQ/3lDkOLs1gBA== - -"@swc/core-win32-x64-msvc@1.3.107": - version "1.3.107" - resolved "https://registry.npmmirror.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.107.tgz#c89640b16504ddda1f1faf573a7ed7193dc87485" - integrity sha512-Eyzo2XRqWOxqhE1gk9h7LWmUf4Bp4Xn2Ttb0ayAXFp6YSTxQIThXcT9kipXZqcpxcmDwoq8iWbbf2P8XL743EA== - -"@swc/core@^1.3.46": - version "1.3.107" - resolved "https://registry.npmmirror.com/@swc/core/-/core-1.3.107.tgz#081697224ec3bffa63c33209d242e4f0b2c49e78" - integrity sha512-zKhqDyFcTsyLIYK1iEmavljZnf4CCor5pF52UzLAz4B6Nu/4GLU+2LQVAf+oRHjusG39PTPjd2AlRT3f3QWfsQ== - dependencies: - "@swc/counter" "^0.1.1" - "@swc/types" "^0.1.5" + "@swagger-api/apidom-json-pointer" "^1.10.2" + "@swagger-api/apidom-ns-arazzo-1" "^1.10.2" + "@swagger-api/apidom-ns-asyncapi-2" "^1.10.2" + "@swagger-api/apidom-ns-openapi-2" "^1.10.2" + "@swagger-api/apidom-ns-openapi-3-0" "^1.10.2" + "@swagger-api/apidom-ns-openapi-3-1" "^1.10.2" + "@swagger-api/apidom-ns-openapi-3-2" "^1.10.2" + "@swagger-api/apidom-parser-adapter-api-design-systems-json" "^1.10.2" + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml" "^1.10.2" + "@swagger-api/apidom-parser-adapter-arazzo-json-1" "^1.10.2" + "@swagger-api/apidom-parser-adapter-arazzo-yaml-1" "^1.10.2" + "@swagger-api/apidom-parser-adapter-asyncapi-json-2" "^1.10.2" + "@swagger-api/apidom-parser-adapter-asyncapi-json-3" "^1.10.2" + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2" "^1.10.2" + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-3" "^1.10.2" + "@swagger-api/apidom-parser-adapter-json" "^1.10.2" + "@swagger-api/apidom-parser-adapter-openapi-json-2" "^1.10.2" + "@swagger-api/apidom-parser-adapter-openapi-json-3-0" "^1.10.2" + "@swagger-api/apidom-parser-adapter-openapi-json-3-1" "^1.10.2" + "@swagger-api/apidom-parser-adapter-openapi-json-3-2" "^1.10.2" + "@swagger-api/apidom-parser-adapter-openapi-yaml-2" "^1.10.2" + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0" "^1.10.2" + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1" "^1.10.2" + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-2" "^1.10.2" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^1.10.2" + +"@swaggerexpert/cookie@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@swaggerexpert/cookie/-/cookie-2.0.2.tgz#2b1bc2b5082955372539ce3f2b52c35831b32ef8" + integrity sha512-DPI8YJ0Vznk4CT+ekn3rcFNq1uQwvUHZhH6WvTSPD0YKBIlMS9ur2RYKghXuxxOiqOam/i4lHJH4xTIiTgs3Mg== + dependencies: + apg-lite "^1.0.3" + +"@swaggerexpert/json-pointer@^2.10.1": + version "2.10.2" + resolved "https://registry.yarnpkg.com/@swaggerexpert/json-pointer/-/json-pointer-2.10.2.tgz#3f4f8082f166e77021113a401f1f2c4e4b45d574" + integrity sha512-qMx1nOrzoB+PF+pzb26Q4Tc2sOlrx9Ba2UBNX9hB31Omrq+QoZ2Gly0KLrQWw4Of1AQ4J9lnD+XOdwOdcdXqqw== + dependencies: + apg-lite "^1.0.4" + +"@swc/core-darwin-arm64@1.15.30": + version "1.15.30" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.30.tgz#23447f1c30c9155fe35602de4392b4ecfa0a54cc" + integrity sha512-VvpP+vq08HmGYewMWvrdsxh9s2lthz/808zXm8Yu5kaqeR8Yia2b0eYXleHQ3VAjoStUDk6LzTheBW9KXYQdMA== + +"@swc/core-darwin-x64@1.15.30": + version "1.15.30" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.15.30.tgz#16e6e35fff5b07c712d8af44783da59ac64ad5cf" + integrity sha512-WiJA0hiZI3nwQAO6mu5RqigtWGDtth4Hiq6rbZxAaQyhIcqKIg5IoMRc1Y071lrNJn29eEDMC86Rq58xgUxlDg== + +"@swc/core-linux-arm-gnueabihf@1.15.30": + version "1.15.30" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.30.tgz#abce7de734301109a7df23c22f6b6d233e3b9de9" + integrity sha512-YANuFUo48kIT6plJgCD0keae9HFXfjxsbvsgevqc0hr/07X/p7sAWTFOGYEc2SXcASaK7UvuQqzlbW8pr7R79g== + +"@swc/core-linux-arm64-gnu@1.15.30": + version "1.15.30" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.30.tgz#9a4e418cdbbfe64506dd12469a553c07e1924fef" + integrity sha512-VndG8jaR4ugY6u+iVOT0Q+d2fZd7sLgjPgN8W/Le+3EbZKl+cRfFxV7Eoz4gfLqhmneZPdcIzf9T3LkgkmqNLg== + +"@swc/core-linux-arm64-musl@1.15.30": + version "1.15.30" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.30.tgz#4cd68ccb2af71c3ec539b15aa15c8fd304833d26" + integrity sha512-1SYGs2l0Yyyi0pR/P/NKz/x0kqxkoiw+BXeJjLUdecSk/KasncWlJrc6hOvFSgKHOBrzgM5jwuluKtlT8dnrcA== + +"@swc/core-linux-ppc64-gnu@1.15.30": + version "1.15.30" + resolved "https://registry.yarnpkg.com/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.30.tgz#561997d3c5f392db7e3473cb4bbc43e6d6b1160c" + integrity sha512-TXREtiXeRhbfDFbmhnkIsXpKfzbfT73YkV2ZF6w0sfxgjC5zI2ZAbaCOq25qxvegofj2K93DtOpm9RLaBgqR2g== + +"@swc/core-linux-s390x-gnu@1.15.30": + version "1.15.30" + resolved "https://registry.yarnpkg.com/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.30.tgz#d6f1d5dceca794909305584cb69f80dd91820410" + integrity sha512-DCR2YYeyd6DQE4OuDhImouuNcjXEiEdnn1Y0DyGteugPEDvVuvYk8Xddi+4o2SgWH6jiW8/I+3emZvbep1NC+g== + +"@swc/core-linux-x64-gnu@1.15.30": + version "1.15.30" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.30.tgz#c3e91c60f265a62cec60145f0d2d931feb1cf41a" + integrity sha512-5Pizw3NgfOJ5BJOBK8TIRa59xFW2avESTOBDPTAYwZYa1JNDs+KMF9lUfjJiJLM5HiMs/wPheA9eiT0q9m2AoA== + +"@swc/core-linux-x64-musl@1.15.30": + version "1.15.30" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.30.tgz#3fd112e617a951438f73930b514adf19375067fb" + integrity sha512-qyqydP/wyH8alcIP4a2hnGSjHLJjm9H7yDFup+CPy9oTahFgLLwnNcv5UHXqO2Qs3AIND+cls5f/Bb6hqpxdgA== + +"@swc/core-win32-arm64-msvc@1.15.30": + version "1.15.30" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.30.tgz#d005dce92e4ec1b0a7898667c9cf5e5215e4631c" + integrity sha512-CaQENgDHVGOg1mSF5sQVgvfFHG9kjMor2rkLMLeLOkfZYNj13ppnJ9+lfaBZLZUMMbnlGQnavCJb8PVBUOso7Q== + +"@swc/core-win32-ia32-msvc@1.15.30": + version "1.15.30" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.30.tgz#67ebfaa22266835a3d82776014c2f428346062bd" + integrity sha512-30VdLeGk6fugiUs/kUdJ/pAg7z/zpvVbR11RH60jZ0Z42WIeIniYx0rLEWN7h/pKJ3CopqsQ3RsogCAkRKiA2g== + +"@swc/core-win32-x64-msvc@1.15.30": + version "1.15.30" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.30.tgz#cb602b53f9cdcdfb580cecdb02b536339d4b004b" + integrity sha512-4iObHPR+Q4oDY110EF5SF5eIaaVJNpMdG9C0q3Q92BsJ5y467uHz7sYQhP60WYlLFsLQ1el2YrIPUItUAQGOKg== + +"@swc/core@^1.15.6": + version "1.15.30" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.15.30.tgz#2f77d5ed3b0df964aac8aaa251dc43ed822100cc" + integrity sha512-R8VQbQY1BZcbIF2p3gjlTCwAQzx1A194ugWfwld5y+WgVVWqVKm7eURGGOVbQVubgKWzidP2agomBbg96rZilQ== + dependencies: + "@swc/counter" "^0.1.3" + "@swc/types" "^0.1.26" optionalDependencies: - "@swc/core-darwin-arm64" "1.3.107" - "@swc/core-darwin-x64" "1.3.107" - "@swc/core-linux-arm-gnueabihf" "1.3.107" - "@swc/core-linux-arm64-gnu" "1.3.107" - "@swc/core-linux-arm64-musl" "1.3.107" - "@swc/core-linux-x64-gnu" "1.3.107" - "@swc/core-linux-x64-musl" "1.3.107" - "@swc/core-win32-arm64-msvc" "1.3.107" - "@swc/core-win32-ia32-msvc" "1.3.107" - "@swc/core-win32-x64-msvc" "1.3.107" - -"@swc/counter@^0.1.1": - version "0.1.2" - resolved "https://registry.npmmirror.com/@swc/counter/-/counter-0.1.2.tgz#bf06d0770e47c6f1102270b744e17b934586985e" - integrity sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw== + "@swc/core-darwin-arm64" "1.15.30" + "@swc/core-darwin-x64" "1.15.30" + "@swc/core-linux-arm-gnueabihf" "1.15.30" + "@swc/core-linux-arm64-gnu" "1.15.30" + "@swc/core-linux-arm64-musl" "1.15.30" + "@swc/core-linux-ppc64-gnu" "1.15.30" + "@swc/core-linux-s390x-gnu" "1.15.30" + "@swc/core-linux-x64-gnu" "1.15.30" + "@swc/core-linux-x64-musl" "1.15.30" + "@swc/core-win32-arm64-msvc" "1.15.30" + "@swc/core-win32-ia32-msvc" "1.15.30" + "@swc/core-win32-x64-msvc" "1.15.30" + +"@swc/counter@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== "@swc/helpers@^0.5.0": version "0.5.3" @@ -9795,25 +11178,35 @@ dependencies: tslib "^2.4.0" -"@swc/jest@^0.2.22": - version "0.2.31" - resolved "https://registry.npmmirror.com/@swc/jest/-/jest-0.2.31.tgz#eb791d917326c24cad84c4d357d0b01de23c6dfd" - integrity sha512-Gh0Ste380O8KUY1IqsKr+aOvqqs2Loa+WcWWVNwl+lhXqOWK1iTFAP1K0IDfLqAuFP68+D/PxcpBJn21e6Quvw== +"@swc/helpers@^0.5.17", "@swc/helpers@^0.5.8": + version "0.5.21" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.21.tgz#0b1b020317ee1282860ca66f7e9a7c7790f05ae0" + integrity sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg== + dependencies: + tslib "^2.8.0" + +"@swc/jest@^0.2.39": + version "0.2.39" + resolved "https://registry.yarnpkg.com/@swc/jest/-/jest-0.2.39.tgz#482bee0adb0726fab1487a4f902a278ec563a6b7" + integrity sha512-eyokjOwYd0Q8RnMHri+8/FS1HIrIUKK/sRrFp8c1dThUOfNeCWbLmBP1P5VsKdvmkd25JaH+OKYwEYiAYg9YAA== dependencies: - "@jest/create-cache-key-function" "^29.7.0" + "@jest/create-cache-key-function" "^30.0.0" + "@swc/counter" "^0.1.3" jsonc-parser "^3.2.0" -"@swc/types@^0.1.5": - version "0.1.5" - resolved "https://registry.npmmirror.com/@swc/types/-/types-0.1.5.tgz#043b731d4f56a79b4897a3de1af35e75d56bc63a" - integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw== +"@swc/types@^0.1.26": + version "0.1.26" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.26.tgz#2a976a1870caef1992316dda1464150ee36968b5" + integrity sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw== + dependencies: + "@swc/counter" "^0.1.3" -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.npmmirror.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== +"@tanstack/react-table@^8.21.3": + version "8.21.3" + resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.21.3.tgz#2c38c747a5731c1a07174fda764b9c2b1fb5e91b" + integrity sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww== dependencies: - defer-to-connect "^2.0.0" + "@tanstack/table-core" "8.21.3" "@tanstack/react-virtual@^3.0.0-beta.60": version "3.0.2" @@ -9822,11 +11215,95 @@ dependencies: "@tanstack/virtual-core" "3.0.0" +"@tanstack/table-core@8.21.3": + version "8.21.3" + resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.21.3.tgz#2977727d8fc8dfa079112d9f4d4c019110f1732c" + integrity sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg== + "@tanstack/virtual-core@3.0.0": version "3.0.0" resolved "https://registry.npmmirror.com/@tanstack/virtual-core/-/virtual-core-3.0.0.tgz#637bee36f0cabf96a1d436887c90f138a7e9378b" integrity sha512-SYXOBTjJb05rXa2vl55TTwO40A6wKu0R5i1qQwhJYNDIqaIGF7D0HsLw+pJAyi2OvntlEIVusx3xtbbgSUi6zg== +"@terasky/backstage-plugin-kro-common@^0.2.1": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@terasky/backstage-plugin-kro-common/-/backstage-plugin-kro-common-0.2.9.tgz#9f508b62209b80e6d8e2a3b3fc574a6cf607bd1f" + integrity sha512-BwP0OZxLyajjHrlN3wRK1UuGffbrVMxbBA8Zs70DxsuiU2iMMVARUuCYK+TsfYBpsxZXfjnKj6MPcvG1zSSB9w== + dependencies: + "@backstage/plugin-permission-common" "^0.9.5" + +"@terasky/backstage-plugin-kro-resources-backend@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@terasky/backstage-plugin-kro-resources-backend/-/backstage-plugin-kro-resources-backend-0.2.1.tgz#c2432df3d5e4bd9209ddc716c5182bd326d4604b" + integrity sha512-g11Ef6vWGOfQHdt6f2hQ+ef1ObLNvYFgCPKOO1tka+G9737gK3ak/gxqotJuINrSbavcp3DmeR1DFe5ZGRAdrg== + dependencies: + "@backstage/backend-defaults" "^0.12.1" + "@backstage/backend-plugin-api" "^1.4.3" + "@backstage/config" "^1.3.4" + "@backstage/plugin-permission-node" "^0.10.4" + "@terasky/backstage-plugin-kro-common" "^0.2.1" + "@types/express" "^4.17.22" + express "^4.17.1" + express-promise-router "^4.1.1" + node-fetch "^2.7.0" + winston "^3.2.1" + yn "^4.0.0" + +"@terasky/backstage-plugin-kro-resources-frontend@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@terasky/backstage-plugin-kro-resources-frontend/-/backstage-plugin-kro-resources-frontend-0.2.1.tgz#e9c7b88f7b8924eeaca1b6d689a2c2b1c27cd11e" + integrity sha512-IREMUG1NCOLCohsX49+od5JqagT8SiuQ98zebm5cf9hBj5umzVDq+OAULsBj/tlwPrQjhWQsf7RF512nR9zrNg== + dependencies: + "@backstage/catalog-model" "^1.7.5" + "@backstage/core-components" "^0.18.1" + "@backstage/core-plugin-api" "^1.11.0" + "@backstage/frontend-plugin-api" "^0.12.0" + "@backstage/plugin-catalog-react" "^1.21.1" + "@backstage/plugin-kubernetes" "^0.12.11" + "@backstage/plugin-kubernetes-react" "^0.5.11" + "@backstage/plugin-permission-common" "^0.9.1" + "@backstage/plugin-permission-react" "^0.4.36" + "@backstage/theme" "^0.6.8" + "@material-ui/core" "^4.12.4" + "@material-ui/icons" "^4.11.3" + "@material-ui/lab" "^4.0.0-alpha.61" + "@terasky/backstage-plugin-kro-common" "^0.2.1" + "@types/pluralize" "^0.0.33" + dagre "^0.8.5" + file-saver "^2.0.5" + js-yaml "^4.1.0" + pluralize "^8.0.0" + react-copy-to-clipboard "^5.1.0" + react-flow-renderer "^10.3.17" + react-json-view "^1.21.3" + react-syntax-highlighter "^15.6.1" + react-use "^17.6.0" + +"@terasky/backstage-plugin-kubernetes-ingestor@^2.2.0": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@terasky/backstage-plugin-kubernetes-ingestor/-/backstage-plugin-kubernetes-ingestor-2.9.1.tgz#4b45f523442e46ec083f9b2800370e60146a7446" + integrity sha512-rfzzFlOsfPMCr9/9kIdo+dQc7LYLC7D++/MDFRxC+cKO2NKbglYNOjdgxoXNSRCI48jCB/nGCq4ZlKtViHPYzg== + dependencies: + "@backstage/backend-defaults" "^0.13.1" + "@backstage/backend-plugin-api" "^1.5.0" + "@backstage/catalog-client" "^1.12.1" + "@backstage/catalog-model" "^1.7.6" + "@backstage/config" "^1.3.6" + "@backstage/plugin-catalog-import" "^0.13.7" + "@backstage/plugin-catalog-node" "^1.20.0" + "@backstage/plugin-kubernetes" "^0.12.13" + "@backstage/plugin-kubernetes-backend" "^0.20.4" + "@backstage/plugin-kubernetes-common" "^0.9.8" + "@backstage/plugin-kubernetes-node" "^0.3.6" + "@backstage/plugin-permission-common" "^0.9.3" + "@backstage/plugin-signals-node" "^0.1.26" + "@types/pluralize" "^0.0.33" + express "^4.17.1" + express-promise-router "^4.1.1" + js-yaml "^4.1.0" + node-fetch "^2.7.0" + pluralize "^8.0.0" + "@testing-library/dom@^8.0.0": version "8.20.1" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.1.tgz#2e52a32e46fc88369eef7eef634ac2a192decd9f" @@ -9902,6 +11379,13 @@ "@testing-library/dom" "^9.0.0" "@types/react-dom" "^18.0.0" +"@testing-library/react@^16.0.0": + version "16.3.2" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.3.2.tgz#672883b7acb8e775fc0492d9e9d25e06e89786d0" + integrity sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/user-event@^14.0.0": version "14.5.2" resolved "https://registry.npmmirror.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd" @@ -9912,16 +11396,24 @@ resolved "https://registry.npmmirror.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - "@tootallnate/once@2": version "2.0.0" resolved "https://registry.npmmirror.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@tootallnate/quickjs-emscripten@^0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" + integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== + +"@tree-sitter-grammars/tree-sitter-yaml@=0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@tree-sitter-grammars/tree-sitter-yaml/-/tree-sitter-yaml-0.7.1.tgz#9fcf9c56c7b4adb19097f869ada29c2d7a62c93d" + integrity sha512-AynBwkIoQCTgjDR33bDUp9Mqq+YTco0is3n5hRApMqG9of/6A4eQsfC1/uSEeHSUyMQSYawcAWamsexnVpIP4Q== + dependencies: + node-addon-api "^8.3.1" + node-gyp-build "^4.8.4" + "@trendyol-js/openstack-swift-sdk@^0.0.7": version "0.0.7" resolved "https://registry.npmmirror.com/@trendyol-js/openstack-swift-sdk/-/openstack-swift-sdk-0.0.7.tgz#45ba1dbfd1ccd3df263b25981a4d563943e1766d" @@ -9937,6 +11429,15 @@ resolved "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== +"@ts-morph/common@~0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.25.0.tgz#b76cbd517118acc8eadaf12b2fc2d47f42923452" + integrity sha512-kMnZz+vGGHi4GoHnLmMhGNjm44kGtKUXGnOvrKmMwAuvNjM/PgKVGfUnL7IDvK7Jb2QQ82jq3Zmp04Gy+r3Dkg== + dependencies: + minimatch "^9.0.4" + path-browserify "^1.0.1" + tinyglobby "^0.2.9" + "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.npmmirror.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" @@ -9957,18 +11458,12 @@ resolved "https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@tufjs/canonical-json@1.0.0": - version "1.0.0" - resolved "https://registry.npmmirror.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" - integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== - -"@tufjs/models@1.0.4": - version "1.0.4" - resolved "https://registry.npmmirror.com/@tufjs/models/-/models-1.0.4.tgz#5a689630f6b9dbda338d4b208019336562f176ef" - integrity sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A== +"@tybys/wasm-util@^0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414" + integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg== dependencies: - "@tufjs/canonical-json" "1.0.0" - minimatch "^9.0.0" + tslib "^2.4.0" "@types/aria-query@^5.0.1": version "5.0.4" @@ -9980,39 +11475,6 @@ resolved "https://registry.npmmirror.com/@types/aws-lambda/-/aws-lambda-8.10.133.tgz#cc21de2edc623f0fd9a5290674c4b9f30971bc58" integrity sha512-sr852MAL/79rjDelXP6ZuJ6GwOvXIRrFAoC8a+w91mZ5XR71CuzSgo1d0+pG1qgfPhjFgaibu7SWaoC5BA7pyQ== -"@types/babel__core@^7.1.14": - version "7.20.5" - resolved "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" - integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.4" - resolved "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" - integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.5" - resolved "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" - integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== - dependencies: - "@babel/types" "^7.20.7" - "@types/body-parser@*": version "1.19.5" resolved "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" @@ -10033,16 +11495,6 @@ resolved "https://registry.npmmirror.com/@types/btoa-lite/-/btoa-lite-1.0.2.tgz#82bb6aab00abf7cff3ca2825abe010c0cd536ae5" integrity sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg== -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.npmmirror.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - "@types/caseless@*": version "0.12.5" resolved "https://registry.npmmirror.com/@types/caseless/-/caseless-0.12.5.tgz#db9468cb1b1b5a925b8f34822f1669df0c5472f5" @@ -10077,6 +11529,11 @@ dependencies: "@types/node" "*" +"@types/content-type@^1.1.8": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@types/content-type/-/content-type-1.1.9.tgz#a0240a8141b33549ac0ca6847f4b801580012bca" + integrity sha512-Hq9IMnfekuOCsEmYl4QX2HBrT+XsfXiupfrLLY8Dcf3Puf4BkBOxSbWYTITSOQAhJoYPBez+b4MJRpIYL65z8A== + "@types/cookie@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" @@ -10094,6 +11551,216 @@ dependencies: "@types/node" "*" +"@types/d3-array@*": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-3.2.2.tgz#e02151464d02d4a1b44646d0fcdb93faf88fde8c" + integrity sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw== + +"@types/d3-axis@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-axis/-/d3-axis-3.0.6.tgz#e760e5765b8188b1defa32bc8bb6062f81e4c795" + integrity sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-brush@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-brush/-/d3-brush-3.0.6.tgz#c2f4362b045d472e1b186cdbec329ba52bdaee6c" + integrity sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-chord@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-chord/-/d3-chord-3.0.6.tgz#1706ca40cf7ea59a0add8f4456efff8f8775793d" + integrity sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg== + +"@types/d3-color@*": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-3.1.3.tgz#368c961a18de721da8200e80bf3943fb53136af2" + integrity sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A== + +"@types/d3-contour@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-contour/-/d3-contour-3.0.6.tgz#9ada3fa9c4d00e3a5093fed0356c7ab929604231" + integrity sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg== + dependencies: + "@types/d3-array" "*" + "@types/geojson" "*" + +"@types/d3-delaunay@*": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz#185c1a80cc807fdda2a3fe960f7c11c4a27952e1" + integrity sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw== + +"@types/d3-dispatch@*": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz#ef004d8a128046cfce434d17182f834e44ef95b2" + integrity sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA== + +"@types/d3-drag@*": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/d3-drag/-/d3-drag-3.0.7.tgz#b13aba8b2442b4068c9a9e6d1d82f8bcea77fc02" + integrity sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-dsv@*": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/d3-dsv/-/d3-dsv-3.0.7.tgz#0a351f996dc99b37f4fa58b492c2d1c04e3dac17" + integrity sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g== + +"@types/d3-ease@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-3.0.2.tgz#e28db1bfbfa617076f7770dd1d9a48eaa3b6c51b" + integrity sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA== + +"@types/d3-fetch@*": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/d3-fetch/-/d3-fetch-3.0.7.tgz#c04a2b4f23181aa376f30af0283dbc7b3b569980" + integrity sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA== + dependencies: + "@types/d3-dsv" "*" + +"@types/d3-force@*": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@types/d3-force/-/d3-force-3.0.10.tgz#6dc8fc6e1f35704f3b057090beeeb7ac674bff1a" + integrity sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw== + +"@types/d3-format@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-3.0.4.tgz#b1e4465644ddb3fdf3a263febb240a6cd616de90" + integrity sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g== + +"@types/d3-geo@*": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/d3-geo/-/d3-geo-3.1.0.tgz#b9e56a079449174f0a2c8684a9a4df3f60522440" + integrity sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ== + dependencies: + "@types/geojson" "*" + +"@types/d3-hierarchy@*": + version "3.1.7" + resolved "https://registry.yarnpkg.com/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz#6023fb3b2d463229f2d680f9ac4b47466f71f17b" + integrity sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg== + +"@types/d3-interpolate@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz#412b90e84870285f2ff8a846c6eb60344f12a41c" + integrity sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA== + dependencies: + "@types/d3-color" "*" + +"@types/d3-path@*": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.1.1.tgz#f632b380c3aca1dba8e34aa049bcd6a4af23df8a" + integrity sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg== + +"@types/d3-polygon@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/d3-polygon/-/d3-polygon-3.0.2.tgz#dfae54a6d35d19e76ac9565bcb32a8e54693189c" + integrity sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA== + +"@types/d3-quadtree@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz#d4740b0fe35b1c58b66e1488f4e7ed02952f570f" + integrity sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg== + +"@types/d3-random@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/d3-random/-/d3-random-3.0.3.tgz#ed995c71ecb15e0cd31e22d9d5d23942e3300cfb" + integrity sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ== + +"@types/d3-scale-chromatic@*": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz#dc6d4f9a98376f18ea50bad6c39537f1b5463c39" + integrity sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ== + +"@types/d3-scale@*": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-4.0.9.tgz#57a2f707242e6fe1de81ad7bfcccaaf606179afb" + integrity sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw== + dependencies: + "@types/d3-time" "*" + +"@types/d3-selection@*": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-3.0.11.tgz#bd7a45fc0a8c3167a631675e61bc2ca2b058d4a3" + integrity sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w== + +"@types/d3-shape@*": + version "3.1.8" + resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-3.1.8.tgz#d1516cc508753be06852cd06758e3bb54a22b0e3" + integrity sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w== + dependencies: + "@types/d3-path" "*" + +"@types/d3-time-format@*": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/d3-time-format/-/d3-time-format-4.0.3.tgz#d6bc1e6b6a7db69cccfbbdd4c34b70632d9e9db2" + integrity sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg== + +"@types/d3-time@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-3.0.4.tgz#8472feecd639691450dd8000eb33edd444e1323f" + integrity sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g== + +"@types/d3-timer@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-3.0.2.tgz#70bbda77dc23aa727413e22e214afa3f0e852f70" + integrity sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw== + +"@types/d3-transition@*": + version "3.0.9" + resolved "https://registry.yarnpkg.com/@types/d3-transition/-/d3-transition-3.0.9.tgz#1136bc57e9ddb3c390dccc9b5ff3b7d2b8d94706" + integrity sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-zoom@*": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@types/d3-zoom/-/d3-zoom-3.0.8.tgz#dccb32d1c56b1e1c6e0f1180d994896f038bc40b" + integrity sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw== + dependencies: + "@types/d3-interpolate" "*" + "@types/d3-selection" "*" + +"@types/d3@^7.4.0": + version "7.4.3" + resolved "https://registry.yarnpkg.com/@types/d3/-/d3-7.4.3.tgz#d4550a85d08f4978faf0a4c36b848c61eaac07e2" + integrity sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww== + dependencies: + "@types/d3-array" "*" + "@types/d3-axis" "*" + "@types/d3-brush" "*" + "@types/d3-chord" "*" + "@types/d3-color" "*" + "@types/d3-contour" "*" + "@types/d3-delaunay" "*" + "@types/d3-dispatch" "*" + "@types/d3-drag" "*" + "@types/d3-dsv" "*" + "@types/d3-ease" "*" + "@types/d3-fetch" "*" + "@types/d3-force" "*" + "@types/d3-format" "*" + "@types/d3-geo" "*" + "@types/d3-hierarchy" "*" + "@types/d3-interpolate" "*" + "@types/d3-path" "*" + "@types/d3-polygon" "*" + "@types/d3-quadtree" "*" + "@types/d3-random" "*" + "@types/d3-scale" "*" + "@types/d3-scale-chromatic" "*" + "@types/d3-selection" "*" + "@types/d3-shape" "*" + "@types/d3-time" "*" + "@types/d3-time-format" "*" + "@types/d3-timer" "*" + "@types/d3-transition" "*" + "@types/d3-zoom" "*" + "@types/debug@^4.0.0", "@types/debug@^4.1.7": version "4.1.12" resolved "https://registry.npmmirror.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" @@ -10117,12 +11784,14 @@ "@types/docker-modem" "*" "@types/node" "*" -"@types/dompurify@^2.1.0": - version "2.4.0" - resolved "https://registry.npmmirror.com/@types/dompurify/-/dompurify-2.4.0.tgz#fd9706392a88e0e0e6d367f3588482d817df0ab9" - integrity sha512-IDBwO5IZhrKvHFUl+clZxgf3hn2b/lU6H1KaBShPkQyGJUQ0xwebezIPSuiyGwfz1UzJWQl4M7BDxtHtCCPlTg== +"@types/dockerode@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/dockerode/-/dockerode-4.0.1.tgz#26a44995a86322b4489090efd97890a5585a63a5" + integrity sha512-cmUpB+dPN955PxBEuXE3f6lKO1hHiIGYJA46IVF3BJpNsZGvtBDcRnlrHYHtOH/B6vtDOyl2kZ2ShAu3mgc27Q== dependencies: - "@types/trusted-types" "*" + "@types/docker-modem" "*" + "@types/node" "*" + "@types/ssh2" "*" "@types/es-aggregate-error@^1.0.2": version "1.0.6" @@ -10131,9 +11800,9 @@ dependencies: "@types/node" "*" -"@types/eslint-scope@^3.7.3": +"@types/eslint-scope@^3.7.7": version "3.7.7" - resolved "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== dependencies: "@types/eslint" "*" @@ -10155,11 +11824,16 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@1.0.5", "@types/estree@^1.0.0", "@types/estree@^1.0.5": +"@types/estree@*", "@types/estree@^1.0.0": version "1.0.5" resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/estree@1.0.8", "@types/estree@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33", "@types/express-serve-static-core@^4.17.5": version "4.17.42" resolved "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.42.tgz#2a276952acc73d1b8dc63fd4210647abbc553a71" @@ -10170,7 +11844,17 @@ "@types/range-parser" "*" "@types/send" "*" -"@types/express@*", "@types/express@^4.17.14", "@types/express@^4.17.17", "@types/express@^4.17.21", "@types/express@^4.17.6": +"@types/express-serve-static-core@^4.17.21": + version "4.19.8" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz#99b960322a4d576b239a640ab52ef191989b036f" + integrity sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^4.17.17", "@types/express@^4.17.21", "@types/express@^4.17.6": version "4.17.21" resolved "https://registry.npmmirror.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== @@ -10180,6 +11864,16 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/express@^4.17.22", "@types/express@^4.17.25": + version "4.17.25" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.25.tgz#070c8c73a6fee6936d65c195dbbfb7da5026649b" + integrity sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "^1" + "@types/fs-extra@^11.0.4": version "11.0.4" resolved "https://registry.npmmirror.com/@types/fs-extra/-/fs-extra-11.0.4.tgz#e16a863bb8843fba8c5004362b5a73e17becca45" @@ -10188,12 +11882,10 @@ "@types/jsonfile" "*" "@types/node" "*" -"@types/graceful-fs@^4.1.3": - version "4.1.9" - resolved "https://registry.npmmirror.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" +"@types/geojson@*": + version "7946.0.16" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.16.tgz#8ebe53d69efada7044454e3305c19017d97ced2a" + integrity sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg== "@types/hast@^2.0.0": version "2.3.9" @@ -10202,6 +11894,13 @@ dependencies: "@types/unist" "^2" +"@types/hast@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== + dependencies: + "@types/unist" "*" + "@types/hoist-non-react-statics@^3.3.0": version "3.3.5" resolved "https://registry.npmmirror.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" @@ -10215,11 +11914,6 @@ resolved "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== -"@types/http-cache-semantics@*": - version "4.0.4" - resolved "https://registry.npmmirror.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" - integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== - "@types/http-errors@*": version "2.0.4" resolved "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" @@ -10239,7 +11933,7 @@ dependencies: "@types/node" "*" -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.6": version "2.0.6" resolved "https://registry.npmmirror.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== @@ -10251,7 +11945,7 @@ dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^3.0.0": +"@types/istanbul-reports@^3.0.0", "@types/istanbul-reports@^3.0.4": version "3.0.4" resolved "https://registry.npmmirror.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== @@ -10266,14 +11960,6 @@ expect "^29.0.0" pretty-format "^29.0.0" -"@types/jest@^29.5.11": - version "29.5.12" - resolved "https://registry.npmmirror.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" - integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - "@types/js-cookie@^2.2.6": version "2.2.7" resolved "https://registry.npmmirror.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3" @@ -10286,19 +11972,10 @@ "@types/js-yaml@^4.0.1": version "4.0.9" - resolved "https://registry.npmmirror.com/@types/js-yaml/-/js-yaml-4.0.9.tgz#cd82382c4f902fed9691a2ed79ec68c5898af4c2" - integrity sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg== - -"@types/jsdom@^20.0.0": - version "20.0.1" - resolved "https://registry.npmmirror.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" - integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ== - dependencies: - "@types/node" "*" - "@types/tough-cookie" "*" - parse5 "^7.0.0" + resolved "https://registry.npmmirror.com/@types/js-yaml/-/js-yaml-4.0.9.tgz#cd82382c4f902fed9691a2ed79ec68c5898af4c2" + integrity sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg== -"@types/json-schema@*", "@types/json-schema@^7.0.11", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.11", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -10322,12 +11999,12 @@ dependencies: "@types/node" "*" -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.npmmirror.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== +"@types/keyv@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-4.2.0.tgz#65b97868ab757906f2dbb653590d7167ad023fa0" + integrity sha512-xoBtGl5R9jeKUhc8ZqeYaRDx04qqJ10yhhXYGmJ4Jr8qKpvMsDQQrNUvF/wUJ4klOtmJeJM+p2Xo3zp9uaC3tw== dependencies: - "@types/node" "*" + keyv "*" "@types/long@^4.0.0": version "4.0.2" @@ -10339,11 +12016,6 @@ resolved "https://registry.npmmirror.com/@types/lunr/-/lunr-2.3.7.tgz#378a98ecf7a9fafc42466f67f73173c34a6265a0" integrity sha512-Tb/kUm38e8gmjahQzdCKhbdsvQ9/ppzHFfsJ0dMs3ckqQsRj+P5IkSAwFTBrBxdyr3E/LoMUUrZngjDYAjiE3A== -"@types/luxon@^2.0.4": - version "2.4.0" - resolved "https://registry.npmmirror.com/@types/luxon/-/luxon-2.4.0.tgz#897d3abc23b68d78b69d76a12c21e01eb5adab95" - integrity sha512-oCavjEjRXuR6URJEtQm0eBdfsBiEcGBZbq21of8iGkeKxU1+1xgKuFPClaBZl2KB8ZZBSWlgk61tH6Mf+nvZVw== - "@types/luxon@^3.0.0", "@types/luxon@~3.4.0": version "3.4.2" resolved "https://registry.npmmirror.com/@types/luxon/-/luxon-3.4.2.tgz#e4fc7214a420173cea47739c33cdf10874694db7" @@ -10371,25 +12043,15 @@ resolved "https://registry.npmmirror.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== -"@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.npmmirror.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@types/minimist@^1.2.0": - version "1.2.5" - resolved "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" - integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== - "@types/ms@*": version "0.7.34" resolved "https://registry.npmmirror.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== -"@types/multer@^1.4.7": - version "1.4.11" - resolved "https://registry.npmmirror.com/@types/multer/-/multer-1.4.11.tgz#c70792670513b4af1159a2b60bf48cc932af55c5" - integrity sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w== +"@types/multer@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/multer/-/multer-2.1.0.tgz#c6ae866b9a3d9310b477d021a78b33feda092358" + integrity sha512-zYZb0+nJhOHtPpGDb3vqPjwpdeGlGC157VpkqNQL+UU2qwoacoQ7MpsAmUptI/0Oa127X32JzWDqQVEXp2RcIA== dependencies: "@types/express" "*" @@ -10401,6 +12063,14 @@ "@types/node" "*" form-data "^4.0.0" +"@types/node-fetch@^2.6.13": + version "2.6.13" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.13.tgz#e0c9b7b5edbdb1b50ce32c127e85e880872d56ee" + integrity sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw== + dependencies: + "@types/node" "*" + form-data "^4.0.4" + "@types/node-forge@^1.3.0": version "1.3.11" resolved "https://registry.npmmirror.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" @@ -10420,11 +12090,6 @@ resolved "https://registry.npmmirror.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== -"@types/node@^16.9.2": - version "16.18.76" - resolved "https://registry.npmmirror.com/@types/node/-/node-16.18.76.tgz#deecdf6b71b9ef45ceda63fec7220ddf2354d7a1" - integrity sha512-/GsO2uv1Z6R42lBr59dtem56gVF/yHKQaScggwU+gLU6DXE25sDmOar4c4IfWb3h+X/7OYZznPOFk7oGF3jQSA== - "@types/node@^18.11.18": version "18.19.10" resolved "https://registry.npmmirror.com/@types/node/-/node-18.19.10.tgz#4de314ab66faf6bc8ba691021a091ddcdf13a158" @@ -10432,55 +12097,60 @@ dependencies: undici-types "~5.26.4" -"@types/normalize-package-data@^2.4.0": - version "2.4.4" - resolved "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" - integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== +"@types/node@^18.11.9": + version "18.19.130" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.130.tgz#da4c6324793a79defb7a62cba3947ec5add00d59" + integrity sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg== + dependencies: + undici-types "~5.26.4" -"@types/oauth@*": - version "0.9.4" - resolved "https://registry.npmmirror.com/@types/oauth/-/oauth-0.9.4.tgz#dcbab5efa2f34f312b915f80685760ccc8111e0a" - integrity sha512-qk9orhti499fq5XxKCCEbd0OzdPZuancneyse3KtR+vgMiHRbh+mn8M4G6t64ob/Fg+GZGpa565MF/2dKWY32A== +"@types/node@^24.0.0": + version "24.12.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.12.2.tgz#353cb161dbf1785ea25e8829ba7ec574c5c629ac" + integrity sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g== dependencies: - "@types/node" "*" + undici-types "~7.16.0" "@types/parse-json@^4.0.0": version "4.0.2" resolved "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== -"@types/passport-oauth2@^1.4.11": - version "1.4.15" - resolved "https://registry.npmmirror.com/@types/passport-oauth2/-/passport-oauth2-1.4.15.tgz#34f2684f53aad36e664cd01ca9879224229f47e7" - integrity sha512-9cUTP/HStNSZmhxXGuRrBJfEWzIEJRub2eyJu3CvkA+8HAMc9W3aKdFhVq+Qz1hi42qn+GvSAnz3zwacDSYWpw== - dependencies: - "@types/express" "*" - "@types/oauth" "*" - "@types/passport" "*" - -"@types/passport-strategy@^0.2.35": - version "0.2.38" - resolved "https://registry.npmmirror.com/@types/passport-strategy/-/passport-strategy-0.2.38.tgz#482abba0b165cd4553ec8b748f30b022bd6c04d3" - integrity sha512-GC6eMqqojOooq993Tmnmp7AUTbbQSgilyvpCYQjT+H6JfG/g6RGc7nXEniZlp0zyKJ0WUdOiZWLBZft9Yug1uA== - dependencies: - "@types/express" "*" - "@types/passport" "*" +"@types/parse5@^6.0.0": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-6.0.3.tgz#705bb349e789efa06f43f128cef51240753424cb" + integrity sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g== -"@types/passport@*", "@types/passport@^1.0.11", "@types/passport@^1.0.16", "@types/passport@^1.0.3": +"@types/passport@^1.0.3": version "1.0.16" resolved "https://registry.npmmirror.com/@types/passport/-/passport-1.0.16.tgz#5a2918b180a16924c4d75c31254c31cdca5ce6cf" integrity sha512-FD0qD5hbPWQzaM0wHUnJ/T0BBCJBxCeemtnCwc/ThhTg3x9jfrAcRUmj5Dopza+MfFS9acTe3wk7rcVnRIp/0A== dependencies: "@types/express" "*" +"@types/pluralize@^0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/pluralize/-/pluralize-0.0.33.tgz#8ad9018368c584d268667dd9acd5b3b806e8c82a" + integrity sha512-JOqsl+ZoCpP4e8TDke9W79FDcSgPAR0l6pixx2JHkhnRjvShyYiAYw2LVsnA7K08Y6DeOnaU6ujmENO4os/cYg== + +"@types/prismjs@^1.0.0": + version "1.26.6" + resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.6.tgz#6ea27c126d645319ae4f7055eda63a9e835c0187" + integrity sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw== + "@types/prop-types@*", "@types/prop-types@^15.0.0", "@types/prop-types@^15.7.11", "@types/prop-types@^15.7.3": version "15.7.11" resolved "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== -"@types/protocol-buffers-schema@^3.4.1": +"@types/prop-types@^15.7.12": + version "15.7.15" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7" + integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw== + +"@types/protocol-buffers-schema@^3.4.3": version "3.4.3" - resolved "https://registry.npmmirror.com/@types/protocol-buffers-schema/-/protocol-buffers-schema-3.4.3.tgz#f6c45003ff55104ae7b6406a60313cf712d69a43" + resolved "https://registry.yarnpkg.com/@types/protocol-buffers-schema/-/protocol-buffers-schema-3.4.3.tgz#f6c45003ff55104ae7b6406a60313cf712d69a43" integrity sha512-8cCg6BiIj4jS0LXUFq3sndmd46yyPLYqMzvXLcTM1MRubh3sfZlQiehoCjGDxSHTqGSjjx8EtVNryIAl0njQWg== dependencies: "@types/node" "*" @@ -10490,31 +12160,27 @@ resolved "https://registry.npmmirror.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== -"@types/ramda@~0.29.6": - version "0.29.10" - resolved "https://registry.npmmirror.com/@types/ramda/-/ramda-0.29.10.tgz#2584b268f9e0dd71ed4e5432b095186eb24a1f8f" - integrity sha512-0BzWVKtSEtignlk+XBuK88Il5wzQwbRVfEkzE8iKm02NYHMGQ/9ffB05M+zXhTCqo50DOIAT9pNSJsjFMMG4rQ== +"@types/qs@^6.9.6": + version "6.15.0" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.15.0.tgz#963ab61779843fe910639a50661b48f162bc7f79" + integrity sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow== + +"@types/ramda@~0.30.0": + version "0.30.2" + resolved "https://registry.yarnpkg.com/@types/ramda/-/ramda-0.30.2.tgz#70661b20c1bb969589a551b7134ae75008ffbfb6" + integrity sha512-PyzHvjCalm2BRYjAU6nIB3TprYwMNOUY/7P/N8bSzp9W/yM2YrtGtAnnVtaCNSeOZ8DzKyFDvaqQs7LnWwwmBA== dependencies: - types-ramda "^0.29.7" + types-ramda "^0.30.1" "@types/range-parser@*": version "1.2.7" resolved "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/react-dom@*", "@types/react-dom@^18.0.0": - version "18.3.0" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.0.tgz#0cbc818755d87066ab6ca74fbedb2547d74a82b0" - integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg== - dependencies: - "@types/react" "*" - -"@types/react-dom@<18.0.0": - version "17.0.25" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.25.tgz#e0e5b3571e1069625b3a3da2b279379aa33a0cb5" - integrity sha512-urx7A7UxkZQmThYA4So0NelOVjx3V4rNFVJwp0WZlbIK5eM4rNJDiN3R/E9ix0MBh6kAEojk/9YL+Te6D9zHNA== - dependencies: - "@types/react" "^17" +"@types/react-dom@*", "@types/react-dom@<18.0.0", "@types/react-dom@^18", "@types/react-dom@^18.0.0": + version "18.3.7" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.7.tgz#b89ddf2cd83b4feafcc4e2ea41afdfb95a0d194f" + integrity sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ== "@types/react-redux@^7.1.20": version "7.1.33" @@ -10533,13 +12199,6 @@ dependencies: "@types/react" "*" -"@types/react-text-truncate@^0.14.0": - version "0.14.4" - resolved "https://registry.npmmirror.com/@types/react-text-truncate/-/react-text-truncate-0.14.4.tgz#60040bba3d6025518b7c0816ca85e41e3e5bfc68" - integrity sha512-qdw8522RqdYkTX0FShDPDx8hIRVjPydW8PXl/wKpPGpAtjJTsaNiFOe0fxMRLXIEQaAZvC5VLlKGGONAetb6nQ== - dependencies: - "@types/react" "*" - "@types/react-transition-group@^4.2.0", "@types/react-transition-group@^4.4.10": version "4.4.10" resolved "https://registry.npmmirror.com/@types/react-transition-group/-/react-transition-group-4.4.10.tgz#6ee71127bdab1f18f11ad8fb3322c6da27c327ac" @@ -10547,22 +12206,13 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^16.13.1 || ^17.0.0 || ^18.0.0": - version "18.3.3" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" - integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== - dependencies: - "@types/prop-types" "*" - csstype "^3.0.2" - -"@types/react@^16.13.1 || ^17.0.0", "@types/react@^17": - version "17.0.80" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.80.tgz#a5dfc351d6a41257eb592d73d3a85d3b7dbcbb41" - integrity sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA== +"@types/react@*", "@types/react@^16.13.1 || ^17.0.0 || ^18.0.0", "@types/react@^18": + version "18.3.28" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.28.tgz#0a85b1a7243b4258d9f626f43797ba18eb5f8781" + integrity sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw== dependencies: "@types/prop-types" "*" - "@types/scheduler" "^0.16" - csstype "^3.0.2" + csstype "^3.2.2" "@types/request@^2.47.1", "@types/request@^2.48.8": version "2.48.12" @@ -10574,32 +12224,25 @@ "@types/tough-cookie" "*" form-data "^2.5.0" +"@types/resize-observer-browser@^0.1.7": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@types/resize-observer-browser/-/resize-observer-browser-0.1.11.tgz#d3c98d788489d8376b7beac23863b1eebdd3c13c" + integrity sha512-cNw5iH8JkMkb3QkCoe7DaZiawbDQEUX8t7iuQaRTyLOyQCR2h+ibBD4GJt7p5yhUHrlOeL7ZtbxNHeipqNsBzQ== + "@types/resolve@1.20.2": version "1.20.2" resolved "https://registry.npmmirror.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== -"@types/responselike@^1.0.0": - version "1.0.3" - resolved "https://registry.npmmirror.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" - integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== - dependencies: - "@types/node" "*" - "@types/retry@0.12.2": version "0.12.2" resolved "https://registry.npmmirror.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== -"@types/scheduler@^0.16": - version "0.16.8" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" - integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== - -"@types/semver@^7.3.12", "@types/semver@^7.5.0": - version "7.5.6" - resolved "https://registry.npmmirror.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" - integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== +"@types/semver@7.5.8": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/send@*": version "0.17.4" @@ -10609,6 +12252,14 @@ "@types/mime" "^1" "@types/node" "*" +"@types/send@<1": + version "0.17.6" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.6.tgz#aeb5385be62ff58a52cd5459daa509ae91651d25" + integrity sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + "@types/serve-index@^1.9.4": version "1.9.4" resolved "https://registry.npmmirror.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" @@ -10625,6 +12276,15 @@ "@types/mime" "*" "@types/node" "*" +"@types/serve-static@^1": + version "1.15.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee" + integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "<1" + "@types/serve-static@^1.15.5": version "1.15.7" resolved "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" @@ -10648,6 +12308,13 @@ dependencies: "@types/node" "*" +"@types/ssh2-streams@*": + version "0.1.13" + resolved "https://registry.yarnpkg.com/@types/ssh2-streams/-/ssh2-streams-0.1.13.tgz#f8d34a22be50fb8dbafbb2bbc289add0d22daa51" + integrity sha512-faHyY3brO9oLEA0QlcO8N2wT7R0+1sHWZvQ+y3rMLwdY1ZyS1z0W3t65j9PqT4HmQ6ALzNe7RZlNuCNE0wBSWA== + dependencies: + "@types/node" "*" + "@types/ssh2@*": version "1.11.19" resolved "https://registry.npmmirror.com/@types/ssh2/-/ssh2-1.11.19.tgz#4f2ec691b0674ea1590915fe5114a9aeae0eb41d" @@ -10655,11 +12322,26 @@ dependencies: "@types/node" "^18.11.18" +"@types/ssh2@^0.5.48": + version "0.5.52" + resolved "https://registry.yarnpkg.com/@types/ssh2/-/ssh2-0.5.52.tgz#9dbd8084e2a976e551d5e5e70b978ed8b5965741" + integrity sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg== + dependencies: + "@types/node" "*" + "@types/ssh2-streams" "*" + "@types/stack-utils@^2.0.0": version "2.0.3" resolved "https://registry.npmmirror.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== +"@types/stream-buffers@^3.0.3": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@types/stream-buffers/-/stream-buffers-3.0.8.tgz#9981c092b72c7e1889e3724db40338f503aeac62" + integrity sha512-J+7VaHKNvlNPJPEJXX/fKa9DZtR/xPMwuIbe+yNOwp1YB+ApUOBv2aUpEoBJEi8nJgbgs1x8e73ttg0r1rSUdw== + dependencies: + "@types/node" "*" + "@types/styled-jsx@^2.2.8": version "2.2.9" resolved "https://registry.npmmirror.com/@types/styled-jsx/-/styled-jsx-2.2.9.tgz#e50b3f868c055bcbf9bc353eca6c10fdad32a53f" @@ -10707,9 +12389,9 @@ resolved "https://registry.npmmirror.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== -"@types/trusted-types@*": +"@types/trusted-types@^2.0.7": version "2.0.7" - resolved "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== "@types/tunnel@^0.0.3": @@ -10719,6 +12401,11 @@ dependencies: "@types/node" "*" +"@types/unist@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + "@types/unist@^2", "@types/unist@^2.0.0": version "2.0.10" resolved "https://registry.npmmirror.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" @@ -10729,42 +12416,27 @@ resolved "https://registry.npmmirror.com/@types/urijs/-/urijs-1.19.25.tgz#ac92b53e674c3b108decdbe88dc5f444a2f42f6a" integrity sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg== -"@types/use-sync-external-store@^0.0.3": - version "0.0.3" - resolved "https://registry.npmmirror.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" - integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== +"@types/use-sync-external-store@^0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz#60be8d21baab8c305132eb9cb912ed497852aadc" + integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg== "@types/webpack-env@^1.15.2": version "1.18.4" resolved "https://registry.npmmirror.com/@types/webpack-env/-/webpack-env-1.18.4.tgz#62879b0a9c653f9b1172d403b882f2045ecce032" integrity sha512-I6e+9+HtWADAWeeJWDFQtdk4EVSAbj6Rtz4q8fJ7mSr1M0jzlFcs8/HZ+Xb5SHzVm1dxH7aUiI+A8kA8Gcrm0A== -"@types/ws@^8.0.0", "@types/ws@^8.5.10", "@types/ws@^8.5.3": - version "8.5.10" - resolved "https://registry.npmmirror.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" - integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== - dependencies: - "@types/node" "*" - -"@types/xml-crypto@^1.4.2": - version "1.4.6" - resolved "https://registry.npmmirror.com/@types/xml-crypto/-/xml-crypto-1.4.6.tgz#6d1fd7d41c91554f2aed97c2ba273af0388fa5cf" - integrity sha512-A6jEW2FxLZo1CXsRWnZHUX2wzR3uDju2Bozt6rDbSmU/W8gkilaVbwFEVN0/NhnUdMVzwYobWtM6bU1QJJFb7Q== - dependencies: - "@types/node" "*" - xpath "0.0.27" - -"@types/xml-encryption@^1.2.1": - version "1.2.4" - resolved "https://registry.npmmirror.com/@types/xml-encryption/-/xml-encryption-1.2.4.tgz#0eceea58c82a89f62c0a2dc383a6461dfc2fe1ba" - integrity sha512-I69K/WW1Dv7j6O3jh13z0X8sLWJRXbu5xnHDl9yHzUNDUBtUoBY058eb5s+x/WG6yZC1h8aKdI2EoyEPjyEh+Q== +"@types/ws@*": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== dependencies: "@types/node" "*" -"@types/xml2js@^0.4.11": - version "0.4.14" - resolved "https://registry.npmmirror.com/@types/xml2js/-/xml2js-0.4.14.tgz#5d462a2a7330345e2309c6b549a183a376de8f9a" - integrity sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ== +"@types/ws@^8.5.10", "@types/ws@^8.5.3": + version "8.5.10" + resolved "https://registry.npmmirror.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" + integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== dependencies: "@types/node" "*" @@ -10773,6 +12445,13 @@ resolved "https://registry.npmmirror.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== +"@types/yargs@^17.0.33": + version "17.0.35" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.35.tgz#07013e46aa4d7d7d50a49e15604c1c5340d4eb24" + integrity sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg== + dependencies: + "@types/yargs-parser" "*" + "@types/yargs@^17.0.8": version "17.0.32" resolved "https://registry.npmmirror.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" @@ -10780,139 +12459,146 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^6.12.0": - version "6.20.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz#9cf31546d2d5e884602626d89b0e0d2168ac25ed" - integrity sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg== - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.20.0" - "@typescript-eslint/type-utils" "6.20.0" - "@typescript-eslint/utils" "6.20.0" - "@typescript-eslint/visitor-keys" "6.20.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.4" +"@typescript-eslint/eslint-plugin@^8.17.0": + version "8.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.0.tgz#fcbe76b693ce2412410cf4d48aefd617d345f2d9" + integrity sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw== + dependencies: + "@eslint-community/regexpp" "^4.12.2" + "@typescript-eslint/scope-manager" "8.59.0" + "@typescript-eslint/type-utils" "8.59.0" + "@typescript-eslint/utils" "8.59.0" + "@typescript-eslint/visitor-keys" "8.59.0" + ignore "^7.0.5" natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/parser@^6.7.2": - version "6.20.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-6.20.0.tgz#17e314177304bdf498527e3c4b112e41287b7416" - integrity sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w== - dependencies: - "@typescript-eslint/scope-manager" "6.20.0" - "@typescript-eslint/types" "6.20.0" - "@typescript-eslint/typescript-estree" "6.20.0" - "@typescript-eslint/visitor-keys" "6.20.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/scope-manager@6.20.0": - version "6.20.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz#8a926e60f6c47feb5bab878246dc2ae465730151" - integrity sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA== - dependencies: - "@typescript-eslint/types" "6.20.0" - "@typescript-eslint/visitor-keys" "6.20.0" - -"@typescript-eslint/type-utils@6.20.0": - version "6.20.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz#d395475cd0f3610dd80c7d8716fa0db767da3831" - integrity sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g== - dependencies: - "@typescript-eslint/typescript-estree" "6.20.0" - "@typescript-eslint/utils" "6.20.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/types@6.20.0": - version "6.20.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.20.0.tgz#5ccd74c29011ae7714ae6973e4ec0c634708b448" - integrity sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ== - -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/typescript-estree@6.20.0": - version "6.20.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz#5b2d0975949e6bdd8d45ee1471461ef5fadc5542" - integrity sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g== - dependencies: - "@typescript-eslint/types" "6.20.0" - "@typescript-eslint/visitor-keys" "6.20.0" + ts-api-utils "^2.5.0" + +"@typescript-eslint/parser@^8.16.0": + version "8.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.59.0.tgz#57a138280b3ceaf07904fbd62c433d5cc1ee1573" + integrity sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg== + dependencies: + "@typescript-eslint/scope-manager" "8.59.0" + "@typescript-eslint/types" "8.59.0" + "@typescript-eslint/typescript-estree" "8.59.0" + "@typescript-eslint/visitor-keys" "8.59.0" + debug "^4.4.3" + +"@typescript-eslint/project-service@8.59.0": + version "8.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.59.0.tgz#914bf62069d870faa0389ffd725774a200f511bf" + integrity sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw== + dependencies: + "@typescript-eslint/tsconfig-utils" "^8.59.0" + "@typescript-eslint/types" "^8.59.0" + debug "^4.4.3" + +"@typescript-eslint/scope-manager@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" + integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + +"@typescript-eslint/scope-manager@8.59.0": + version "8.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz#f71be268bd31da1c160815c689e4dde7c9bc9e8e" + integrity sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg== + dependencies: + "@typescript-eslint/types" "8.59.0" + "@typescript-eslint/visitor-keys" "8.59.0" + +"@typescript-eslint/tsconfig-utils@8.59.0", "@typescript-eslint/tsconfig-utils@^8.59.0": + version "8.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.0.tgz#1276077f5ad77e384446ea28a2474e8f8be1af41" + integrity sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg== + +"@typescript-eslint/type-utils@8.59.0": + version "8.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.59.0.tgz#2834ea3b179cedfc9244dcd4f74105a27751a439" + integrity sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg== + dependencies: + "@typescript-eslint/types" "8.59.0" + "@typescript-eslint/typescript-estree" "8.59.0" + "@typescript-eslint/utils" "8.59.0" + debug "^4.4.3" + ts-api-utils "^2.5.0" + +"@typescript-eslint/types@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" + integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== + +"@typescript-eslint/types@8.59.0", "@typescript-eslint/types@^8.59.0": + version "8.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.59.0.tgz#cfcc643c6e879016479775850d86d84c14492738" + integrity sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A== + +"@typescript-eslint/typescript-estree@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" + integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/utils@6.20.0", "@typescript-eslint/utils@^6.0.0": - version "6.20.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.20.0.tgz#0e52afcfaa51af5656490ba4b7437cc3aa28633d" - integrity sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg== + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/typescript-estree@8.59.0": + version "8.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.0.tgz#feba58a70ab6ea7ac53a2f3ae900db28ce3454c2" + integrity sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw== + dependencies: + "@typescript-eslint/project-service" "8.59.0" + "@typescript-eslint/tsconfig-utils" "8.59.0" + "@typescript-eslint/types" "8.59.0" + "@typescript-eslint/visitor-keys" "8.59.0" + debug "^4.4.3" + minimatch "^10.2.2" + semver "^7.7.3" + tinyglobby "^0.2.15" + ts-api-utils "^2.5.0" + +"@typescript-eslint/utils@8.59.0", "@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0": + version "8.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.59.0.tgz#f50df9bd6967881ef64fba62230111153179ead5" + integrity sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g== + dependencies: + "@eslint-community/eslint-utils" "^4.9.1" + "@typescript-eslint/scope-manager" "8.59.0" + "@typescript-eslint/types" "8.59.0" + "@typescript-eslint/typescript-estree" "8.59.0" + +"@typescript-eslint/utils@^7.0.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" + integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.20.0" - "@typescript-eslint/types" "6.20.0" - "@typescript-eslint/typescript-estree" "6.20.0" - semver "^7.5.4" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" -"@typescript-eslint/utils@^5.10.0": - version "5.62.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== +"@typescript-eslint/visitor-keys@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" + integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" + "@typescript-eslint/types" "7.18.0" + eslint-visitor-keys "^3.4.3" -"@typescript-eslint/visitor-keys@6.20.0": - version "6.20.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz#f7ada27f2803de89df0edd9fd7be22c05ce6a498" - integrity sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw== +"@typescript-eslint/visitor-keys@8.59.0": + version "8.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.0.tgz#2e80de30e7e944ed4bd47d751e37dcb04db03795" + integrity sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q== dependencies: - "@typescript-eslint/types" "6.20.0" - eslint-visitor-keys "^3.4.1" + "@typescript-eslint/types" "8.59.0" + eslint-visitor-keys "^5.0.0" "@uiw/codemirror-extensions-basic-setup@4.21.21": version "4.21.21" @@ -10944,152 +12630,133 @@ resolved "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== +"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" + integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-numbers" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== +"@webassemblyjs/floating-point-hex-parser@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" + integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== +"@webassemblyjs/helper-api-error@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" + integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== +"@webassemblyjs/helper-buffer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" + integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== +"@webassemblyjs/helper-numbers@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" + integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/floating-point-hex-parser" "1.13.2" + "@webassemblyjs/helper-api-error" "1.13.2" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== +"@webassemblyjs/helper-wasm-bytecode@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" + integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== +"@webassemblyjs/helper-wasm-section@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" + integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/wasm-gen" "1.14.1" -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== +"@webassemblyjs/ieee754@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" + integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== +"@webassemblyjs/leb128@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" + integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@xtuc/long" "4.2.2" +"@webassemblyjs/utf8@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" + integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== -"@whatwg-node/events@^0.1.0": - version "0.1.1" - resolved "https://registry.npmmirror.com/@whatwg-node/events/-/events-0.1.1.tgz#0ca718508249419587e130da26d40e29d99b5356" - integrity sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w== +"@webassemblyjs/wasm-edit@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" + integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/helper-wasm-section" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-opt" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + "@webassemblyjs/wast-printer" "1.14.1" + +"@webassemblyjs/wasm-gen@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" + integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" -"@whatwg-node/fetch@^0.9.0": - version "0.9.16" - resolved "https://registry.npmmirror.com/@whatwg-node/fetch/-/fetch-0.9.16.tgz#c833eb714f41f5d2caf1a345bed7a05f56db7b16" - integrity sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ== +"@webassemblyjs/wasm-opt@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" + integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== dependencies: - "@whatwg-node/node-fetch" "^0.5.5" - urlpattern-polyfill "^10.0.0" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" -"@whatwg-node/node-fetch@^0.5.5": - version "0.5.5" - resolved "https://registry.npmmirror.com/@whatwg-node/node-fetch/-/node-fetch-0.5.5.tgz#40c45e5f5f4185fa3391ff75f619287e0f225c7f" - integrity sha512-LhE0Oo95+dOrrzrJncrpCaR3VHSjJ5Gvkl5g9WVfkPKSKkxCbMeOsRQ+v9LrU9lRvXBJn8JicXqSufKFEpyRbQ== +"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" + integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== dependencies: - "@kamilkisiela/fast-url-parser" "^1.1.4" - "@whatwg-node/events" "^0.1.0" - busboy "^1.6.0" - fast-querystring "^1.1.1" - tslib "^2.3.1" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-api-error" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wast-printer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" + integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@xtuc/long" "4.2.2" + +"@wmhilton/crypto-hash@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@wmhilton/crypto-hash/-/crypto-hash-1.0.2.tgz#76887d8ad999fc5eeb19c2894087657778c5df73" + integrity sha512-3lopwJLEfPXLA3f1Ovvtfq+uWQTLWs+rZN/KJkOniFhGhz/36ST1rpnouh1hkVQGw+qistFPpwwK17a1e0hBCg== -"@xmldom/xmldom@^0.8.3", "@xmldom/xmldom@^0.8.5", "@xmldom/xmldom@^0.8.6", "@xmldom/xmldom@^0.8.8": +"@xmldom/xmldom@^0.8.3": version "0.8.10" resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== @@ -11099,6 +12766,21 @@ resolved "https://registry.npmmirror.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d" integrity sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ== +"@xterm/addon-attach@^0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@xterm/addon-attach/-/addon-attach-0.12.0.tgz#58d9b1feb8e9e7b5403ccc1491623497c522e704" + integrity sha512-1lxvXM4JYSm60lbFmE8WMOy2oF2ip3Ye8jWorSAmwy7x8FiC53netEJ5RguL8+FSRj79MUQsNCb2hprY2QA2ig== + +"@xterm/addon-fit@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@xterm/addon-fit/-/addon-fit-0.11.0.tgz#ba4778b69fcc9044a060c2176bbe077657d7b37e" + integrity sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g== + +"@xterm/xterm@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@xterm/xterm/-/xterm-5.5.0.tgz#275fb8f6e14afa6e8a0c05d4ebc94523ff775396" + integrity sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A== + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -11114,14 +12796,6 @@ resolved "https://registry.npmmirror.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== -"@yarnpkg/parsers@3.0.0-rc.46": - version "3.0.0-rc.46" - resolved "https://registry.npmmirror.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz#03f8363111efc0ea670e53b0282cd3ef62de4e01" - integrity sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q== - dependencies: - js-yaml "^3.10.0" - tslib "^2.4.0" - "@yarnpkg/parsers@^3.0.0": version "3.0.2" resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.2.tgz#48a1517a0f49124827f4c37c284a689c607b2f32" @@ -11130,40 +12804,20 @@ js-yaml "^3.10.0" tslib "^2.4.0" -"@zkochan/js-yaml@0.0.6": - version "0.0.6" - resolved "https://registry.npmmirror.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" - integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== - dependencies: - argparse "^2.0.1" - "@zxing/text-encoding@0.9.0": version "0.9.0" resolved "https://registry.yarnpkg.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz#fb50ffabc6c7c66a0c96b4c03e3d9be74864b70b" integrity sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA== -JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.npmmirror.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - a-sync-waterfall@^1.0.0: version "1.0.1" resolved "https://registry.npmmirror.com/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz#75b6b6aa72598b497a125e7a2770f14f4c8a1fa7" integrity sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA== -abab@^2.0.3, abab@^2.0.5, abab@^2.0.6: - version "2.0.6" - resolved "https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -abbrev@^1.0.0: - version "1.1.1" - resolved "https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== abort-controller@^3.0.0: version "3.0.0" @@ -11172,7 +12826,7 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" -accepts@^1.3.5, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: +accepts@^1.3.8, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -11180,57 +12834,38 @@ accepts@^1.3.5, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-globals@^7.0.0: - version "7.0.1" - resolved "https://registry.npmmirror.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" - integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== - dependencies: - acorn "^8.1.0" - acorn-walk "^8.0.2" - -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== +acorn-import-phases@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7" + integrity sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ== acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn-walk@^8.0.2, acorn-walk@^8.1.1: +acorn-walk@^8.1.1: version "8.3.2" resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn-walk@^8.3.4: + version "8.3.5" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.5.tgz#8a6b8ca8fc5b34685af15dabb44118663c296496" + integrity sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw== + dependencies: + acorn "^8.11.0" + +acorn@^8.11.0, acorn@^8.15.0, acorn@^8.16.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== -acorn@^8.1.0, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.4.1, acorn@^8.8.2, acorn@^8.9.0: version "8.11.3" resolved "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" - integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== - address@^1.0.1, address@^1.1.2: version "1.2.2" resolved "https://registry.npmmirror.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" @@ -11260,7 +12895,12 @@ agent-base@^7.0.2: dependencies: debug "^4.3.4" -agentkeepalive@^4.1.4, agentkeepalive@^4.2.1: +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.4" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== + +agentkeepalive@^4.1.4: version "4.5.0" resolved "https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== @@ -11295,13 +12935,25 @@ ajv-formats-draft2019@^1.6.1: smtp-address-parser "^1.0.3" uri-js "^4.4.1" -ajv-formats@^2.1.1, ajv-formats@~2.1.0: +ajv-formats@^2.1.1, ajv-formats@~2.1.0, ajv-formats@~2.1.1: version "2.1.1" resolved "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" +ajv-formats@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + +ajv-i18n@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/ajv-i18n/-/ajv-i18n-4.2.0.tgz#d48750ba60e283b3dee31e3c22c8c9f7410e326f" + integrity sha512-v/ei2UkCEeuKNXh8RToiFsUclmU+G57LO1Oo22OagNMENIw+Yb8eMwvHu7Vn9fmkjJyv6XclhJ8TbuigSglPkg== + ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" @@ -11324,7 +12976,7 @@ ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.0, ajv@^8.11.2, ajv@^8.12.0, ajv@^8.6.0, ajv@^8.6.3, ajv@^8.9.0: +ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.0, ajv@^8.12.0, ajv@^8.6.0, ajv@^8.6.3, ajv@^8.9.0: version "8.12.0" resolved "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -11334,7 +12986,22 @@ ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.0, ajv@^8.11.2, ajv@^8.12.0, ajv@^8.6.0, ajv@ require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-colors@^4.1.1, ansi-colors@^4.1.3: +ajv@^8.0.1, ajv@^8.16.0, ajv@^8.17.1, ajv@^8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" + integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +anser@^2.1.1: + version "2.3.5" + resolved "https://registry.yarnpkg.com/anser/-/anser-2.3.5.tgz#3435896b68b93e5e744842499d0ce3e6f6d013ee" + integrity sha512-vcZjxvvVoxTeR5XBNJB38oTu/7eDCZlwdz32N1eNgpyPF7j/Z7Idf+CUwQOkKKpJ7RJyjxgLHCM7vdIK0iCNMQ== + +ansi-colors@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== @@ -11346,6 +13013,13 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.21.3" +ansi-escapes@^7.0.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-7.3.0.tgz#5395bb74b2150a4a1d6e3c2565f4aeca78d28627" + integrity sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg== + dependencies: + environment "^1.0.0" + ansi-html-community@^0.0.8: version "0.0.8" resolved "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" @@ -11366,6 +13040,11 @@ ansi-regex@^6.0.1: resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== +ansi-regex@^6.1.0, ansi-regex@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -11390,12 +13069,12 @@ ansi-styles@^6.1.0: resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -any-promise@^1.0.0, any-promise@^1.1.0: +any-promise@^1.0.0: version "1.3.0" resolved "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== -anymatch@^3.0.3, anymatch@~3.1.2: +anymatch@~3.1.2: version "3.1.3" resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -11403,92 +13082,86 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +apg-lite@^1.0.3, apg-lite@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/apg-lite/-/apg-lite-1.0.5.tgz#17aee0e8452cb4ce7c7018dc54e53046cb31878b" + integrity sha512-SlI+nLMQDzCZfS39ihzjGp3JNBQfJXyMi6cg9tkLOCPVErgFsUIAEdO9IezR7kbP5Xd0ozcPNQBkf9TO5cHgWw== + "app@link:packages/app": version "0.0.0" dependencies: - "@backstage-community/plugin-github-actions" "^0.6.16" - "@backstage-community/plugin-tech-radar" "^0.7.4" - "@backstage/app-defaults" "^1.5.7" - "@backstage/catalog-model" "^1.5.0" - "@backstage/cli" "^0.26.10" - "@backstage/core-app-api" "^1.13.0" - "@backstage/core-components" "^0.14.8" - "@backstage/core-plugin-api" "^1.9.3" - "@backstage/integration-react" "^1.1.28" - "@backstage/plugin-api-docs" "^0.11.6" - "@backstage/plugin-catalog" "^1.21.0" - "@backstage/plugin-catalog-common" "^1.0.24" - "@backstage/plugin-catalog-graph" "^0.4.6" - "@backstage/plugin-catalog-import" "^0.12.0" - "@backstage/plugin-catalog-react" "^1.12.1" - "@backstage/plugin-home" "^0.7.6" - "@backstage/plugin-kubernetes" "^0.11.11" - "@backstage/plugin-org" "^0.6.26" - "@backstage/plugin-permission-react" "^0.4.23" - "@backstage/plugin-scaffolder" "^1.22.0" - "@backstage/plugin-search" "^1.4.13" - "@backstage/plugin-search-react" "^1.7.12" - "@backstage/plugin-techdocs" "^1.10.6" - "@backstage/plugin-techdocs-module-addons-contrib" "^1.1.11" - "@backstage/plugin-techdocs-react" "^1.2.5" - "@backstage/plugin-user-settings" "^0.8.8" - "@backstage/theme" "^0.5.6" + "@backstage-community/plugin-github-actions" "^0.22.0" + "@backstage-community/plugin-tech-radar" "^1.17.0" + "@backstage/app-defaults" "^1.7.6" + "@backstage/catalog-model" "^1.7.7" + "@backstage/core-app-api" "^1.19.6" + "@backstage/core-compat-api" "^0.5.9" + "@backstage/core-components" "^0.18.8" + "@backstage/core-plugin-api" "^1.12.4" + "@backstage/frontend-defaults" "^0.5.0" + "@backstage/frontend-plugin-api" "^0.15.1" + "@backstage/integration-react" "^1.2.16" + "@backstage/plugin-api-docs" "^0.13.5" + "@backstage/plugin-app-react" "^0.2.1" + "@backstage/plugin-catalog" "^2.0.1" + "@backstage/plugin-catalog-common" "^1.1.8" + "@backstage/plugin-catalog-graph" "^0.6.0" + "@backstage/plugin-catalog-import" "^0.13.11" + "@backstage/plugin-catalog-react" "^2.1.1" + "@backstage/plugin-home" "^0.9.3" + "@backstage/plugin-kubernetes" "^0.12.17" + "@backstage/plugin-kubernetes-react" "^0.5.18" + "@backstage/plugin-org" "^0.7.0" + "@backstage/plugin-permission-react" "^0.4.41" + "@backstage/plugin-scaffolder" "^1.36.1" + "@backstage/plugin-search" "^1.7.0" + "@backstage/plugin-search-react" "^1.11.0" + "@backstage/plugin-techdocs" "^1.17.2" + "@backstage/plugin-techdocs-module-addons-contrib" "^1.1.34" + "@backstage/plugin-techdocs-react" "^1.3.9" + "@backstage/plugin-user-settings" "^0.9.1" + "@backstage/theme" "^0.7.2" + "@backstage/ui" "^0.13.2" "@internal/plugin-apache-spark" "^0.1.0" "@internal/plugin-argo-workflows" "^0.1.0" - "@internal/plugin-cnoe-ui" "^0.1.0" "@internal/plugin-terraform" "^0.1.0" - "@material-ui/core" "^4.12.2" - "@material-ui/icons" "^4.9.1" - "@roadiehq/backstage-plugin-argo-cd" "^2.5.1" - history "^5.0.0" + "@mui/icons-material" "^5.0.0" + "@roadiehq/backstage-plugin-argo-cd" "^2.12.5" + "@terasky/backstage-plugin-kro-resources-frontend" "^0.2.1" react "^18.0.2" react-dom "^18.0.2" - react-router "^6.3.0" react-router-dom "^6.3.0" - react-use "^17.2.4" append-field@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" integrity sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw== -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.npmmirror.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -archiver-utils@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-4.0.1.tgz#66ad15256e69589a77f706c90c6dbcc1b2775d2a" - integrity sha512-Q4Q99idbvzmgCTEAAhi32BkOyq8iVI5EwdO0PmBDSGIzzjYNdcFn7Q7k3OzbLy4kLUPXfJtG6fO2RjftXbobBg== +archiver-utils@^5.0.0, archiver-utils@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-5.0.2.tgz#63bc719d951803efc72cf961a56ef810760dd14d" + integrity sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA== dependencies: - glob "^8.0.0" + glob "^10.0.0" graceful-fs "^4.2.0" + is-stream "^2.0.1" lazystream "^1.0.0" lodash "^4.17.15" normalize-path "^3.0.0" - readable-stream "^3.6.0" + readable-stream "^4.0.0" -archiver@^6.0.0: - version "6.0.1" - resolved "https://registry.npmmirror.com/archiver/-/archiver-6.0.1.tgz#d56968d4c09df309435adb5a1bbfc370dae48133" - integrity sha512-CXGy4poOLBKptiZH//VlWdFuUC1RESbdZjGjILwBuZ73P7WkAUN0htfSfBq/7k6FRFlpu7bg4JOkj1vU9G6jcQ== +archiver@^7.0.0, archiver@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-7.0.1.tgz#c9d91c350362040b8927379c7aa69c0655122f61" + integrity sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ== dependencies: - archiver-utils "^4.0.1" + archiver-utils "^5.0.2" async "^3.2.4" - buffer-crc32 "^0.2.1" - readable-stream "^3.6.0" + buffer-crc32 "^1.0.0" + readable-stream "^4.0.0" readdir-glob "^1.1.2" tar-stream "^3.0.0" - zip-stream "^5.0.1" - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" + zip-stream "^6.0.1" arg@^4.1.0: version "4.1.3" @@ -11524,6 +13197,13 @@ aria-hidden@^1.1.1: dependencies: tslib "^2.0.0" +aria-hidden@^1.2.3: + version "1.2.6" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.6.tgz#73051c9b088114c795b1ea414e9c0fff874ffc1a" + integrity sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA== + dependencies: + tslib "^2.0.0" + aria-query@5.1.3: version "5.1.3" resolved "https://registry.npmmirror.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" @@ -11531,13 +13211,18 @@ aria-query@5.1.3: dependencies: deep-equal "^2.0.5" -aria-query@^5.0.0, aria-query@^5.3.0: +aria-query@^5.0.0: version "5.3.0" resolved "https://registry.npmmirror.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== dependencies: dequal "^2.0.3" +aria-query@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== + array-buffer-byte-length@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" @@ -11546,22 +13231,25 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" -array-differ@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" - integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + +array-buffer-to-hex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-to-hex/-/array-buffer-to-hex-1.0.0.tgz#9c76e53010ef7bf7bf8a27ebbb41d24e1d83edf4" + integrity sha512-arycdkxgK1cj6s03GDb96tlCxOl1n3kg9M2OHseUc6Pqyqp+lgfceFPmG507eI5V+oxOSEnlOw/dFc7LXBXF4Q== array-flatten@1.1.1: version "1.1.1" resolved "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== - -array-includes@^3.1.6, array-includes@^3.1.7: +array-includes@^3.1.6: version "3.1.7" resolved "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== @@ -11572,23 +13260,51 @@ array-includes@^3.1.6, array-includes@^3.1.7: get-intrinsic "^1.2.1" is-string "^1.0.7" +array-includes@^3.1.8, array-includes@^3.1.9: + version "3.1.9" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" + integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.24.0" + es-object-atoms "^1.1.1" + get-intrinsic "^1.3.0" + is-string "^1.1.1" + math-intrinsics "^1.1.0" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.3: - version "1.2.3" - resolved "https://registry.npmmirror.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== +array.prototype.findlast@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" -array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: +array.prototype.findlastindex@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" + +array.prototype.flat@^1.3.1: version "1.3.2" resolved "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== @@ -11598,7 +13314,17 @@ array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: +array.prototype.flat@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.flatmap@^1.3.2: version "1.3.2" resolved "https://registry.npmmirror.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== @@ -11607,17 +13333,27 @@ array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: define-properties "^1.2.0" es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.1: - version "1.1.2" - resolved "https://registry.npmmirror.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd" - integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + +array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" arraybuffer.prototype.slice@^1.0.2: version "1.0.2" @@ -11632,21 +13368,38 @@ arraybuffer.prototype.slice@^1.0.2: is-array-buffer "^3.0.2" is-shared-array-buffer "^1.0.2" -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" -arrify@^2.0.0, arrify@^2.0.1: +arrify@^2.0.0: version "2.0.1" resolved "https://registry.npmmirror.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -asap@^2.0.0, asap@^2.0.3: +asap@^2.0.0, asap@^2.0.3, asap@~2.0.3: version "2.0.6" resolved "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +asn1.js@^4.10.1: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + asn1.js@^5.2.0: version "5.4.1" resolved "https://registry.npmmirror.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" @@ -11669,29 +13422,46 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== -assert@^1.1.1: - version "1.5.1" - resolved "https://registry.npmmirror.com/assert/-/assert-1.5.1.tgz#038ab248e4ff078e7bc2485ba6e6388466c78f76" - integrity sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A== +assert@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" + integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== dependencies: + call-bind "^1.0.2" + is-nan "^1.3.2" + object-is "^1.1.5" object.assign "^4.1.4" - util "^0.10.4" + util "^0.12.5" ast-types-flow@^0.0.8: version "0.0.8" resolved "https://registry.npmmirror.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== +ast-types@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" + astring@^1.8.1: version "1.8.6" resolved "https://registry.npmmirror.com/astring/-/astring-1.8.6.tgz#2c9c157cf1739d67561c56ba896e6948f6b93731" integrity sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg== -async-lock@^1.1.0: +async-lock@^1.1.0, async-lock@^1.4.1: version "1.4.1" resolved "https://registry.npmmirror.com/async-lock/-/async-lock-1.4.1.tgz#56b8718915a9b68b10fce2f2a9a3dddf765ef53f" integrity sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ== +async-mutex@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.5.0.tgz#353c69a0b9e75250971a64ac203b0ebfddd75482" + integrity sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA== + dependencies: + tslib "^2.4.0" + async-retry@^1.3.3: version "1.3.3" resolved "https://registry.npmmirror.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" @@ -11704,12 +13474,10 @@ async@^3.2.3, async@^3.2.4: resolved "https://registry.npmmirror.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== -asynciterator.prototype@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" +async@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== asynckit@^0.4.0: version "0.4.0" @@ -11746,6 +13514,13 @@ available-typed-arrays@^1.0.5: resolved "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + avsc@^5.7.5, avsc@^5.7.6: version "5.7.7" resolved "https://registry.npmmirror.com/avsc/-/avsc-5.7.7.tgz#8d1b5fd85904cc96a1e439450633ff33f4aff57b" @@ -11761,10 +13536,10 @@ aws4@^1.8.0: resolved "https://registry.npmmirror.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -axe-core@=4.7.0: - version "4.7.0" - resolved "https://registry.npmmirror.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" - integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== +axe-core@^4.10.0: + version "4.11.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.11.3.tgz#d23cf404edaa5f97bdfd9afed6eea8405e5326e7" + integrity sha512-zBQouZixDTbo3jMGqHKyePxYxr1e5W8UdTmBQ7sNtaA9M2bE32daxxPLS/jojhKOHxQ7LWwPjfiwf/fhaJWzlg== axios-cached-dns-resolve@0.5.2: version "0.5.2" @@ -11778,7 +13553,7 @@ axios-cached-dns-resolve@0.5.2: pino "^5.12.2" pino-pretty "^2.6.0" -axios@^1.0.0, axios@^1.4.0, axios@^1.6.0: +axios@^1.0.0: version "1.6.7" resolved "https://registry.npmmirror.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== @@ -11787,69 +13562,25 @@ axios@^1.0.0, axios@^1.4.0, axios@^1.6.0: form-data "^4.0.0" proxy-from-env "^1.1.0" -axios@^1.6.7: - version "1.7.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" - integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -axobject-query@^3.2.1: - version "3.2.1" - resolved "https://registry.npmmirror.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== +axios@^1.12.0, axios@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.15.2.tgz#eb8fb6d30349abace6ade5b4cb4d9e8a0dc23e5b" + integrity sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A== dependencies: - dequal "^2.0.3" + follow-redirects "^1.15.11" + form-data "^4.0.5" + proxy-from-env "^2.1.0" -azure-devops-node-api@^12.0.0: - version "12.3.0" - resolved "https://registry.npmmirror.com/azure-devops-node-api/-/azure-devops-node-api-12.3.0.tgz#bb2b31f8d4994a166dbd2bd38f9ddbf34c46bf4a" - integrity sha512-5HDhBFIXJxiFhcJ+A3hN87gwo92PrDNLJvcvRHjr+p7AsuUSF64yQU+M6wcBDczkIDVV7m+MrraKQ2tqUxSbCA== - dependencies: - tunnel "0.0.6" - typed-rest-client "^1.8.4" +axobject-query@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" + integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== b4a@^1.6.4: version "1.6.4" resolved "https://registry.npmmirror.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9" integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.npmmirror.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - babel-plugin-macros@^3.1.0: version "3.1.0" resolved "https://registry.npmmirror.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" @@ -11859,30 +13590,6 @@ babel-plugin-macros@^3.1.0: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.4.8: - version "0.4.8" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269" - integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.5.0" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.9.0: - version "0.9.0" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" - integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" - core-js-compat "^3.34.0" - -babel-plugin-polyfill-regenerator@^0.5.5: - version "0.5.5" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" - integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" - babel-polyfill@^6.26.0: version "6.26.0" resolved "https://registry.npmmirror.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" @@ -11892,32 +13599,6 @@ babel-polyfill@^6.26.0: core-js "^2.5.0" regenerator-runtime "^0.10.5" -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" @@ -11926,6 +13607,11 @@ babel-runtime@^6.26.0: core-js "^2.4.0" regenerator-runtime "^0.11.0" +backo2@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA== + bail@^2.0.0: version "2.0.2" resolved "https://registry.npmmirror.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" @@ -11936,6 +13622,64 @@ balanced-match@^1.0.0: resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +balanced-match@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" + integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== + +bare-events@^2.5.4, bare-events@^2.7.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.8.2.tgz#7b3e10bd8e1fc80daf38bb516921678f566ab89f" + integrity sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ== + +bare-fs@^4.0.1, bare-fs@^4.5.5: + version "4.7.1" + resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-4.7.1.tgz#6e81f784761102867c13f0823aa48c942d160f00" + integrity sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw== + dependencies: + bare-events "^2.5.4" + bare-path "^3.0.0" + bare-stream "^2.6.4" + bare-url "^2.2.2" + fast-fifo "^1.3.2" + +bare-os@^3.0.1: + version "3.9.0" + resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-3.9.0.tgz#59b1dd75c231067526f811c0e3d985257bd35747" + integrity sha512-JTjuZyNIDpw+GytMO4a6TK1VXdVKKJr6DRxEHasyuYyShV2deuiHJK/ahGZlebc+SG0/wJCB9XK8gprBGDFi/Q== + +bare-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-3.0.0.tgz#b59d18130ba52a6af9276db3e96a2e3d3ea52178" + integrity sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw== + dependencies: + bare-os "^3.0.1" + +bare-stream@^2.6.4: + version "2.13.0" + resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.13.0.tgz#dea59458dcf2689e9387134efccec015dfdbe3cf" + integrity sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA== + dependencies: + streamx "^2.25.0" + teex "^1.0.1" + +bare-url@^2.2.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/bare-url/-/bare-url-2.4.2.tgz#1faab7d8f1780f6e51d5db03711dc390460874c0" + integrity sha512-/9a2j4ac6ckpmAHvod/ob7x439OAHst/drc2Clnq+reRYd/ovddwcF4LfoxHyNk5AuGBnPg+HqFjmE/Zpq6v0A== + dependencies: + bare-path "^3.0.0" + +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== + +base64-arraybuffer@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + integrity sha512-437oANT9tP582zZMwSvZGy2nmSeAb8DW2me3y+Uv1Wp2Rulr8Mqlyrv3E7MLxmsiaPSMMDmiDVzgE+e8zlMx9g== + base64-js@^1.0.2, base64-js@^1.3.0, base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -11951,6 +13695,11 @@ base64url@3.x.x: resolved "https://registry.npmmirror.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== +baseline-browser-mapping@^2.10.12: + version "2.10.21" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.21.tgz#136f9f181ee0d7ca6e3edbf42d9559763d2c1141" + integrity sha512-Q+rUQ7Uz8AHM7DEaNdwvfFCTq7a43lNTzuS94eiWqwyxfV/wJv+oUivef51T91mmRY4d4A1u9rcSvkeufCVXlA== + basic-auth@~2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" @@ -11958,6 +13707,11 @@ basic-auth@~2.0.1: dependencies: safe-buffer "5.1.2" +basic-ftp@^5.0.2: + version "5.3.0" + resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.3.0.tgz#88f057d1ba8442643c505c4c83bbaa4442b15cfd" + integrity sha512-5K9eNNn7ywHPsYnFwjKgYH8Hf8B5emh7JKcPaVjjrMJFQQwGpwowEnZNEtHs7DfR7hCZsmaK3VA4HUK0YarT+w== + batch@0.6.1: version "0.6.1" resolved "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -11983,10 +13737,10 @@ better-sqlite3@^11.0.0: bindings "^1.5.0" prebuild-install "^7.1.1" -better-sqlite3@^9.0.0: - version "9.3.0" - resolved "https://registry.npmmirror.com/better-sqlite3/-/better-sqlite3-9.3.0.tgz#2a8aaad65fa0210a4df5e8a0bcbc9156f6138d56" - integrity sha512-ww73jVpQhRRdS9uMr761ixlkl4bWoXi8hMQlBGhoN6vPNlUHpIsNmw4pKN6kjknlt/wopdvXHvLk1W75BI+n0Q== +better-sqlite3@^12.0.0: + version "12.9.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.9.0.tgz#32498c99ba3fb36f604fbb5c70667c5f68c00414" + integrity sha512-wqUv4Gm3toFpHDQmaKD4QhZm3g1DjUBI0yzS4UBl6lElUmXFYdTQmmEDpAFa5o8FiFiymURypEnfVHzILKaxqQ== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -12002,6 +13756,22 @@ bfj@^8.0.0: jsonpath "^1.1.1" tryer "^1.0.1" +bfj@^9.0.2: + version "9.1.3" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-9.1.3.tgz#d7731e44b461ae919e4cebdebb6ddc08f7feb392" + integrity sha512-1ythbcNNAd2UjTYW6M+MAHd9KM/m3g4mQ+3a4Vom16WgmUa4GsisdmXAYfpAjkObY5zdpgzaBh1ctZOEcJipuQ== + dependencies: + check-types "^11.2.3" + hoopy "^0.1.4" + tryer "^1.0.1" + +bidi-js@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/bidi-js/-/bidi-js-1.0.3.tgz#6f8bcf3c877c4d9220ddf49b9bb6930c88f877d2" + integrity sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw== + dependencies: + require-from-string "^2.0.2" + big.js@^5.2.2: version "5.2.2" resolved "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -12048,11 +13818,21 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: resolved "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== +bn.js@^4.11.8: + version "4.12.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.3.tgz#2cc2c679188eb35b006f2d0d4710bed8437a769e" + integrity sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g== + bn.js@^5.0.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.npmmirror.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +bn.js@^5.2.2: + version "5.2.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.3.tgz#16a9e409616b23fef3ccbedb8d42f13bff80295e" + integrity sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w== + body-parser@1.20.1: version "1.20.1" resolved "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" @@ -12071,23 +13851,23 @@ body-parser@1.20.1: type-is "~1.6.18" unpipe "1.0.0" -body-parser@1.20.2: - version "1.20.2" - resolved "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== +body-parser@^1.15.2, body-parser@~1.20.3: + version "1.20.4" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f" + integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== dependencies: - bytes "3.1.2" + bytes "~3.1.2" content-type "~1.0.5" debug "2.6.9" depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" + destroy "~1.2.0" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + on-finished "~2.4.1" + qs "~6.14.0" + raw-body "~2.5.3" type-is "~1.6.18" - unpipe "1.0.0" + unpipe "~1.0.0" bonjour-service@^1.2.1: version "1.2.1" @@ -12132,6 +13912,13 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" +brace-expansion@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.5.tgz#dcc3a37116b79f3e1b46db994ced5d570e930fdb" + integrity sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ== + dependencies: + balanced-match "^4.0.2" + braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -12139,17 +13926,31 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== +brotli-wasm@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/brotli-wasm/-/brotli-wasm-3.0.1.tgz#eefe20f7368fef20d53314cffeaa44733dc2b259" + integrity sha512-U3K72/JAi3jITpdhZBqzSUq+DUY697tLxOuFXB+FpAE/Ug+5C3VZrv4uA674EUZHxNAuQ9wETXNqQkxZD6oL4A== + +browser-resolve@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-2.0.0.tgz#99b7304cb392f8d73dba741bb2d7da28c6d7842b" + integrity sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ== + dependencies: + resolve "^1.17.0" -browserify-aes@^1.0.0, browserify-aes@^1.0.4: +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -12161,9 +13962,9 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4: inherits "^2.0.1" safe-buffer "^5.0.1" -browserify-cipher@^1.0.0: +browserify-cipher@^1.0.1: version "1.0.1" - resolved "https://registry.npmmirror.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== dependencies: browserify-aes "^1.0.4" @@ -12180,7 +13981,7 @@ browserify-des@^1.0.0: inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: +browserify-rsa@^4.0.0: version "4.1.0" resolved "https://registry.npmmirror.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== @@ -12188,19 +13989,28 @@ browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: bn.js "^5.0.0" randombytes "^2.0.1" -browserify-sign@^4.0.0: - version "4.2.2" - resolved "https://registry.npmmirror.com/browserify-sign/-/browserify-sign-4.2.2.tgz#e78d4b69816d6e3dd1c747e64e9947f9ad79bc7e" - integrity sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg== +browserify-rsa@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.1.tgz#06e530907fe2949dc21fc3c2e2302e10b1437238" + integrity sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ== dependencies: bn.js "^5.2.1" - browserify-rsa "^4.1.0" + randombytes "^2.1.0" + safe-buffer "^5.2.1" + +browserify-sign@^4.2.3: + version "4.2.5" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.5.tgz#3979269fa8af55ba18aac35deef11b45515cd27d" + integrity sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw== + dependencies: + bn.js "^5.2.2" + browserify-rsa "^4.1.1" create-hash "^1.2.0" create-hmac "^1.1.7" - elliptic "^6.5.4" + elliptic "^6.6.1" inherits "^2.0.4" - parse-asn1 "^5.1.6" - readable-stream "^3.6.2" + parse-asn1 "^5.1.9" + readable-stream "^2.3.8" safe-buffer "^5.2.1" browserify-zlib@^0.2.0: @@ -12210,7 +14020,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.22.2: +browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.4: version "4.22.3" resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== @@ -12220,19 +14030,33 @@ browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^ node-releases "^2.0.14" update-browserslist-db "^1.0.13" -bser@2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== +browserslist@^4.28.1: + version "4.28.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.2.tgz#f50b65362ef48974ca9f50b3680566d786b811d2" + integrity sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg== dependencies: - node-int64 "^0.4.0" + baseline-browser-mapping "^2.10.12" + caniuse-lite "^1.0.30001782" + electron-to-chromium "^1.5.328" + node-releases "^2.0.36" + update-browserslist-db "^1.2.3" btoa-lite@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" integrity sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA== -buffer-crc32@^0.2.1, buffer-crc32@~0.2.3: +btoa@1.2.1, btoa@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" + integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== + +buffer-crc32@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-1.0.0.tgz#a10993b9055081d55304bd9feb4a072de179f405" + integrity sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w== + +buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== @@ -12257,6 +14081,13 @@ buffer-xor@^1.0.3: resolved "https://registry.npmmirror.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== +buffer-xor@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289" + integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== + dependencies: + safe-buffer "^5.1.1" + buffer@5.6.0: version "5.6.0" resolved "https://registry.npmmirror.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" @@ -12265,16 +14096,7 @@ buffer@5.6.0: base64-js "^1.0.2" ieee754 "^1.1.4" -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.npmmirror.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -buffer@^5.5.0: +buffer@^5.1.0, buffer@^5.5.0, buffer@^5.7.1: version "5.7.1" resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -12305,18 +14127,6 @@ builtin-status-codes@^3.0.0: resolved "https://registry.npmmirror.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== - -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.npmmirror.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - bundle-name@^4.1.0: version "4.1.0" resolved "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" @@ -12324,7 +14134,7 @@ bundle-name@^4.1.0: dependencies: run-applescript "^7.0.0" -busboy@^1.0.0, busboy@^1.6.0: +busboy@^1.6.0: version "1.6.0" resolved "https://registry.npmmirror.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== @@ -12336,56 +14146,27 @@ byline@^5.0.0: resolved "https://registry.npmmirror.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" integrity sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q== -byte-size@8.1.1: - version "8.1.1" - resolved "https://registry.npmmirror.com/byte-size/-/byte-size-8.1.1.tgz#3424608c62d59de5bfda05d31e0313c6174842ae" - integrity sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg== - bytes@3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== -bytes@3.1.2: +bytes@3.1.2, bytes@~3.1.2: version "3.1.2" resolved "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cacache@^16.1.0: - version "16.1.3" - resolved "https://registry.npmmirror.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" - integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== - dependencies: - "@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" - 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" - -cacache@^17.0.0: - version "17.1.4" - resolved "https://registry.npmmirror.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" - integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== +cacache@^18.0.0: + version "18.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5" + integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== dependencies: "@npmcli/fs" "^3.1.0" fs-minipass "^3.0.0" glob "^10.2.2" - lru-cache "^7.7.1" + lru-cache "^10.0.1" minipass "^7.0.3" - minipass-collect "^1.0.2" + minipass-collect "^2.0.1" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" p-map "^4.0.0" @@ -12393,31 +14174,18 @@ cacache@^17.0.0: tar "^6.1.11" unique-filename "^3.0.0" -cache-content-type@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" - integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA== - dependencies: - mime-types "^2.1.18" - ylru "^1.2.0" - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.npmmirror.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== +cacheable-lookup@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385" + integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== -cacheable-request@^7.0.2: - version "7.0.4" - resolved "https://registry.npmmirror.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" - integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: version "1.0.5" @@ -12439,9 +14207,27 @@ call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.1" -call-me-maybe@^1.0.1: +call-bind@^1.0.8, call-bind@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.9.tgz#39a644700c80bc7d0ca9102fc6d1d43b2fd7eee7" + integrity sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + get-intrinsic "^1.3.0" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +call-me-maybe@^1.0.2: version "1.0.2" - resolved "https://registry.npmmirror.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== callsites@^3.0.0: @@ -12457,30 +14243,11 @@ camel-case@^4.1.2: pascal-case "^3.1.2" tslib "^2.0.3" -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - camelcase@5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -12496,6 +14263,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001580: resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz#0dfd4db9e94edbdca67d57348ebc070dece279f4" integrity sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ== +caniuse-lite@^1.0.30001782: + version "1.0.30001790" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001790.tgz#04660c7de15f445d86dd10ac88a8936ac0698e45" + integrity sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -12523,15 +14295,7 @@ chalk@3.0.0, chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -12539,6 +14303,11 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.4.1: + version "5.6.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" + integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" @@ -12549,6 +14318,11 @@ character-entities-legacy@^1.0.0: resolved "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + character-entities@^1.0.0: version "1.2.4" resolved "https://registry.npmmirror.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" @@ -12564,6 +14338,11 @@ character-reference-invalid@^1.0.0: resolved "https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== +character-reference-invalid@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" + integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -12614,16 +14393,28 @@ chownr@^2.0.0: resolved "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== +chownr@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" + integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== + chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -ci-info@^3.2.0, ci-info@^3.6.1, ci-info@^3.7.0: +ci-info@^3.2.0: version "3.9.0" resolved "https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== +cidr-regex@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d" + integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw== + dependencies: + ip-regex "^4.1.0" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -12632,10 +14423,10 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.npmmirror.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== +classcat@^5.0.3: + version "5.0.5" + resolved "https://registry.yarnpkg.com/classcat/-/classcat-5.0.5.tgz#8c209f359a93ac302404a10161b501eba9c09c77" + integrity sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w== classnames@^2.2.6, classnames@^2.3.1, classnames@^2.5.1: version "2.5.1" @@ -12659,23 +14450,47 @@ clean-stack@^2.0.0: resolved "https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-cursor@3.1.0, cli-cursor@^3.1.0: +cleye@^2.3.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/cleye/-/cleye-2.6.0.tgz#61af2d95d507925d25053f5f7a90b371b5f558fb" + integrity sha512-u0SQCsega/ox+2GSuUlG6wvA9c2FtH8sPmv9G9Q3JRTs7FK6+LtaziRAQgx7lrJ1J7bOd3palhwgZKMg8R6JbQ== + dependencies: + terminal-columns "^2.0.0" + type-flag "^4.1.0" + +cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" -cli-spinners@2.6.1: - version "2.6.1" - resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" cli-spinners@^2.5.0: version "2.9.2" resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== +cli-table3@^0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" + integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + cli-width@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" @@ -12704,27 +14519,6 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone-deep@4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.npmmirror.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -clone@2.x: - version "2.1.2" - resolved "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== - clone@^1.0.2: version "1.0.4" resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -12735,41 +14529,38 @@ clsx@^1.0.2, clsx@^1.0.4, clsx@^1.1.1, clsx@^1.2.1: resolved "https://registry.npmmirror.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== +clsx@^2.0.0, clsx@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + clsx@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb" integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== -cluster-key-slot@^1.1.0: +cluster-key-slot@1.1.2, cluster-key-slot@^1.1.0, cluster-key-slot@^1.1.2: version "1.1.2" resolved "https://registry.npmmirror.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== -cmd-shim@6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" - integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.npmmirror.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== +clz-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clz-buffer/-/clz-buffer-1.0.0.tgz#f8cab8e31d5746b5eacd9fe5c4d9505700f3a03f" + integrity sha512-ApZYoWy06SfeIaJG/oBecF9ZBOYkP6uz31FYJF8gtGGacqz+YgD5kZuo5XBkgqI3tmL0E/vxyZ5q0PYgXjtxWg== -codemirror-graphql@^2.0.10: - version "2.0.10" - resolved "https://registry.npmmirror.com/codemirror-graphql/-/codemirror-graphql-2.0.10.tgz#c2ea5943b7c9426293dc158db1659b121d2cd55f" - integrity sha512-rC9NxibCsSzWtCQjHLfwKCkyYdGv2BT/BCgyDoKPrc/e7aGiyLyeT0fB60d+0imwlvhX3lIHncl6JMz2YxQ/jg== - dependencies: - "@types/codemirror" "^0.0.90" - graphql-language-service "5.2.0" +code-block-writer@^13.0.3: + version "13.0.3" + resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-13.0.3.tgz#90f8a84763a5012da7af61319dd638655ae90b5b" + integrity sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg== -codemirror-graphql@^2.0.11: - version "2.0.12" - resolved "https://registry.npmmirror.com/codemirror-graphql/-/codemirror-graphql-2.0.12.tgz#75492b41f271a64eb207c923a4a536c3134d05c9" - integrity sha512-5UCqhWzck1jClCmRewFb8aSiabnAqiaRfsvIPfmbf6WJvOb8oiefJeHilclPPiZBzY8v/Et6EBMtOeKnWCoyng== +codemirror-graphql@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/codemirror-graphql/-/codemirror-graphql-2.2.4.tgz#e0a0e48795d0c6e5d441439526e457ea6c608dc7" + integrity sha512-VW4rpbAqgAIEWKXwE3nDFz2QEaY5Cme0CnKET43ZE3RSKAAeOaUcecR6wBf3LYfxWwOyyzeCzqxRoUj+HNAEQA== dependencies: "@types/codemirror" "^0.0.90" - graphql-language-service "5.2.1" + graphql-language-service "5.5.0" codemirror@^5.65.3: version "5.65.16" @@ -12799,11 +14590,6 @@ codeowners-utils@^1.0.2: ignore "^5.1.4" locate-path "^5.0.0" -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.npmmirror.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - color-convert@^1.9.0, color-convert@^1.9.3: version "1.9.3" resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -12836,11 +14622,6 @@ color-string@^1.6.0, color-string@^1.9.0: color-name "^1.0.0" simple-swizzle "^0.2.2" -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - color@^3.1.3: version "3.2.1" resolved "https://registry.npmmirror.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" @@ -12880,14 +14661,6 @@ colorspace@1.1.x: color "^3.1.3" text-hex "1.0.x" -columnify@1.6.0: - version "1.6.0" - resolved "https://registry.npmmirror.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" - integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== - dependencies: - strip-ansi "^6.0.1" - wcwidth "^1.0.0" - combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -12905,6 +14678,11 @@ comma-separated-tokens@^2.0.0: resolved "https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== +commander@11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + commander@^10.0.0: version "10.0.1" resolved "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" @@ -12915,6 +14693,11 @@ commander@^12.0.0: resolved "https://registry.npmmirror.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== +commander@^14.0.3: + version "14.0.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" + integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== + commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -12940,40 +14723,33 @@ commander@^8.3.0: resolved "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== commondir@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - component-emitter@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== -compress-commons@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/compress-commons/-/compress-commons-5.0.1.tgz#e46723ebbab41b50309b27a0e0f6f3baed2d6590" - integrity sha512-MPh//1cERdLtqwO3pOFLeXtpuai0Y2WCd5AhtKxznqM7WtaMYaOEMSgn45d9D10sIHSfIKE603HlOp8OPGrvag== +compress-commons@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-6.0.2.tgz#26d31251a66b9d6ba23a84064ecd3a6a71d2609e" + integrity sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg== dependencies: crc-32 "^1.2.0" - crc32-stream "^5.0.0" + crc32-stream "^6.0.0" + is-stream "^2.0.1" normalize-path "^3.0.0" - readable-stream "^3.6.0" + readable-stream "^4.0.0" -compressible@^2.0.12, compressible@~2.0.16: +compressible@^2.0.12, compressible@~2.0.16, compressible@~2.0.18: version "2.0.18" resolved "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== @@ -12993,6 +14769,19 @@ compression@^1.7.4: safe-buffer "5.1.2" vary "~1.1.2" +compression@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79" + integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w== + dependencies: + bytes "3.1.2" + compressible "~2.0.18" + debug "2.6.9" + negotiator "~0.6.4" + on-headers "~1.1.0" + safe-buffer "5.2.1" + vary "~1.1.2" + compute-gcd@^1.2.1: version "1.2.1" resolved "https://registry.npmmirror.com/compute-gcd/-/compute-gcd-1.2.1.tgz#34d639f3825625e1357ce81f0e456a6249d8c77f" @@ -13012,21 +14801,16 @@ compute-lcm@^1.1.2: validate.io-function "^1.0.2" validate.io-integer-array "^1.0.0" +concat-buffers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/concat-buffers/-/concat-buffers-1.0.0.tgz#610db2f694b2bf6efdce75db97f3c3e402c9b1be" + integrity sha512-16ku3ZjxqnArWVUr1JoCCicha8HNdMwqK9XiaLoBtRRs/pNfxUyFXMMDMUFgNTT6GSlF396+31+4XfGQisvEIg== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concat-stream@^1.5.2: - version "1.6.2" - resolved "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - concat-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" @@ -13072,116 +14856,43 @@ connect-session-knex@^4.0.0: bluebird "^3.7.2" knex "3" +connect@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.npmmirror.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== -content-disposition@0.5.4, content-disposition@~0.5.2: +content-disposition@0.5.4, content-disposition@~0.5.4: version "0.5.4" resolved "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" -content-type@^1.0.4, content-type@^1.0.5, content-type@~1.0.4, content-type@~1.0.5: +content-type@^1.0.5, content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -conventional-changelog-angular@7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" - integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== - dependencies: - compare-func "^2.0.0" - -conventional-changelog-core@5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz#3c331b155d5b9850f47b4760aeddfc983a92ad49" - integrity sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A== - 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" - git-remote-origin-url "^2.0.0" - git-semver-tags "^5.0.0" - normalize-package-data "^3.0.3" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - -conventional-changelog-preset-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz#14975ef759d22515d6eabae6396c2ae721d4c105" - integrity sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== - -conventional-changelog-writer@^6.0.0: - version "6.0.1" - resolved "https://registry.npmmirror.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz#d8d3bb5e1f6230caed969dcc762b1c368a8f7b01" - integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== - dependencies: - conventional-commits-filter "^3.0.0" - dateformat "^3.0.3" - handlebars "^4.7.7" - json-stringify-safe "^5.0.1" - meow "^8.1.2" - semver "^7.0.0" - split "^1.0.1" - -conventional-commits-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" - integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.1" - -conventional-commits-parser@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" - integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== - dependencies: - JSONStream "^1.3.5" - is-text-path "^1.0.1" - meow "^8.1.2" - split2 "^3.2.2" - -conventional-recommended-bump@7.0.1: - version "7.0.1" - resolved "https://registry.npmmirror.com/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz#ec01f6c7f5d0e2491c2d89488b0d757393392424" - integrity sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA== - 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" - convert-source-map@^1.5.0: version "1.9.0" resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - cookie-parser@^1.4.5: version "1.4.6" resolved "https://registry.npmmirror.com/cookie-parser/-/cookie-parser-1.4.6.tgz#3ac3a7d35a7a03bbc7e365073a26074824214594" @@ -13195,9 +14906,9 @@ cookie-signature@1.0.6: resolved "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie-signature@1.0.7: +cookie-signature@1.0.7, cookie-signature@~1.0.6: version "1.0.7" - resolved "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== cookie@0.4.1: @@ -13210,7 +14921,7 @@ cookie@0.5.0: resolved "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -cookie@0.6.0, cookie@^0.6.0, cookie@~0.6.0: +cookie@0.6.0: version "0.6.0" resolved "https://registry.npmmirror.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== @@ -13220,38 +14931,41 @@ cookie@^0.4.2: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== +cookie@^0.7.0, cookie@~0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== + cookiejar@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== -cookies@~0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90" - integrity sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow== +cookies@~0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.9.1.tgz#3ffed6f60bb4fb5f146feeedba50acc418af67e3" + integrity sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw== dependencies: depd "~2.0.0" keygrip "~1.1.0" -copy-to-clipboard@^3.2.0, copy-to-clipboard@^3.3.1: +copy-to-clipboard@^3.2.0, copy-to-clipboard@^3.3.1, copy-to-clipboard@^3.3.3: version "3.3.3" resolved "https://registry.npmmirror.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== dependencies: toggle-selection "^1.0.6" -core-js-compat@^3.31.0, core-js-compat@^3.34.0: - version "3.35.1" - resolved "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.35.1.tgz#215247d7edb9e830efa4218ff719beb2803555e2" - integrity sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw== - dependencies: - browserslist "^4.22.2" - core-js-pure@^3.23.3, core-js-pure@^3.30.2: version "3.35.1" resolved "https://registry.npmmirror.com/core-js-pure/-/core-js-pure-3.35.1.tgz#f33ad7fdf9dddae260339a30e5f8363f5c49a3bc" integrity sha512-zcIdi/CL3MWbBJYo5YCeVAAx+Sy9yJE9I3/u9LkFABwbeaPhTMRWraM8mYFp9jW5Z50hOy7FVzCc8dCrpZqtIQ== +core-js-pure@^3.48.0: + version "3.49.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.49.0.tgz#ff8436b7251a3832f5fdbbe3e10f7f2e58e51fb1" + integrity sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw== + core-js@^2.4.0, core-js@^2.5.0: version "2.6.12" resolved "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" @@ -13272,6 +14986,19 @@ core-util-is@~1.0.0: resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +cors-gate@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/cors-gate/-/cors-gate-1.1.3.tgz#4ff964e958a94f78da2029f0f95842410d812d19" + integrity sha512-RFqvbbpj02lqKDhqasBEkgzmT3RseCH3DKy5sT2W9S1mhctABKQP3ktKcnKN0h8t4pJ2SneI3hPl3TGNi/VmZA== + +cors@^2.8.4: + version "2.8.6" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.6.tgz#ff5dd69bd95e547503820d29aba4f8faf8dfec96" + integrity sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw== + dependencies: + object-assign "^4" + vary "^1" + cors@^2.8.5: version "2.8.5" resolved "https://registry.npmmirror.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" @@ -13291,7 +15018,7 @@ cosmiconfig@^6.0.0: path-type "^4.0.0" yaml "^1.7.2" -cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: +cosmiconfig@^7.0.0: version "7.1.0" resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== @@ -13302,7 +15029,7 @@ cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" -cosmiconfig@^8.1.0, cosmiconfig@^8.2.0: +cosmiconfig@^8.2.0: version "8.3.6" resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== @@ -13312,6 +15039,14 @@ cosmiconfig@^8.1.0, cosmiconfig@^8.2.0: parse-json "^5.2.0" path-type "^4.0.0" +cpu-features@~0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.10.tgz#9aae536db2710c7254d7ed67cb3cbc7d29ad79c5" + integrity sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA== + dependencies: + buildcheck "~0.0.6" + nan "^2.19.0" + cpu-features@~0.0.9: version "0.0.9" resolved "https://registry.npmmirror.com/cpu-features/-/cpu-features-0.0.9.tgz#5226b92f0f1c63122b0a3eb84cb8335a4de499fc" @@ -13325,17 +15060,24 @@ crc-32@^1.2.0: resolved "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== -crc32-stream@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/crc32-stream/-/crc32-stream-5.0.0.tgz#a97d3a802c8687f101c27cc17ca5253327354720" - integrity sha512-B0EPa1UK+qnpBZpG+7FgPCu0J2ETLpXq09o9BkLkEAhdB6Z61Qo4pJ3JYu0c+Qi+/SAL7QThqnzS06pmSSyZaw== +crc32-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-6.0.0.tgz#8529a3868f8b27abb915f6c3617c0fadedbf9430" + integrity sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g== dependencies: crc-32 "^1.2.0" - readable-stream "^3.4.0" + readable-stream "^4.0.0" -create-ecdh@^4.0.0: +crc@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + +create-ecdh@^4.0.4: version "4.0.4" - resolved "https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== dependencies: bn.js "^4.1.0" @@ -13352,7 +15094,7 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: +create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -13364,22 +15106,9 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" - -create-require@^1.1.0: +create-require@^1.1.0, create-require@^1.1.1: version "1.1.1" - resolved "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== crelt@^1.0.5: @@ -13402,18 +15131,11 @@ cron@^3.0.0: "@types/luxon" "~3.4.0" luxon "~3.4.0" -cronstrue@^2.2.0, cronstrue@^2.32.0: +cronstrue@^2.32.0: version "2.47.0" resolved "https://registry.npmmirror.com/cronstrue/-/cronstrue-2.47.0.tgz#3cf447c2a3a070d5bad2cedd6383e7cc16f5a308" integrity sha512-fnFwJy7zslTEz6h7O7BkwgHNBvuuPmkhAYKqPDxK5mBQLz2nG08T9afbnjm+yrvcc/wxrd+otaVSnoXT9ulUOw== -cross-env@^7.0.0: - version "7.0.3" - resolved "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" - integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== - dependencies: - cross-spawn "^7.0.1" - cross-fetch@^3.1.4: version "3.1.8" resolved "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" @@ -13421,6 +15143,13 @@ cross-fetch@^3.1.4: dependencies: node-fetch "^2.6.12" +cross-fetch@^3.1.5: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" + integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== + dependencies: + node-fetch "^2.7.0" + cross-fetch@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" @@ -13428,14 +15157,7 @@ cross-fetch@^4.0.0: dependencies: node-fetch "^2.6.12" -cross-inspect@1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/cross-inspect/-/cross-inspect-1.0.0.tgz#5fda1af759a148594d2d58394a9e21364f6849af" - integrity sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ== - dependencies: - tslib "^2.4.0" - -cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -13444,22 +15166,23 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.npmmirror.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== +crypto-browserify@^3.12.1: + version "3.12.1" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.1.tgz#bb8921bec9acc81633379aa8f52d69b0b69e0dac" + integrity sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ== dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" + browserify-cipher "^1.0.1" + browserify-sign "^4.2.3" + create-ecdh "^4.0.4" + create-hash "^1.2.0" + create-hmac "^1.1.7" + diffie-hellman "^5.0.3" + hash-base "~3.0.4" + inherits "^2.0.4" + pbkdf2 "^3.1.2" + public-encrypt "^4.0.3" + randombytes "^2.1.0" + randomfill "^1.0.4" css-box-model@^1.2.0: version "1.2.1" @@ -13513,6 +15236,14 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" +css-tree@^3.0.0, css-tree@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-3.2.1.tgz#86cac7011561272b30e6b1e042ba6ce047aa7518" + integrity sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA== + dependencies: + mdn-data "2.27.1" + source-map-js "^1.2.1" + css-vendor@^2.0.8: version "2.0.8" resolved "https://registry.npmmirror.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" @@ -13592,27 +15323,15 @@ csso@^4.2.0: dependencies: css-tree "^1.1.2" -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.npmmirror.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@^0.5.0: - version "0.5.0" - resolved "https://registry.npmmirror.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" - integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.npmmirror.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== +cssstyle@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-6.2.0.tgz#c41b59955c19c7a1223352d67ca462750204ad0f" + integrity sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig== dependencies: - cssom "~0.3.6" + "@asamuzakjp/css-color" "^5.0.1" + "@csstools/css-syntax-patches-for-csstree" "^1.0.28" + css-tree "^3.1.0" + lru-cache "^11.2.6" csstype@^2.5.2: version "2.6.21" @@ -13624,6 +15343,11 @@ csstype@^3.0.2, csstype@^3.1.2: resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== +csstype@^3.1.3, csstype@^3.2.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" + integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== + ctrlc-windows@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/ctrlc-windows/-/ctrlc-windows-2.1.0.tgz#f2096a96ac1d03181e0ec808c2c8a67fdc20b300" @@ -13639,7 +15363,7 @@ ctrlc-windows@^2.1.0: resolved "https://registry.npmmirror.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e" integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== -"d3-drag@2 - 3": +"d3-drag@2 - 3", d3-drag@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/d3-drag/-/d3-drag-3.0.0.tgz#994aae9cd23c719f53b5e10e3a0a6108c69607ba" integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg== @@ -13730,11 +15454,6 @@ damerau-levenshtein@^1.0.8: resolved "https://registry.npmmirror.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -13742,30 +15461,52 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== +data-uri-to-buffer@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" + integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== + +data-urls@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-7.0.0.tgz#6dce8b63226a1ecfdd907ce18a8ccfb1eee506d3" + integrity sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA== dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" + whatwg-mimetype "^5.0.0" + whatwg-url "^16.0.0" -data-urls@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" - integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== dependencies: - abab "^2.0.6" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" -dataloader@^2.0.0, dataloader@^2.2.2: +dataloader@^2.0.0: version "2.2.2" resolved "https://registry.npmmirror.com/dataloader/-/dataloader-2.2.2.tgz#216dc509b5abe39d43a9b9d97e6e5e473dfbe3e0" integrity sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g== -date-fns@^2.16.1, date-fns@^2.21.1, date-fns@^2.30.0: +date-fns@^2.16.1, date-fns@^2.30.0: version "2.30.0" resolved "https://registry.npmmirror.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== @@ -13782,6 +15523,11 @@ dateformat@^3.0.3: resolved "https://registry.npmmirror.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== +debounce-promise@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/debounce-promise/-/debounce-promise-3.1.2.tgz#320fb8c7d15a344455cd33cee5ab63530b6dc7c5" + integrity sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg== + debounce@^1.2.0: version "1.2.1" resolved "https://registry.npmmirror.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" @@ -13808,30 +15554,17 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -decamelize-keys@^1.1.0: - version "1.1.1" - resolved "https://registry.npmmirror.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" - integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== +debug@^4.3.6, debug@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" + ms "^2.1.3" -decamelize@^1.1.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -decimal.js@^10.2.1, decimal.js@^10.4.2: - version "10.4.3" - resolved "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== +decimal.js@^10.4.3, decimal.js@^10.6.0: + version "10.6.0" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" + integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg== decode-named-character-reference@^1.0.0: version "1.0.2" @@ -13840,11 +15573,6 @@ decode-named-character-reference@^1.0.0: dependencies: character-entities "^2.0.0" -decode-uri-component@^0.2.2: - version "0.2.2" - resolved "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -13852,16 +15580,6 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@0.7.0: - version "0.7.0" - resolved "https://registry.npmmirror.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== - -dedent@^1.0.0: - version "1.5.1" - resolved "https://registry.npmmirror.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" - integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== - deep-equal@^1.1.0: version "1.1.2" resolved "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.2.tgz#78a561b7830eef3134c7f6f3a3d6af272a678761" @@ -13938,6 +15656,13 @@ default-gateway@^6.0.3: dependencies: execa "^5.0.0" +default-user-agent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-user-agent/-/default-user-agent-1.0.0.tgz#16c46efdcaba3edc45f24f2bd4868b01b7c2adc6" + integrity sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw== + dependencies: + os-name "~1.0.3" + defaults@^1.0.3: version "1.0.4" resolved "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" @@ -13945,11 +15670,6 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - define-data-property@^1.0.1, define-data-property@^1.1.0, define-data-property@^1.1.1: version "1.1.1" resolved "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" @@ -13987,10 +15707,14 @@ define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -delay@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" - integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== +degenerator@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" + integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== + dependencies: + ast-types "^0.13.4" + escodegen "^2.1.0" + esprima "^4.0.1" delayed-stream@~1.0.0: version "1.0.0" @@ -14012,7 +15736,7 @@ depd@2.0.0, depd@~2.0.0: resolved "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@^1.1.2, depd@~1.1.2: +depd@~1.1.2: version "1.1.2" resolved "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== @@ -14040,15 +15764,17 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" -destroy@1.2.0, destroy@^1.0.4: +destroy@1.2.0, destroy@^1.0.4, destroy@^1.2.0, destroy@~1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== +destroyable-server@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/destroyable-server/-/destroyable-server-1.1.1.tgz#c40105e5a9d0a582e2c37924c78bced36ab0a986" + integrity sha512-7tjgU/99QVuYSqkMXr6XdQSvXj+8TjC9NiRVWNSyGytxklZ88m+qcSvWTJ3VysE3I9wurph7dTciLEEj8aUlaQ== + dependencies: + "@types/node" "*" detect-indent@^6.1.0: version "6.1.0" @@ -14060,11 +15786,6 @@ detect-libc@^2.0.0: resolved "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - detect-node-es@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" @@ -14111,15 +15832,20 @@ diff@^5.0.0: resolved "https://registry.npmmirror.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== -diffie-hellman@^5.0.0: +diffie-hellman@^5.0.3: version "5.0.3" - resolved "https://registry.npmmirror.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== dependencies: bn.js "^4.1.0" miller-rabin "^4.0.0" randombytes "^2.0.0" +digest-header@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/digest-header/-/digest-header-1.1.0.tgz#e16ab6cf4545bc4eea878c8c35acd1b89664d800" + integrity sha512-glXVh42vz40yZb9Cq2oMOt70FIoWiv+vxNvdKdU8CwjLad25qHM3trLxhl9bVjdr6WaslIXhWpn0NO8T/67Qjg== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -14139,15 +15865,12 @@ dns-packet@^5.2.2: dependencies: "@leichtgewicht/ip-codec" "^2.0.1" -docker-modem@^3.0.0: - version "3.0.8" - resolved "https://registry.npmmirror.com/docker-modem/-/docker-modem-3.0.8.tgz#ef62c8bdff6e8a7d12f0160988c295ea8705e77a" - integrity sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ== +docker-compose@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/docker-compose/-/docker-compose-1.4.2.tgz#a389b9ab754c722bccf97fba6206859098edf835" + integrity sha512-rPHigTKGaEHpkUmfd69QgaOp+Os5vGJwG/Ry8lcr8W/382AmI+z/D7qoa9BybKIkqNppaIbs8RYeHSevdQjWww== dependencies: - debug "^4.1.1" - readable-stream "^3.5.0" - split-ca "^1.0.1" - ssh2 "^1.11.0" + yaml "^2.2.2" docker-modem@^5.0.3: version "5.0.3" @@ -14159,14 +15882,15 @@ docker-modem@^5.0.3: split-ca "^1.0.1" ssh2 "^1.15.0" -dockerode@^3.3.1: - version "3.3.5" - resolved "https://registry.npmmirror.com/dockerode/-/dockerode-3.3.5.tgz#7ae3f40f2bec53ae5e9a741ce655fff459745629" - integrity sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA== +docker-modem@^5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-5.0.7.tgz#57f3f0e2c7a893e66a0d4a626f9cbc933d77157b" + integrity sha512-XJgGhoR/CLpqshm4d3L7rzH6t8NgDFUIIpztYlLHIApeJjMZKYJMz2zxPsYxnejq5h3ELYSw/RBsi3t5h7gNTA== dependencies: - "@balena/dockerignore" "^1.0.2" - docker-modem "^3.0.0" - tar-fs "~2.0.1" + debug "^4.1.1" + readable-stream "^3.5.0" + split-ca "^1.0.1" + ssh2 "^1.15.0" dockerode@^4.0.0: version "4.0.2" @@ -14177,6 +15901,19 @@ dockerode@^4.0.0: docker-modem "^5.0.3" tar-fs "~2.0.1" +dockerode@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-4.0.10.tgz#d0fa159d87eace6f59aa1399517c3d07a7455f73" + integrity sha512-8L/P9JynLBiG7/coiA4FlQXegHltRqS0a+KqI44P1zgQh8QLHTg7FKOwhkBgSJwZTeHsq30WRoVFLuwkfK0YFg== + dependencies: + "@balena/dockerignore" "^1.0.2" + "@grpc/grpc-js" "^1.11.1" + "@grpc/proto-loader" "^0.7.13" + docker-modem "^5.0.7" + protobufjs "^7.3.2" + tar-fs "^2.1.4" + uuid "^10.0.0" + doctrine@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" @@ -14225,30 +15962,16 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.npmmirror.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== +domain-browser@4.22.0: + version "4.22.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.22.0.tgz#6ddd34220ec281f9a65d3386d267ddd35c491f9f" + integrity sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw== domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -domexception@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" - integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== - dependencies: - webidl-conversions "^7.0.0" - domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" resolved "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" @@ -14256,20 +15979,12 @@ domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: dependencies: domelementtype "^2.2.0" -dompurify@=3.0.8: - version "3.0.8" - resolved "https://registry.npmmirror.com/dompurify/-/dompurify-3.0.8.tgz#e0021ab1b09184bc8af7e35c7dd9063f43a8a437" - integrity sha512-b7uwreMYL2eZhrSCRC4ahLTeZcPZxSmYfmcQGXGkXiZSNW1X85v+SDM5KsWcpivIiUBH47Ji7NtyUdpLeF5JZQ== - -dompurify@^2.2.7: - version "2.4.7" - resolved "https://registry.npmmirror.com/dompurify/-/dompurify-2.4.7.tgz#277adeb40a2c84be2d42a8bcd45f582bfa4d0cfc" - integrity sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ== - -dompurify@^3.0.0: - version "3.1.5" - resolved "https://registry.npmmirror.com/dompurify/-/dompurify-3.1.5.tgz#2c6a113fc728682a0f55684b1388c58ddb79dc38" - integrity sha512-lwG+n5h8QNpxtyrJW/gJWckL+1/DQiYMX8f7t8Z2AZTPw1esVrqjI63i7Zc2Gz0aKzLVMYC1V1PL/ky+aY/NgA== +dompurify@^3.3.1, dompurify@^3.3.2: + version "3.4.1" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.1.tgz#521d04483ac12631b2aedf434a5f5390933b8789" + integrity sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw== + optionalDependencies: + "@types/trusted-types" "^2.0.7" domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" @@ -14288,38 +16003,35 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" -dot-prop@^5.1.0: - version "5.3.0" - resolved "https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dotenv-expand@~10.0.0: - version "10.0.0" - resolved "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" - integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== - -dotenv@~16.3.1: - version "16.3.2" - resolved "https://registry.npmmirror.com/dotenv/-/dotenv-16.3.2.tgz#3cb611ce5a63002dbabf7c281bc331f69d28f03f" - integrity sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ== - drange@^1.0.2: version "1.1.1" resolved "https://registry.npmmirror.com/drange/-/drange-1.1.1.tgz#b2aecec2aab82fcef11dbbd7b9e32b83f8f6c0b8" integrity sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA== -dset@^3.1.2: - version "3.1.3" - resolved "https://registry.npmmirror.com/dset/-/dset-3.1.3.tgz#c194147f159841148e8e34ca41f638556d9542d2" - integrity sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ== +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" -duplexer@^0.1.1, duplexer@^0.1.2: +duplexer@^0.1.2: version "0.1.2" resolved "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== +duplexify@^3.5.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + duplexify@^4.0.0: version "4.1.2" resolved "https://registry.npmmirror.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" @@ -14360,19 +16072,17 @@ ee-first@1.1.1: resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -ejs@^3.1.7: - version "3.1.9" - resolved "https://registry.npmmirror.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== - dependencies: - jake "^10.8.5" - electron-to-chromium@^1.4.648: version "1.4.650" resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.650.tgz#b38ef9de16991b9f7b924246770576ab91ab3d64" integrity sha512-sYSQhJCJa4aGA1wYol5cMQgekDBlbVfTRavlGZVr3WZpDdOPcp6a6xUnFfrt8TqZhsBYYbDxJZCjGfHuGupCRQ== -elliptic@^6.5.3, elliptic@^6.5.4: +electron-to-chromium@^1.5.328: + version "1.5.344" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz#6437cc08a7d9b914a98120e182f37793c9eaffd4" + integrity sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg== + +elliptic@^6.5.3: version "6.5.4" resolved "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -14385,10 +16095,18 @@ elliptic@^6.5.3, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.npmmirror.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== +elliptic@^6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" + integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" emoji-regex@^8.0.0: version "8.0.0" @@ -14400,6 +16118,11 @@ emoji-regex@^9.2.2: resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +emojilib@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/emojilib/-/emojilib-2.4.0.tgz#ac518a8bb0d5f76dda57289ccb2fdf9d39ae721e" + integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw== + emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -14410,7 +16133,12 @@ enabled@2.0.x: resolved "https://registry.npmmirror.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== -encodeurl@^1.0.2, encodeurl@~1.0.2: +encodeurl@^2.0.0, encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== @@ -14422,6 +16150,13 @@ encoding@^0.1.13: dependencies: iconv-lite "^0.6.2" +end-of-stream@^1.0.0: + version "1.4.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" + integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== + dependencies: + once "^1.4.0" + end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -14429,20 +16164,13 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== +enhanced-resolve@^5.20.0: + version "5.21.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz#bb8e6fabaf74930de70e61397798750429e5b1ae" + integrity sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA== dependencies: graceful-fs "^4.2.4" - tapable "^2.2.0" - -enquirer@~2.3.6: - version "2.3.6" - resolved "https://registry.npmmirror.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" + tapable "^2.3.3" ent@^2.2.0: version "2.2.0" @@ -14459,20 +16187,20 @@ entities@^4.4.0: resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -entities@~2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" - integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== +entities@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-8.0.0.tgz#c1df5fe3602429747fa233d0dd26f142f0ce4743" + integrity sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA== env-paths@^2.2.0: version "2.2.1" resolved "https://registry.npmmirror.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -envinfo@7.8.1: - version "7.8.1" - resolved "https://registry.npmmirror.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== +environment@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1" + integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== err-code@^2.0.2: version "2.0.3" @@ -14486,18 +16214,73 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -error-inject@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/error-inject/-/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" - integrity sha512-JM8N6PytDbmIYm1IhPWlo8vr3NtfjhDY/1MhD/a5b/aad/USE8a0+NsqE9d5n+GVGmuNkPQWm4bFQWv18d8tMg== - -error-stack-parser@^2.0.6: +error-stack-parser@^2.0.6, error-stack-parser@^2.1.4: version "2.1.4" resolved "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== dependencies: stackframe "^1.3.4" +es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9, es-abstract@^1.24.0, es-abstract@^1.24.2: + version "1.24.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.2.tgz#2dbd38c180735ee983f77585140a2706a963ed9a" + integrity sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.3.0" + get-proto "^1.0.1" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-negative-zero "^2.0.3" + is-regex "^1.2.1" + is-set "^2.0.3" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.1" + math-intrinsics "^1.1.0" + object-inspect "^1.13.4" + object-keys "^1.1.1" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.4" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + stop-iteration-iterator "^1.1.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.19" + es-abstract@^1.22.1: version "1.22.3" resolved "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" @@ -14564,6 +16347,11 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" @@ -14582,38 +16370,47 @@ es-get-iterator@^1.1.3: is-set "^2.0.2" is-string "^1.0.7" isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - -es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15: - version "1.0.15" - resolved "https://registry.npmmirror.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" - integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== - dependencies: - asynciterator.prototype "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.1" - es-abstract "^1.22.1" - es-set-tostringtag "^2.0.1" - function-bind "^1.1.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - iterator.prototype "^1.1.2" - safe-array-concat "^1.0.1" + stop-iteration-iterator "^1.0.0" -es-module-lexer@^1.2.1: - version "1.4.1" - resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" - integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== +es-iterator-helpers@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.3.2.tgz#8f4ff1f3603cbd09fbdb72c747a679779a65cc7f" + integrity sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw== + dependencies: + call-bind "^1.0.9" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.24.2" + es-errors "^1.3.0" + es-set-tostringtag "^2.1.0" + function-bind "^1.1.2" + get-intrinsic "^1.3.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + iterator.prototype "^1.1.5" + math-intrinsics "^1.1.0" es-module-lexer@^1.3.1: version "1.5.3" resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.5.3.tgz#25969419de9c0b1fbe54279789023e8a9a788412" integrity sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg== +es-module-lexer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" + integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + es-set-tostringtag@^2.0.1: version "2.0.2" resolved "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" @@ -14623,6 +16420,16 @@ es-set-tostringtag@^2.0.1: has-tostringtag "^1.0.0" hasown "^2.0.0" +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + es-shim-unscopables@^1.0.0: version "1.0.2" resolved "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" @@ -14630,6 +16437,13 @@ es-shim-unscopables@^1.0.0: dependencies: hasown "^2.0.0" +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== + dependencies: + hasown "^2.0.2" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -14639,6 +16453,15 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + es6-error@^4.1.1: version "4.1.1" resolved "https://registry.npmmirror.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" @@ -14683,40 +16506,48 @@ esbuild@^0.20.0: "@esbuild/win32-ia32" "0.20.2" "@esbuild/win32-x64" "0.20.2" -esbuild@^0.21.0: - version "0.21.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" - integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== +esbuild@^0.27.0: + version "0.27.7" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.7.tgz#bcadce22b2f3fd76f257e3a64f83a64986fea11f" + integrity sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w== optionalDependencies: - "@esbuild/aix-ppc64" "0.21.5" - "@esbuild/android-arm" "0.21.5" - "@esbuild/android-arm64" "0.21.5" - "@esbuild/android-x64" "0.21.5" - "@esbuild/darwin-arm64" "0.21.5" - "@esbuild/darwin-x64" "0.21.5" - "@esbuild/freebsd-arm64" "0.21.5" - "@esbuild/freebsd-x64" "0.21.5" - "@esbuild/linux-arm" "0.21.5" - "@esbuild/linux-arm64" "0.21.5" - "@esbuild/linux-ia32" "0.21.5" - "@esbuild/linux-loong64" "0.21.5" - "@esbuild/linux-mips64el" "0.21.5" - "@esbuild/linux-ppc64" "0.21.5" - "@esbuild/linux-riscv64" "0.21.5" - "@esbuild/linux-s390x" "0.21.5" - "@esbuild/linux-x64" "0.21.5" - "@esbuild/netbsd-x64" "0.21.5" - "@esbuild/openbsd-x64" "0.21.5" - "@esbuild/sunos-x64" "0.21.5" - "@esbuild/win32-arm64" "0.21.5" - "@esbuild/win32-ia32" "0.21.5" - "@esbuild/win32-x64" "0.21.5" + "@esbuild/aix-ppc64" "0.27.7" + "@esbuild/android-arm" "0.27.7" + "@esbuild/android-arm64" "0.27.7" + "@esbuild/android-x64" "0.27.7" + "@esbuild/darwin-arm64" "0.27.7" + "@esbuild/darwin-x64" "0.27.7" + "@esbuild/freebsd-arm64" "0.27.7" + "@esbuild/freebsd-x64" "0.27.7" + "@esbuild/linux-arm" "0.27.7" + "@esbuild/linux-arm64" "0.27.7" + "@esbuild/linux-ia32" "0.27.7" + "@esbuild/linux-loong64" "0.27.7" + "@esbuild/linux-mips64el" "0.27.7" + "@esbuild/linux-ppc64" "0.27.7" + "@esbuild/linux-riscv64" "0.27.7" + "@esbuild/linux-s390x" "0.27.7" + "@esbuild/linux-x64" "0.27.7" + "@esbuild/netbsd-arm64" "0.27.7" + "@esbuild/netbsd-x64" "0.27.7" + "@esbuild/openbsd-arm64" "0.27.7" + "@esbuild/openbsd-x64" "0.27.7" + "@esbuild/openharmony-arm64" "0.27.7" + "@esbuild/sunos-x64" "0.27.7" + "@esbuild/win32-arm64" "0.27.7" + "@esbuild/win32-ia32" "0.27.7" + "@esbuild/win32-x64" "0.27.7" escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -14754,9 +16585,9 @@ escodegen@^1.8.1: optionalDependencies: source-map "~0.6.1" -escodegen@^2.0.0: +escodegen@^2.1.0: version "2.1.0" - resolved "https://registry.npmmirror.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== dependencies: esprima "^4.0.1" @@ -14790,114 +16621,121 @@ eslint-import-resolver-node@^0.3.9: is-core-module "^2.13.0" resolve "^1.22.4" -eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.npmmirror.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== +eslint-module-utils@^2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz#f76d3220bfb83c057651359295ab5854eaad75ff" + integrity sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw== dependencies: debug "^3.2.7" -eslint-plugin-deprecation@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-2.0.0.tgz#9804707a4c19f3a53615c6babc0ced3d429d69cf" - integrity sha512-OAm9Ohzbj11/ZFyICyR5N6LbOIvQMp7ZU2zI7Ej0jIc8kiGUERXPNMfw2QqqHD1ZHtjMub3yPZILovYEYucgoQ== +eslint-plugin-deprecation@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-3.0.0.tgz#c0b6bce543c2a01f231d39a1c54fdfebf3560d48" + integrity sha512-JuVLdNg/uf0Adjg2tpTyYoYaMbwQNn/c78P1HcccokvhtRphgnRjZDKmhlxbxYptppex03zO76f97DD/yQHv7A== dependencies: - "@typescript-eslint/utils" "^6.0.0" + "@typescript-eslint/utils" "^7.0.0" + ts-api-utils "^1.3.0" tslib "^2.3.1" - tsutils "^3.21.0" -eslint-plugin-import@^2.25.4: - version "2.29.1" - resolved "https://registry.npmmirror.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== +eslint-plugin-import@^2.31.0: + version "2.32.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980" + integrity sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.9" + array.prototype.findlastindex "^1.2.6" + array.prototype.flat "^1.3.3" + array.prototype.flatmap "^1.3.3" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" + eslint-module-utils "^2.12.1" + hasown "^2.0.2" + is-core-module "^2.16.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.1" semver "^6.3.1" + string.prototype.trimend "^1.0.9" tsconfig-paths "^3.15.0" -eslint-plugin-jest@^27.0.0: - version "27.6.3" - resolved "https://registry.npmmirror.com/eslint-plugin-jest/-/eslint-plugin-jest-27.6.3.tgz#8acb8b1e45597fe1f4d4cf25163d90119efc12be" - integrity sha512-+YsJFVH6R+tOiO3gCJon5oqn4KWc+mDq2leudk8mrp8RFubLOo9CVyi3cib4L7XMpxExmkmBZQTPDYVBzgpgOA== +eslint-plugin-jest@^28.9.0: + version "28.14.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-28.14.0.tgz#02da77dc27d7b4c5480df3552ea26de056857b36" + integrity sha512-P9s/qXSMTpRTerE2FQ0qJet2gKbcGyFTPAJipoKxmWqR6uuFqIqk8FuEfg5yBieOezVrEfAMZrEwJ6yEp+1MFQ== dependencies: - "@typescript-eslint/utils" "^5.10.0" + "@typescript-eslint/utils" "^6.0.0 || ^7.0.0 || ^8.0.0" -eslint-plugin-jsx-a11y@^6.5.1: - version "6.8.0" - resolved "https://registry.npmmirror.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" - integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== +eslint-plugin-jsx-a11y@^6.10.2: + version "6.10.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" + integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== dependencies: - "@babel/runtime" "^7.23.2" - aria-query "^5.3.0" - array-includes "^3.1.7" + aria-query "^5.3.2" + array-includes "^3.1.8" array.prototype.flatmap "^1.3.2" ast-types-flow "^0.0.8" - axe-core "=4.7.0" - axobject-query "^3.2.1" + axe-core "^4.10.0" + axobject-query "^4.1.0" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - es-iterator-helpers "^1.0.15" - hasown "^2.0.0" + hasown "^2.0.2" jsx-ast-utils "^3.3.5" language-tags "^1.0.9" minimatch "^3.1.2" - object.entries "^1.1.7" - object.fromentries "^2.0.7" - -eslint-plugin-react-hooks@^4.3.0: - version "4.6.0" - resolved "https://registry.npmmirror.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + object.fromentries "^2.0.8" + safe-regex-test "^1.0.3" + string.prototype.includes "^2.0.1" -eslint-plugin-react@^7.28.0: - version "7.33.2" - resolved "https://registry.npmmirror.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== - dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" +eslint-plugin-react-hooks@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz#1be0080901e6ac31ce7971beed3d3ec0a423d9e3" + integrity sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg== + +eslint-plugin-react@^7.37.2: + version "7.37.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz#2975511472bdda1b272b34d779335c9b0e877065" + integrity sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA== + dependencies: + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.3" + array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" + es-iterator-helpers "^1.2.1" estraverse "^5.3.0" + hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" + object.entries "^1.1.9" + object.fromentries "^2.0.8" + object.values "^1.2.1" prop-types "^15.8.1" - resolve "^2.0.0-next.4" + resolve "^2.0.0-next.5" semver "^6.3.1" - string.prototype.matchall "^4.0.8" + string.prototype.matchall "^4.0.12" + string.prototype.repeat "^1.0.0" -eslint-plugin-unused-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.0.0.tgz#d25175b0072ff16a91892c3aa72a09ca3a9e69e7" - integrity sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw== - dependencies: - eslint-rule-composer "^0.3.0" +eslint-plugin-unused-imports@^4.1.4: + version "4.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.4.1.tgz#a831f0a2937d7631eba30cb87091ab7d3a5da0e1" + integrity sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ== -eslint-rule-composer@^0.3.0: - version "0.3.0" - resolved "https://registry.npmmirror.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" - integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== +eslint-rspack-plugin@^4.2.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/eslint-rspack-plugin/-/eslint-rspack-plugin-4.4.1.tgz#74a8ae21990598592cbf83df61988c860d146a5c" + integrity sha512-Z/aVtYhXG4Ln5OGoUdYi4c3CrRibnVBsGvwKjuASNjTPfdOU21KRR2zec5RY6HCBNOUVx5jG5b93RH5sBPEVYQ== + dependencies: + "@types/eslint" "^8.56.10" + jest-worker "^29.7.0" + micromatch "^4.0.8" + normalize-path "^3.0.0" + tinyglobby "^0.2.15" -eslint-scope@5.1.1, eslint-scope@^5.1.1: +eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -14918,9 +16756,14 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint-webpack-plugin@^4.0.0: +eslint-visitor-keys@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz#9e3c9489697824d2d4ce3a8ad12628f91e9f59be" + integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA== + +eslint-webpack-plugin@^4.2.0: version "4.2.0" - resolved "https://registry.npmmirror.com/eslint-webpack-plugin/-/eslint-webpack-plugin-4.2.0.tgz#41f54b25379908eb9eca8645bc997c90cfdbd34e" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-4.2.0.tgz#41f54b25379908eb9eca8645bc997c90cfdbd34e" integrity sha512-rsfpFQ01AWQbqtjgPRr2usVRxhWDuG0YDYcG8DJOteD3EFnpeuYuOwk0PQiN7PRBTqS6ElNdtPZPggj8If9WnA== dependencies: "@types/eslint" "^8.56.10" @@ -15026,7 +16869,7 @@ estree-walker@^0.6.1: resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== -estree-walker@^2.0.1, estree-walker@^2.0.2: +estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== @@ -15046,11 +16889,23 @@ event-target-shim@^5.0.0: resolved "https://registry.npmmirror.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== +eventemitter3@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== + eventemitter3@^4.0.0, eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +events-universal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/events-universal/-/events-universal-1.0.1.tgz#b56a84fd611b6610e0a2d0f09f80fdf931e2dfe6" + integrity sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw== + dependencies: + bare-events "^2.7.0" + events@3.3.0, events@^3.0.0, events@^3.2.0, events@^3.3.0: version "3.3.0" resolved "https://registry.npmmirror.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -15064,21 +16919,6 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -execa@5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" - integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== - 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" - execa@^5.0.0: version "5.1.1" resolved "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -15094,11 +16934,6 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.npmmirror.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - expand-template@^2.0.3: version "2.0.3" resolved "https://registry.npmmirror.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" @@ -15111,7 +16946,7 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^29.0.0, expect@^29.7.0: +expect@^29.0.0: version "29.7.0" resolved "https://registry.npmmirror.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== @@ -15122,40 +16957,37 @@ expect@^29.0.0, expect@^29.7.0: jest-message-util "^29.7.0" jest-util "^29.7.0" -expiry-map@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/expiry-map/-/expiry-map-2.0.0.tgz#b441ee8e8865291ad9a542783076d33bae0f3582" - integrity sha512-K1I5wJe2fiqjyUZf/xhxwTpaopw3F+19DsO7Oggl20+3SVTXDIevVRJav0aBMfposQdkl2E4+gnuOKd3j2X0sA== - dependencies: - map-age-cleaner "^0.2.0" - exponential-backoff@^3.1.1: version "3.1.1" resolved "https://registry.npmmirror.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== -express-openapi-validator@^5.0.4: - version "5.1.3" - resolved "https://registry.npmmirror.com/express-openapi-validator/-/express-openapi-validator-5.1.3.tgz#6dd370eb9d9dd98d6cca6711d768d7a99906f5c7" - integrity sha512-P0l04TtcVn9z74QhRPVn2vTazVBu9vKYbxJPVcmcX4IVNcHh1afLK1vAEd/GMeoB7I7ixUjWSk5Sy3gerYHBwQ== +expr-eval-fork@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/expr-eval-fork/-/expr-eval-fork-3.0.3.tgz#82a3291db3835af9dfe05f519e4901f2b72219fb" + integrity sha512-BhC+hbc5lIVjygr840n5DEkW3MQq7H9o+mc1/N7Z5uIiCFVyESLL5DIE7LNq4CYUNxy+XjA+3jRrL/h0Kt2xcg== + +express-openapi-validator@^5.5.8: + version "5.6.2" + resolved "https://registry.yarnpkg.com/express-openapi-validator/-/express-openapi-validator-5.6.2.tgz#df1511a8023baa04559c1fdb6e75224bac6ea067" + integrity sha512-fkDn4+ImUC4HTJ1g0cek/ItqYhmEO19AglJd2Iw2OJco0jLIbxIlDGVazmXbvvYeziU4Bnah2h+S2tb6NtWg8w== dependencies: - "@apidevtools/json-schema-ref-parser" "^9.1.2" - "@types/multer" "^1.4.7" - ajv "^8.11.2" + "@apidevtools/json-schema-ref-parser" "^14.2.1" + "@types/multer" "^2.0.0" + ajv "^8.17.1" ajv-draft-04 "^1.0.0" - ajv-formats "^2.1.1" + ajv-formats "^3.0.1" content-type "^1.0.5" json-schema-traverse "^1.0.0" lodash.clonedeep "^4.5.0" lodash.get "^4.4.2" - lodash.uniq "^4.5.0" - lodash.zipobject "^4.1.3" media-typer "^1.1.0" - multer "^1.4.5-lts.1" + multer "^2.0.2" ono "^7.1.3" - path-to-regexp "^6.2.0" + path-to-regexp "^8.3.0" + qs "^6.14.1" -express-promise-router@^4.1.0: +express-promise-router@^4.1.0, express-promise-router@^4.1.1: version "4.1.1" resolved "https://registry.npmmirror.com/express-promise-router/-/express-promise-router-4.1.1.tgz#8fac102060b9bcc868f84d34fbb12fd8fa494291" integrity sha512-Lkvcy/ZGrBhzkl3y7uYBHLMtLI4D6XQ2kiFg9dq7fbktBch5gjqJ0+KovX0cvCAvTJw92raWunRLM/OM+5l4fA== @@ -15164,6 +16996,18 @@ express-promise-router@^4.1.0: lodash.flattendeep "^4.0.0" methods "^1.0.0" +express-rate-limit@^7.5.0: + version "7.5.1" + resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-7.5.1.tgz#8c3a42f69209a3a1c969890070ece9e20a879dec" + integrity sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw== + +express-rate-limit@^8.2.2: + version "8.4.0" + resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-8.4.0.tgz#70b0c4bc546370d3801beb62191ab0f8019d63e0" + integrity sha512-gDK8yiqKxrGta+3WtON59arrrw6GLmadA1qoFgYXzdcch8fmKDID2XqO8itsi3f1wufXYPT51387dN6cvVBS3Q== + dependencies: + ip-address "10.1.0" + express-session@^1.17.1: version "1.18.0" resolved "https://registry.npmmirror.com/express-session/-/express-session-1.18.0.tgz#a6ae39d9091f2efba5f20fc5c65a3ce7c9ce16a3" @@ -15178,54 +17022,54 @@ express-session@^1.17.1: safe-buffer "5.2.1" uid-safe "~2.1.5" -express@^4.17.1, express@^4.17.3, express@^4.18.2: - version "4.18.2" - resolved "https://registry.npmmirror.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== +express@^4.14.0, express@^4.22.0, express@^4.22.1: + version "4.22.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069" + integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" + body-parser "~1.20.3" + content-disposition "~0.5.4" content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" + cookie "~0.7.1" + cookie-signature "~1.0.6" debug "2.6.9" depd "2.0.0" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" + finalhandler "~1.3.1" + fresh "~0.5.2" + http-errors "~2.0.0" + merge-descriptors "1.0.3" methods "~1.1.2" - on-finished "2.4.1" + on-finished "~2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.7" + path-to-regexp "~0.1.12" proxy-addr "~2.0.7" - qs "6.11.0" + qs "~6.14.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" + send "~0.19.0" + serve-static "~1.16.2" setprototypeof "1.2.0" - statuses "2.0.1" + statuses "~2.0.1" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" -express@^4.19.2: - version "4.19.2" - resolved "https://registry.npmmirror.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" - integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== +express@^4.17.1, express@^4.17.3: + version "4.18.2" + resolved "https://registry.npmmirror.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.2" + body-parser "1.20.1" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.6.0" + cookie "0.5.0" cookie-signature "1.0.6" debug "2.6.9" depd "2.0.0" @@ -15266,11 +17110,6 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -extract-files@^11.0.0: - version "11.0.0" - resolved "https://registry.npmmirror.com/extract-files/-/extract-files-11.0.0.tgz#b72d428712f787eef1f5193aff8ab5351ca8469a" - integrity sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ== - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -15286,17 +17125,12 @@ fast-copy@^3.0.2: resolved "https://registry.npmmirror.com/fast-copy/-/fast-copy-3.0.2.tgz#59c68f59ccbcac82050ba992e0d5c389097c9d35" integrity sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ== -fast-decode-uri-component@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" - integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-fifo@^1.1.0, fast-fifo@^1.2.0: +fast-fifo@^1.1.0, fast-fifo@^1.2.0, fast-fifo@^1.3.2: version "1.3.2" resolved "https://registry.npmmirror.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== @@ -15312,12 +17146,23 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + fast-json-parse@^1.0.3: version "1.0.3" resolved "https://registry.npmmirror.com/fast-json-parse/-/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" integrity sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw== -fast-json-patch@^3.0.0-1: +fast-json-patch@^3.0.0-1, fast-json-patch@^3.1.1: version "3.1.1" resolved "https://registry.npmmirror.com/fast-json-patch/-/fast-json-patch-3.1.1.tgz#85064ea1b1ebf97a3f7ad01e23f9337e72c66947" integrity sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ== @@ -15342,13 +17187,6 @@ fast-memoize@^2.5.2: resolved "https://registry.npmmirror.com/fast-memoize/-/fast-memoize-2.5.2.tgz#79e3bb6a4ec867ea40ba0e7146816f6cdce9b57e" integrity sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw== -fast-querystring@^1.1.1: - version "1.1.2" - resolved "https://registry.npmmirror.com/fast-querystring/-/fast-querystring-1.1.2.tgz#a6d24937b4fc6f791b4ee31dcb6f53aeafb89f53" - integrity sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg== - dependencies: - fast-decode-uri-component "^1.0.1" - fast-redact@^2.0.0: version "2.1.0" resolved "https://registry.npmmirror.com/fast-redact/-/fast-redact-2.1.0.tgz#dfe3c1ca69367fb226f110aa4ec10ec85462ffdf" @@ -15364,6 +17202,23 @@ fast-shallow-equal@^1.0.0: resolved "https://registry.npmmirror.com/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b" integrity sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw== +fast-text-encoding@^1.0.0: + version "1.0.6" + resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz#0aa25f7f638222e3396d72bf936afcf1d42d6867" + integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== + +fast-uri@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" + integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== + +fast-xml-builder@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/fast-xml-builder/-/fast-xml-builder-1.1.5.tgz#50188e1452a5fa095f415d3e63dcac0a1dbcbf11" + integrity sha512-4TJn/8FKLeslLAH3dnohXqE3QSoxkhvaMzepOIZytwJXZO69Bfz0HBdDHzOTOon6G59Zrk6VQ2bEiv1t61rfkA== + dependencies: + path-expression-matcher "^1.1.3" + fast-xml-parser@4.2.5: version "4.2.5" resolved "https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" @@ -15371,6 +17226,15 @@ fast-xml-parser@4.2.5: dependencies: strnum "^1.0.5" +fast-xml-parser@5.5.8: + version "5.5.8" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.5.8.tgz#929571ed8c5eb96e6d9bd572ba14fc4b84875716" + integrity sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ== + dependencies: + fast-xml-builder "^1.1.4" + path-expression-matcher "^1.2.0" + strnum "^2.2.0" + fast-xml-parser@^4.3.0: version "4.3.3" resolved "https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-4.3.3.tgz#aeaf5778392329f17168c40c51bcbfec8ff965be" @@ -15404,19 +17268,42 @@ faye-websocket@^0.11.3: dependencies: websocket-driver ">=0.5.1" -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.npmmirror.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== +fbemitter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" + integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== + dependencies: + fbjs "^3.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs@^3.0.0, fbjs@^3.0.1: + version "3.0.5" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.5.tgz#aa0edb7d5caa6340011790bd9249dbef8a81128d" + integrity sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg== dependencies: - bser "2.1.1" + cross-fetch "^3.1.5" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^1.0.35" + +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== fecha@^4.2.0: version "4.2.3" resolved "https://registry.npmmirror.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== -figures@3.2.0, figures@^3.0.0: +figures@^3.0.0: version "3.2.0" resolved "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== @@ -15430,6 +17317,11 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +file-saver@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38" + integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== + file-type@^16.5.4: version "16.5.4" resolved "https://registry.npmmirror.com/file-type/-/file-type-16.5.4.tgz#474fb4f704bee427681f98dd390058a172a6c2fd" @@ -15444,13 +17336,6 @@ file-uri-to-path@1.0.0: resolved "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - filesize@^8.0.6: version "8.0.7" resolved "https://registry.npmmirror.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" @@ -15463,10 +17348,25 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -filter-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" - integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" finalhandler@1.2.0: version "1.2.0" @@ -15481,6 +17381,19 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" +finalhandler@~1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.2.tgz#1ebc2228fc7673aac4a472c310cc05b77d852b88" + integrity sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg== + dependencies: + debug "2.6.9" + encodeurl "~2.0.0" + escape-html "~1.0.3" + on-finished "~2.4.1" + parseurl "~1.3.3" + statuses "~2.0.2" + unpipe "~1.0.0" + find-file-up@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/find-file-up/-/find-file-up-2.0.1.tgz#4932dd81551af643893f8cda7453f221e3e28261" @@ -15500,13 +17413,6 @@ find-root@^1.1.0: resolved "https://registry.npmmirror.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -15514,7 +17420,7 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.0.0, find-up@^4.1.0: +find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -15530,13 +17436,6 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-yarn-workspace-root@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" - integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== - dependencies: - micromatch "^4.0.2" - flat-cache@^3.0.4: version "3.2.0" resolved "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" @@ -15546,17 +17445,12 @@ flat-cache@^3.0.4: keyv "^4.5.3" rimraf "^3.0.2" -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - flatstr@^1.0.12: version "1.0.12" resolved "https://registry.npmmirror.com/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931" integrity sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw== -flatted@3.3.1, flatted@^3.2.7: +flatted@^3.2.7: version "3.3.1" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== @@ -15566,6 +17460,19 @@ flatted@^3.2.9: resolved "https://registry.npmmirror.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== +flatted@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.2.tgz#f5c23c107f0f37de8dbdf24f13722b3b98d52726" + integrity sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA== + +flux@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.4.tgz#9661182ea81d161ee1a6a6af10d20485ef2ac572" + integrity sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw== + dependencies: + fbemitter "^3.0.0" + fbjs "^3.0.1" + fn.name@1.x.x: version "1.1.0" resolved "https://registry.npmmirror.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" @@ -15576,10 +17483,10 @@ follow-redirects@^1.0.0, follow-redirects@^1.15.4: resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== -follow-redirects@^1.15.6: - version "1.15.6" - resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== +follow-redirects@^1.15.11: + version "1.16.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.16.0.tgz#28474a159d3b9d11ef62050a14ed60e4df6d61bc" + integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw== for-each@^0.3.3: version "0.3.3" @@ -15588,6 +17495,13 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + foreach@^2.0.4: version "2.0.6" resolved "https://registry.npmmirror.com/foreach/-/foreach-2.0.6.tgz#87bcc8a1a0e74000ff2bf9802110708cfb02eb6e" @@ -15643,7 +17557,12 @@ fork-ts-checker-webpack-plugin@^9.0.0: semver "^7.3.5" tapable "^2.2.1" -form-data@^2.3.2, form-data@^2.5.0: +form-data-encoder@^1.7.2: + version "1.9.0" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.9.0.tgz#fd18d316b1ec830d2a8be8ad86c1cf0317320b34" + integrity sha512-rahaRMkN8P8d/tgK/BLPX+WBVM27NbvdXBxqQujBtkDAIFspaRqN7Od7lfdGQA6KAD+f82fYCLBq1ipvcu8qLw== + +form-data@^2.5.0: version "2.5.1" resolved "https://registry.npmmirror.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== @@ -15652,22 +17571,24 @@ form-data@^2.3.2, form-data@^2.5.0: combined-stream "^1.0.6" mime-types "^2.1.12" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== +form-data@^4.0.4, form-data@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" mime-types "^2.1.12" form-data@~2.3.2: @@ -15684,6 +17605,14 @@ format@^0.2.0: resolved "https://registry.npmmirror.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== +formdata-node@^4.3.3: + version "4.4.1" + resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2" + integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ== + dependencies: + node-domexception "1.0.0" + web-streams-polyfill "4.0.0-beta.3" + formidable@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.1.2.tgz#fa973a2bec150e4ce7cac15589d7a25fc30ebd89" @@ -15694,6 +17623,16 @@ formidable@^2.1.2: once "^1.4.0" qs "^6.11.0" +formstream@^1.1.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/formstream/-/formstream-1.5.2.tgz#81f282571665b8afd82e0df39399862cb2527c6d" + integrity sha512-NASf0lgxC1AyKNXQIrXTEYkiX99LhCEXTkiGObXAkpBui86a4u8FjH1o2bGb3PpqI3kafC+yw4zWeK6l6VHTgg== + dependencies: + destroy "^1.0.4" + mime "^2.5.2" + node-hex "^1.0.1" + pause-stream "~0.0.11" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -15704,6 +17643,15 @@ fp-ts@^2.10.0: resolved "https://registry.npmmirror.com/fp-ts/-/fp-ts-2.16.2.tgz#7faa90f6fc2e8cf84c711d2c4e606afe2be9e342" integrity sha512-CkqAjnIKFqvo3sCyoBTqgJvF+bHrSik584S9nhTjtBESLx26cbtVMR/T9a6ApChOcSDAaM3JydDmWDUn4EEXng== +framer-motion@^12.38.0: + version "12.38.0" + resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-12.38.0.tgz#cf28e072a95942881ca4e33fd33be41192fd146b" + integrity sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g== + dependencies: + motion-dom "^12.38.0" + motion-utils "^12.36.0" + tslib "^2.4.0" + framer-motion@^6.5.1: version "6.5.1" resolved "https://registry.npmmirror.com/framer-motion/-/framer-motion-6.5.1.tgz#802448a16a6eb764124bf36d8cbdfa6dd6b931a7" @@ -15730,11 +17678,6 @@ fresh@0.5.2, fresh@~0.5.2: resolved "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -fromentries@^1.3.1: - version "1.3.2" - resolved "https://registry.npmmirror.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" - integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== - fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -15759,7 +17702,7 @@ fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^11.0.0, fs-extra@^11.1.0, fs-extra@^11.1.1, fs-extra@^11.2.0, fs-extra@~11.2.0: +fs-extra@^11.0.0, fs-extra@^11.2.0, fs-extra@~11.2.0: version "11.2.0" resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== @@ -15777,7 +17720,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^2.0.0, fs-minipass@^2.1.0: +fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== @@ -15801,12 +17744,17 @@ fs.realpath@^1.0.0: resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fscreen@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fscreen/-/fscreen-1.2.0.tgz#1a8c88e06bc16a07b473ad96196fb06d6657f59e" + integrity sha512-hlq4+BU0hlPmwsFjwGGzZ+OZ9N/wq9Ljg/sq3pX+2CD7hrJsX9tJgWWK/wiNTFM212CLHWhicOoqwXyZGGetJg== + fsevents@2.3.2: version "2.3.2" resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fsevents@^2.3.2, fsevents@~2.3.2: +fsevents@~2.3.2: version "2.3.3" resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== @@ -15816,7 +17764,7 @@ function-bind@^1.1.1, function-bind@^1.1.2: resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: +function.prototype.name@^1.1.6: version "1.1.6" resolved "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== @@ -15826,6 +17774,18 @@ function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: es-abstract "^1.22.1" functions-have-names "^1.2.3" +function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" @@ -15836,20 +17796,6 @@ functions-have-names@^1.2.3: resolved "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.npmmirror.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - 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" - gaxios@^6.0.0, gaxios@^6.0.2, gaxios@^6.1.1: version "6.1.1" resolved "https://registry.npmmirror.com/gaxios/-/gaxios-6.1.1.tgz#549629f86a13e756b900f9ff7c94624670102938" @@ -15882,10 +17828,10 @@ generic-names@^4.0.0: dependencies: loader-utils "^3.2.0" -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +generic-pool@3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4" + integrity sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g== get-caller-file@^2.0.5: version "2.0.5" @@ -15913,6 +17859,22 @@ get-intrinsic@^1.2.4: has-symbols "^1.0.3" hasown "^2.0.0" +get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + get-nonce@^1.0.0: version "1.0.1" resolved "https://registry.npmmirror.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" @@ -15923,32 +17885,23 @@ get-package-type@^0.1.0: resolved "https://registry.npmmirror.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-pkg-repo@^4.2.1: - version "4.2.1" - resolved "https://registry.npmmirror.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" - integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== - dependencies: - "@hutson/parse-repository-url" "^3.0.0" - hosted-git-info "^4.0.0" - through2 "^2.0.0" - yargs "^16.2.0" - -get-port@5.1.1: +get-port@^5.1.1: version "5.1.1" - resolved "https://registry.npmmirror.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== -get-stream@6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" - integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== +get-port@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-7.2.0.tgz#db0d52eb2d89890cdc010ed0e9a6f2d4b78cbbe7" + integrity sha512-afP4W205ONCuMoPBqcR6PSXnzX35KTcJygfJfcp+QY+uwm3p20p1YczWXhlICIzGMCxYBQcySEcOgsJcrkyobg== -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== dependencies: - pump "^3.0.0" + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" get-stream@^6.0.0: version "6.0.1" @@ -15963,6 +17916,15 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + get-tsconfig@^4.7.0: version "4.7.5" resolved "https://registry.npmmirror.com/get-tsconfig/-/get-tsconfig-4.7.5.tgz#5e012498579e9a6947511ed0cd403272c7acbbaf" @@ -15977,42 +17939,33 @@ get-tsconfig@^4.7.2: dependencies: resolve-pkg-maps "^1.0.0" -getopts@2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/getopts/-/getopts-2.3.0.tgz#71e5593284807e03e2427449d4f6712a268666f4" - integrity sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA== - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== +get-uri@^6.0.1: + version "6.0.5" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.5.tgz#714892aa4a871db671abc5395e5e9447bc306a16" + integrity sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg== dependencies: - assert-plus "^1.0.0" + basic-ftp "^5.0.2" + data-uri-to-buffer "^6.0.2" + debug "^4.3.4" -git-raw-commits@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/git-raw-commits/-/git-raw-commits-3.0.0.tgz#5432f053a9744f67e8db03dbc48add81252cfdeb" - integrity sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw== +get-value@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-3.0.1.tgz#5efd2a157f1d6a516d7524e124ac52d0a39ef5a8" + integrity sha512-mKZj9JLQrwMBtj5wxi6MH8Z5eSKaERpAwjg43dPtlGI1ZVEgH/qC7T8/6R2OBSUA+zzHBZgICsVJaEIV2tKTDA== dependencies: - dargs "^7.0.0" - meow "^8.1.2" - split2 "^3.2.2" + isobject "^3.0.1" -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" +getopts@2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/getopts/-/getopts-2.3.0.tgz#71e5593284807e03e2427449d4f6712a268666f4" + integrity sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA== -git-semver-tags@^5.0.0: - version "5.0.1" - resolved "https://registry.npmmirror.com/git-semver-tags/-/git-semver-tags-5.0.1.tgz#db748aa0e43d313bf38dcd68624d8443234e1c15" - integrity sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: - meow "^8.1.2" - semver "^7.0.0" + assert-plus "^1.0.0" git-up@^7.0.0: version "7.0.0" @@ -16022,13 +17975,6 @@ git-up@^7.0.0: is-ssh "^1.4.0" parse-url "^8.1.0" -git-url-parse@13.1.0: - version "13.1.0" - resolved "https://registry.npmmirror.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" - integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== - dependencies: - git-up "^7.0.0" - git-url-parse@^14.0.0: version "14.0.0" resolved "https://registry.npmmirror.com/git-url-parse/-/git-url-parse-14.0.0.tgz#18ce834726d5fbca0c25a4555101aa277017418f" @@ -16036,19 +17982,19 @@ git-url-parse@^14.0.0: dependencies: git-up "^7.0.0" -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== +git-url-parse@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-15.0.0.tgz#207b74d8eb888955b1aaf5dfc5f5778084fa9fa9" + integrity sha512-5reeBufLi+i4QD3ZFftcJs9jC26aULFLBU23FeKM/b1rI0K6ofIeAblmDVO7Ht22zTDE9+CkJ3ZVb0CgJmz3UQ== dependencies: - ini "^1.3.2" + git-up "^7.0.0" github-from-package@0.0.0: version "0.0.0" resolved "https://registry.npmmirror.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob-parent@5.1.2, glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -16062,22 +18008,27 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" +glob-to-regex.js@^1.0.0, glob-to-regex.js@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz#2b323728271d133830850e32311f40766c5f6413" + integrity sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ== + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.4: - version "7.1.4" - resolved "https://registry.npmmirror.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== +glob@^10.0.0, glob@^10.4.1: + version "10.5.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== 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" + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" glob@^10.2.2, glob@^10.3.10: version "10.3.10" @@ -16101,7 +18052,16 @@ glob@^10.3.7: minipass "^7.1.2" path-scurry "^1.11.1" -glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7: +glob@^13.0.0: + version "13.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-13.0.6.tgz#078666566a425147ccacfbd2e332deb66a2be71d" + integrity sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw== + dependencies: + minimatch "^10.2.2" + minipass "^7.1.3" + path-scurry "^2.0.2" + +glob@^7.1.3, glob@^7.1.6, glob@^7.1.7: version "7.2.3" resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -16113,7 +18073,7 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.0, glob@^8.0.1, glob@^8.0.3, glob@^8.1.0: +glob@^8.0.1, glob@^8.1.0: version "8.1.0" resolved "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== @@ -16124,16 +18084,6 @@ glob@^8.0.0, glob@^8.0.1, glob@^8.0.3, glob@^8.1.0: minimatch "^5.0.1" once "^1.3.0" -glob@^9.2.0: - version "9.3.5" - resolved "https://registry.npmmirror.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" - integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== - dependencies: - fs.realpath "^1.0.0" - minimatch "^8.0.2" - minipass "^4.2.4" - path-scurry "^1.6.1" - global-agent@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" @@ -16182,11 +18132,6 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^13.19.0: version "13.24.0" resolved "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" @@ -16201,7 +18146,15 @@ globalthis@^1.0.1, globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globby@11.1.0, globby@^11.0.0, globby@^11.0.3, globby@^11.0.4, globby@^11.1.0: +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +globby@^11.0.0, globby@^11.0.4, globby@^11.1.0: version "11.1.0" resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -16250,24 +18203,12 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -got@^11.8.3: - version "11.8.6" - resolved "https://registry.npmmirror.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -16277,15 +18218,13 @@ graphemer@^1.4.0: resolved "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -graphiql@3.1.1: - version "3.1.1" - resolved "https://registry.npmmirror.com/graphiql/-/graphiql-3.1.1.tgz#77c64355b122662ba8c3e1a3cdf3f5c0251c6cad" - integrity sha512-FMNa981Wj8JBJJRTdryNyrVteigS8B7q+Q1fh1rW4IsFPaXNIs1VMs8kwqIZ8zERj4Fc64Ea750g3n6r2w9Zcg== +graphiql@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/graphiql/-/graphiql-3.9.0.tgz#2cc1a3f783e2d27a08cfeba0a937816b2f366e90" + integrity sha512-rJYFlHdBbug9+YbFSwRVvgfPjCayC7wHecZkx/qB4XLuQPFQZw/yB9pmHFtOJV6RiNBBHro3u1GdocKa3YcGRA== dependencies: - "@graphiql/react" "^0.20.3" - "@graphiql/toolkit" "^0.9.1" - graphql-language-service "^5.2.0" - markdown-it "^12.2.0" + "@graphiql/react" "^0.29.0" + react-compiler-runtime "19.1.0-rc.1" graphlib@^2.1.8: version "2.1.8" @@ -16294,51 +18233,44 @@ graphlib@^2.1.8: dependencies: lodash "^4.17.15" -graphql-config@^5.0.2: - version "5.0.3" - resolved "https://registry.npmmirror.com/graphql-config/-/graphql-config-5.0.3.tgz#d9aa2954cf47a927f9cb83cdc4e42ae55d0b321e" - integrity sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ== - dependencies: - "@graphql-tools/graphql-file-loader" "^8.0.0" - "@graphql-tools/json-file-loader" "^8.0.0" - "@graphql-tools/load" "^8.0.0" - "@graphql-tools/merge" "^9.0.0" - "@graphql-tools/url-loader" "^8.0.0" - "@graphql-tools/utils" "^10.0.0" - cosmiconfig "^8.1.0" - jiti "^1.18.2" - minimatch "^4.2.3" - string-env-interpolation "^1.0.1" - tslib "^2.4.0" +graphql-http@^1.22.0: + version "1.22.4" + resolved "https://registry.yarnpkg.com/graphql-http/-/graphql-http-1.22.4.tgz#47b52ef0ab1f412943aca33ecfcdf22de525d59b" + integrity sha512-OC3ucK988teMf+Ak/O+ZJ0N2ukcgrEurypp8ePyJFWq83VzwRAmHxxr+XxrMpxO/FIwI4a7m/Fzv3tWGJv0wPA== -graphql-language-service@5.2.0, graphql-language-service@^5.2.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/graphql-language-service/-/graphql-language-service-5.2.0.tgz#cfe22b2e911292d724451580632c67d908e5606a" - integrity sha512-o/ZgTS0pBxWm3hSF4+6GwiV1//DxzoLWEbS38+jqpzzy1d/QXBidwQuVYTOksclbtOJZ3KR/tZ8fi/tI6VpVMg== +graphql-language-service@5.5.0, graphql-language-service@^5.3.1: + version "5.5.0" + resolved "https://registry.yarnpkg.com/graphql-language-service/-/graphql-language-service-5.5.0.tgz#2e68b23bd5384f2fbf1e9391e907106e8246d025" + integrity sha512-9EvWrLLkF6Y5e29/2cmFoAO6hBPPAZlCyjznmpR11iFtRydfkss+9m6x+htA8h7YznGam+TtJwS6JuwoWWgb2Q== dependencies: + debounce-promise "^3.1.2" nullthrows "^1.0.0" vscode-languageserver-types "^3.17.1" -graphql-language-service@5.2.1: - version "5.2.1" - resolved "https://registry.npmmirror.com/graphql-language-service/-/graphql-language-service-5.2.1.tgz#8929cf93deadecc0fbb78fe8a0c55d178ffa7833" - integrity sha512-8ewD6otGO43vg2TiEGjoLz3CweTwfaf4ZnqfNREqZXS2JSJGXtsRBOMMknCxMfFVh4x14ql3jyDrXcyAAtbmkQ== +graphql-subscriptions@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-1.2.1.tgz#2142b2d729661ddf967b7388f7cf1dd4cf2e061d" + integrity sha512-95yD/tKi24q8xYa7Q9rhQN16AYj5wPbrb8tmHGM3WRc9EBmWrG/0kkMl+tQG8wcEuE9ibR4zyOM31p5Sdr2v4g== dependencies: - nullthrows "^1.0.0" - vscode-languageserver-types "^3.17.1" + iterall "^1.3.0" -graphql-tag@^2.10.3: +graphql-tag@^2.12.6: version "2.12.6" - resolved "https://registry.npmmirror.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== dependencies: tslib "^2.1.0" -graphql-ws@^5.14.0, graphql-ws@^5.4.1: +graphql-ws@^5.4.1: version "5.14.3" resolved "https://registry.npmmirror.com/graphql-ws/-/graphql-ws-5.14.3.tgz#fb1fba011a0ae9c4e86d831cae2ec27955168b9a" integrity sha512-F/i2xNIVbaEF2xWggID0X/UZQa2V8kqKDPO8hwmu53bVOcTL7uNkxnexeEgSCVxYBQUTUNEI8+e4LO1FOhKPKQ== +"graphql@^14.0.2 || ^15.5": + version "15.10.2" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.10.2.tgz#f57f8665cea9e77a80264d7eeb0d687079714e78" + integrity sha512-1PRqdDPAmViWr4h1GVBT8RoPZfWSGZa7kDzleTilOfVIslsgf+cia3Nl95v1KDmR4iERPaT7WzQ+tN4MJmbg3w== + graphql@^16.0.0, graphql@^16.8.1: version "16.8.1" resolved "https://registry.npmmirror.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" @@ -16364,7 +18296,7 @@ handle-thing@^2.0.0: resolved "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== -handlebars@^4.7.3, handlebars@^4.7.7: +handlebars@^4.7.3: version "4.7.8" resolved "https://registry.npmmirror.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== @@ -16389,11 +18321,6 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - harmony-reflect@^1.4.6: version "1.6.2" resolved "https://registry.npmmirror.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" @@ -16433,11 +18360,23 @@ has-proto@^1.0.1: resolved "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + has-tostringtag@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" @@ -16445,10 +18384,12 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-unicode@2.0.1, has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" hash-base@^3.0.0: version "3.1.0" @@ -16459,6 +18400,24 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" +hash-base@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.2.tgz#79d72def7611c3f6e3c3b5730652638001b10a74" + integrity sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg== + dependencies: + inherits "^2.0.4" + readable-stream "^2.3.8" + safe-buffer "^5.2.1" + to-buffer "^1.2.1" + +hash-base@~3.0.4: + version "3.0.5" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.5.tgz#52480e285395cf7fba17dc4c9e47acdc7f248a8a" + integrity sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg== + dependencies: + inherits "^2.0.4" + safe-buffer "^5.2.1" + hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" resolved "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" @@ -16474,11 +18433,81 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" +hasown@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.3.tgz#5e5c2b15b60370a4c7930c383dfb76bf17bc403c" + integrity sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg== + dependencies: + function-bind "^1.1.2" + +hast-util-from-parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz#aecfef73e3ceafdfa4550716443e4eb7b02e22b0" + integrity sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw== + dependencies: + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + hastscript "^7.0.0" + property-information "^6.0.0" + vfile "^5.0.0" + vfile-location "^4.0.0" + web-namespaces "^2.0.0" + hast-util-parse-selector@^2.0.0: version "2.2.5" resolved "https://registry.npmmirror.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== +hast-util-parse-selector@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz#25ab00ae9e75cbc62cf7a901f68a247eade659e2" + integrity sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA== + dependencies: + "@types/hast" "^2.0.0" + +hast-util-parse-selector@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz#352879fa86e25616036037dd8931fb5f34cb4a27" + integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== + dependencies: + "@types/hast" "^3.0.0" + +hast-util-raw@^7.2.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-7.2.3.tgz#dcb5b22a22073436dbdc4aa09660a644f4991d99" + integrity sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg== + dependencies: + "@types/hast" "^2.0.0" + "@types/parse5" "^6.0.0" + hast-util-from-parse5 "^7.0.0" + hast-util-to-parse5 "^7.0.0" + html-void-elements "^2.0.0" + parse5 "^6.0.0" + unist-util-position "^4.0.0" + unist-util-visit "^4.0.0" + vfile "^5.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + +hast-util-sanitize@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hast-util-sanitize/-/hast-util-sanitize-4.1.0.tgz#d90f8521f5083547095c5c63a7e03150303e0286" + integrity sha512-Hd9tU0ltknMGRDv+d6Ro/4XKzBqQnP/EZrpiTbpFYfXv/uOhWeKc+2uajcbEvAEH98VZd7eII2PiXm13RihnLw== + dependencies: + "@types/hast" "^2.0.0" + +hast-util-to-parse5@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz#c49391bf8f151973e0c9adcd116b561e8daf29f3" + integrity sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + hast-util-whitespace@^2.0.0: version "2.0.1" resolved "https://registry.npmmirror.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557" @@ -16495,6 +18524,28 @@ hastscript@^6.0.0: property-information "^5.0.0" space-separated-tokens "^1.0.0" +hastscript@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-7.2.0.tgz#0eafb7afb153d047077fa2a833dc9b7ec604d10b" + integrity sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-parse-selector "^3.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + +hastscript@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.1.tgz#dbc84bef6051d40084342c229c451cd9dc567dff" + integrity sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w== + dependencies: + "@types/hast" "^3.0.0" + comma-separated-tokens "^2.0.0" + hast-util-parse-selector "^4.0.0" + property-information "^7.0.0" + space-separated-tokens "^2.0.0" + he@^1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -16520,11 +18571,16 @@ hey-listen@^1.0.8: resolved "https://registry.npmmirror.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== -highlight.js@^10.4.1, highlight.js@^10.7.2, highlight.js@~10.7.0: +highlight.js@^10.4.1, highlight.js@^10.7.1, highlight.js@^10.7.2, highlight.js@~10.7.0: version "10.7.3" - resolved "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== +highlightjs-vue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz#fdfe97fbea6354e70ee44e3a955875e114db086d" + integrity sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA== + history@^5.0.0: version "5.3.0" resolved "https://registry.npmmirror.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" @@ -16555,37 +18611,16 @@ homedir-polyfill@^1.0.1: dependencies: parse-passwd "^1.0.0" +hookified@^1.10.0: + version "1.15.1" + resolved "https://registry.yarnpkg.com/hookified/-/hookified-1.15.1.tgz#b1fafeaa5489cdc29cb85546a8f837ed4ffbbcb6" + integrity sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg== + hoopy@^0.1.4: version "0.1.4" resolved "https://registry.npmmirror.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^3.0.6: - version "3.0.8" - resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" - integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^6.0.0: - version "6.1.1" - resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" - integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== - dependencies: - lru-cache "^7.5.1" - hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -16601,19 +18636,12 @@ hpagent@^1.2.0: resolved "https://registry.npmmirror.com/hpagent/-/hpagent-1.2.0.tgz#0ae417895430eb3770c03443456b8d90ca464903" integrity sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA== -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - -html-encoding-sniffer@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" - integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== +html-encoding-sniffer@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz#f8d9390b3b348b50d4f61c16dd2ef5c05980a882" + integrity sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg== dependencies: - whatwg-encoding "^2.0.0" + "@exodus/bytes" "^1.6.0" html-entities@^2.1.0: version "2.4.0" @@ -16625,11 +18653,6 @@ html-entities@^2.4.0: resolved "https://registry.npmmirror.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - html-minifier-terser@^6.0.2: version "6.1.0" resolved "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" @@ -16643,10 +18666,15 @@ html-minifier-terser@^6.0.2: relateurl "^0.2.7" terser "^5.10.0" -html-webpack-plugin@^5.3.1: - version "5.6.0" - resolved "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz#50a8fa6709245608cb00e811eacecb8e0d7b7ea0" - integrity sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw== +html-void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-2.0.1.tgz#29459b8b05c200b6c5ee98743c41b979d577549f" + integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A== + +html-webpack-plugin@^5.6.3: + version "5.6.7" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.7.tgz#429bab4e12abf3c07e1c608886608e2df2c06b11" + integrity sha512-md+vXtdCAe60s1k6AU3dUyMJnDxUyQAwfwPKoLisvgUF1IXjtlLsk2se54+qfL9Mdm26bbwvjJybpNx48NKRLw== dependencies: "@types/html-minifier-terser" "^6.0.0" html-minifier-terser "^6.0.2" @@ -16664,7 +18692,7 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" -http-assert@^1.3.0: +http-assert@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.5.0.tgz#c389ccd87ac16ed2dfa6246fd73b926aa00e6b8f" integrity sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w== @@ -16672,7 +18700,7 @@ http-assert@^1.3.0: deep-equal "~1.0.1" http-errors "~1.8.0" -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: +http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== @@ -16682,6 +18710,15 @@ http-deceiver@^1.2.7: resolved "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== +http-encoding@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/http-encoding/-/http-encoding-2.2.0.tgz#add47748bd903c61f27d7438a6ce6e9c2335e037" + integrity sha512-sotL89NNHWS7TjaoswmKkNKf57+nAYCg3fbGCclpNLriVGkOSgrAWQ9DLqahnwacY+gednJk+HFdZrpKw/Ff6w== + dependencies: + brotli-wasm "^3.0.0" + pify "^5.0.0" + zstd-codec "^0.1.5" + http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -16693,16 +18730,16 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-errors@^1.6.3, http-errors@~1.8.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== +http-errors@^2.0.0, http-errors@~2.0.0, http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" http-errors@~1.6.2: version "1.6.3" @@ -16714,20 +18751,22 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-errors@~1.8.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" @@ -16737,6 +18776,14 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" +http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http-proxy-middleware@*: version "3.0.0" resolved "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz#550790357d6f92a9b82ab2d63e07343a791cf26b" @@ -16760,6 +18807,17 @@ http-proxy-middleware@^2.0.0, http-proxy-middleware@^2.0.3, http-proxy-middlewar is-plain-obj "^3.0.0" micromatch "^4.0.2" +http-proxy-middleware@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz#e9e63d68afaa4eee3d147f39149ab84c0c2815ef" + integrity sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" @@ -16778,13 +18836,13 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.npmmirror.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== +http2-wrapper@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" + integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== dependencies: quick-lru "^5.1.1" - resolve-alpn "^1.0.0" + resolve-alpn "^1.2.0" https-browserify@^1.0.0: version "1.0.0" @@ -16807,6 +18865,14 @@ https-proxy-agent@^7.0.1: agent-base "^7.0.2" debug "4" +https-proxy-agent@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== + dependencies: + agent-base "^7.1.2" + debug "4" + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -16841,14 +18907,14 @@ i18next@^22.4.15: dependencies: "@babel/runtime" "^7.20.6" -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.24: version "0.4.24" resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3: +iconv-lite@^0.6.2, iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -16865,6 +18931,13 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== +idb-keyval@5.1.5: + version "5.1.5" + resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-5.1.5.tgz#be11174bac0cb756dba4cc86fb36b6cd63f5ce6d" + integrity sha512-J1utxYWQokYjy01LvDQ7WmiAtZCGUSkVi9EIBfUSyLOr/BesnMIxNGASTh9A1LzeISSjSqEPsfFdTss7EE7ofQ== + dependencies: + safari-14-idb-fix "^1.0.6" + identity-obj-proxy@3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" @@ -16884,18 +18957,16 @@ ignore-walk@^5.0.1: dependencies: minimatch "^5.0.1" -ignore-walk@^6.0.0: - version "6.0.4" - resolved "https://registry.npmmirror.com/ignore-walk/-/ignore-walk-6.0.4.tgz#89950be94b4f522225eb63a13c56badb639190e9" - integrity sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw== - dependencies: - minimatch "^9.0.0" - -ignore@^5.0.4, ignore@^5.1.4, ignore@^5.2.0, ignore@^5.2.4: +ignore@^5.1.4, ignore@^5.2.0: version "5.3.0" resolved "https://registry.npmmirror.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== +ignore@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + immediate@~3.0.5: version "3.0.6" resolved "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -16933,14 +19004,6 @@ import-from@^3.0.0: dependencies: resolve-from "^5.0.0" -import-local@3.1.0, import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.npmmirror.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -16951,10 +19014,16 @@ indent-string@^4.0.0: resolved "https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== +infinispan@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/infinispan/-/infinispan-0.12.0.tgz#15d9cad99cdabb2a6a72efaf0ee78dffc526ea30" + integrity sha512-oKvFUOKXZj36onrdS8BE/6AKwyCqsjdXlEln6iuqqNtcLGXO15XdmDgsTzK78ha2XMCzoDNFmfK+K02OxrOuWQ== + dependencies: + buffer-xor "^2.0.2" + log4js "^6.4.6" + protobufjs "^7.0.0" + underscore "^1.13.3" + urllib "^3.23.0" inflight@^1.0.4: version "1.0.6" @@ -16964,7 +19033,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -16974,24 +19043,11 @@ inherits@2.0.3: resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== -ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@^1.3.8, ini@~1.3.0: +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.8" resolved "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/init-package-json/-/init-package-json-5.0.0.tgz#030cf0ea9c84cfc1b0dc2e898b45d171393e4b40" - integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw== - dependencies: - npm-package-arg "^10.0.0" - promzard "^1.0.0" - read "^2.0.0" - read-package-json "^6.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^5.0.0" - inline-style-parser@0.1.1: version "0.1.1" resolved "https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" @@ -17005,7 +19061,14 @@ inline-style-prefixer@^7.0.0: css-in-js-utils "^3.1.0" fast-loops "^1.1.3" -inquirer@^8.2.0, inquirer@^8.2.4: +inline-style-prefixer@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-7.0.1.tgz#9310f3cfa2c6f3901d1480f373981c02691781e8" + integrity sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw== + dependencies: + css-in-js-utils "^3.1.0" + +inquirer@^8.2.0: version "8.2.6" resolved "https://registry.npmmirror.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== @@ -17035,11 +19098,30 @@ internal-slot@^1.0.4, internal-slot@^1.0.5: hasown "^2.0.0" side-channel "^1.0.4" +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" + interpret@^2.2.0: version "2.2.0" resolved "https://registry.npmmirror.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== +intl-messageformat@^10.1.0: + version "10.7.18" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.7.18.tgz#51a6f387afbca9b0f881b2ec081566db8c540b0d" + integrity sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g== + dependencies: + "@formatjs/ecma402-abstract" "2.3.6" + "@formatjs/fast-memoize" "2.2.7" + "@formatjs/icu-messageformat-parser" "2.11.4" + tslib "^2.8.0" + invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.npmmirror.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -17079,6 +19161,31 @@ ioredis@^5.3.2: redis-parser "^3.0.0" standard-as-callback "^2.1.0" +iovalkey@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/iovalkey/-/iovalkey-0.3.3.tgz#a4df1b2834df9aa3423b280a5b5a803138b4434c" + integrity sha512-4rTJX6Q5wTYEvxboXi8DsEiUo+OvqJGtLYOSGm37KpdRXsG5XJjbVtYKGJpPSWP+QT7rWscA4vsrdmzbEbenpw== + dependencies: + "@iovalkey/commands" "^0.1.0" + cluster-key-slot "^1.1.0" + debug "^4.3.4" + denque "^2.1.0" + lodash.defaults "^4.2.0" + lodash.isarguments "^3.1.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" + +ip-address@10.1.0, ip-address@^10.0.1: + version "10.1.0" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.1.0.tgz#d8dcffb34d0e02eb241427444a6e23f5b0595aa4" + integrity sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q== + +ip-regex@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== + ip@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" @@ -17094,11 +19201,21 @@ ipaddr.js@^2.1.0: resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== +ipaddr.js@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.3.0.tgz#71dce70e1398122208996d1c22f2ba46a24b1abc" + integrity sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg== + is-alphabetical@^1.0.0: version "1.0.4" resolved "https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== +is-alphabetical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== + is-alphanumerical@^1.0.0: version "1.0.4" resolved "https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" @@ -17107,6 +19224,14 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" +is-alphanumerical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== + dependencies: + is-alphabetical "^2.0.0" + is-decimal "^2.0.0" + is-arguments@^1.0.4, is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" @@ -17124,6 +19249,15 @@ is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: get-intrinsic "^1.2.0" is-typed-array "^1.1.10" +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -17148,6 +19282,13 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -17163,6 +19304,14 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-buffer@^2.0.0: version "2.0.5" resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" @@ -17180,20 +19329,36 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-ci@3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== +is-cidr@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" + integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== dependencies: - ci-info "^3.2.0" + cidr-regex "^3.1.1" -is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0, is-core-module@^2.8.1: +is-core-module@^2.13.0: version "2.13.1" resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: hasown "^2.0.0" +is-core-module@^2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -17201,11 +19366,24 @@ is-date-object@^1.0.1, is-date-object@^1.0.5: dependencies: has-tostringtag "^1.0.0" +is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + is-decimal@^1.0.0: version "1.0.4" resolved "https://registry.npmmirror.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== +is-decimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== + is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" @@ -17221,23 +19399,18 @@ is-extglob@^2.1.1: resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - is-generator-function@^1.0.10, is-generator-function@^1.0.7: version "1.0.10" resolved "https://registry.npmmirror.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" @@ -17257,6 +19430,11 @@ is-hexadecimal@^1.0.0: resolved "https://registry.npmmirror.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== +is-hexadecimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" + integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== + is-in-browser@^1.0.2, is-in-browser@^1.1.3: version "1.1.3" resolved "https://registry.npmmirror.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" @@ -17284,16 +19462,34 @@ is-map@^2.0.1, is-map@^2.0.2: resolved "https://registry.npmmirror.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + is-module@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== +is-nan@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + is-network-error@^1.0.0: version "1.1.0" resolved "https://registry.npmmirror.com/is-network-error/-/is-network-error-1.1.0.tgz#d26a760e3770226d11c169052f266a4803d9c997" @@ -17311,26 +19507,24 @@ is-number-object@^1.0.4: dependencies: has-tostringtag "^1.0.0" +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - is-plain-obj@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" @@ -17388,6 +19582,16 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + is-root@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" @@ -17398,6 +19602,11 @@ is-set@^2.0.1, is-set@^2.0.2: resolved "https://registry.npmmirror.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + is-shared-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" @@ -17405,6 +19614,13 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== + dependencies: + call-bound "^1.0.3" + is-ssh@^1.4.0: version "1.4.0" resolved "https://registry.npmmirror.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" @@ -17412,12 +19628,7 @@ is-ssh@^1.4.0: dependencies: protocols "^2.0.1" -is-stream@2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-stream@^2.0.0: +is-stream@^2.0.0, is-stream@^2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== @@ -17429,6 +19640,14 @@ is-string@^1.0.5, is-string@^1.0.7: dependencies: has-tostringtag "^1.0.0" +is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" resolved "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" @@ -17436,12 +19655,14 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== dependencies: - text-extensions "^1.0.0" + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed-array@^1.1.9: version "1.1.12" @@ -17450,6 +19671,13 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed- dependencies: which-typed-array "^1.1.11" +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -17465,6 +19693,11 @@ is-weakmap@^2.0.1: resolved "https://registry.npmmirror.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -17472,6 +19705,13 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-weakref@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== + dependencies: + call-bound "^1.0.3" + is-weakset@^2.0.1: version "2.0.2" resolved "https://registry.npmmirror.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" @@ -17480,12 +19720,20 @@ is-weakset@^2.0.1: call-bind "^1.0.2" get-intrinsic "^1.1.1" +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== + dependencies: + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + is-windows@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -is-wsl@^2.1.1, is-wsl@^2.2.0: +is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -17499,16 +19747,16 @@ is-wsl@^3.1.0: dependencies: is-inside-container "^1.0.0" -isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - isarray@^2.0.5: version "2.0.5" resolved "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isbinaryfile@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/isbinaryfile/-/isbinaryfile-5.0.0.tgz#034b7e54989dab8986598cbcea41f66663c65234" @@ -17519,33 +19767,30 @@ isexe@^2.0.0: resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isexe@^3.1.1: + version "3.1.5" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.5.tgz#42e368f68d5e10dadfee4fda7b550bc2d8892dc9" + integrity sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w== + isobject@^3.0.1: version "3.0.1" resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isolated-vm@^4.5.0: - version "4.7.2" - resolved "https://registry.npmmirror.com/isolated-vm/-/isolated-vm-4.7.2.tgz#5670d5cce1d92004f9b825bec5b0b11fc7501b65" - integrity sha512-JVEs5gzWObzZK5+OlBplCdYSpokMcdhLSs/xWYYxmYWVfOOFF4oZJsYh7E/FmfX8e7gMioXMpMMeEyX1afuKrg== +isolated-vm@5.0.1, isolated-vm@^6.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/isolated-vm/-/isolated-vm-5.0.1.tgz#d87b12cf8889e351cb1598a4aeea00bb458bf20c" + integrity sha512-hs7+ff59Z2zDvavfcjuot/r1gm6Bmpt+GoZxmVfxUmXaX5scOvUq/Rnme+mUtSh5lW41hH8gAuvk/yTJDYO8Fg== dependencies: prebuild-install "^7.1.1" -isomorphic-dompurify@^0.13.0: - version "0.13.0" - resolved "https://registry.npmmirror.com/isomorphic-dompurify/-/isomorphic-dompurify-0.13.0.tgz#a4dde357e8531018a85ebb2dd56c4794b6739ba3" - integrity sha512-j2/kt/PGbxvfeEm1uiRLlttZkQdn3hFe1rMr/wm3qFnMXSIw0Nmqu79k+TIoSj+KOwO98Sz9TbuNHU7ejv7IZA== - dependencies: - "@types/dompurify" "^2.1.0" - dompurify "^2.2.7" - jsdom "^16.5.2" - -isomorphic-form-data@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/isomorphic-form-data/-/isomorphic-form-data-2.0.0.tgz#9f6adf1c4c61ae3aefd8f110ab60fb9b143d6cec" - integrity sha512-TYgVnXWeESVmQSg4GLVbalmQ+B4NPi/H4eWxqALKj63KsUrcu301YDjBqaOw3h+cbak7Na4Xyps3BiptHtxTfg== +isomorphic-dompurify@^2.14.0: + version "2.36.0" + resolved "https://registry.yarnpkg.com/isomorphic-dompurify/-/isomorphic-dompurify-2.36.0.tgz#91e0e554cc3130cc4b7bfb77264f58e51ebd561e" + integrity sha512-E8YkGyPY3a/U5s0WOoc8Ok+3SWL/33yn2IHCoxCFLBUUPVy9WGa++akJZFxQCcJIhI+UvYhbrbnTIFQkHKZbgA== dependencies: - form-data "^2.3.2" + dompurify "^3.3.1" + jsdom "^28.0.0" isomorphic-git@^1.23.0: version "1.25.3" @@ -17564,79 +19809,49 @@ isomorphic-git@^1.23.0: sha.js "^2.4.9" simple-get "^4.0.1" +isomorphic-textencoder@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-textencoder/-/isomorphic-textencoder-1.0.1.tgz#38dcd3b4416d29cd33e274f64b99ae567cd15e83" + integrity sha512-676hESgHullDdHDsj469hr+7t3i/neBKU9J7q1T4RHaWwLAsaQnywC0D1dIUId0YZ+JtVrShzuBk1soo0+GVcQ== + dependencies: + fast-text-encoding "^1.0.0" + +isomorphic-timers-promises@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz#e4137c24dbc54892de8abae3a4b5c1ffff381598" + integrity sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ== + isomorphic-ws@5.0.0, isomorphic-ws@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.2" - resolved "https://registry.npmmirror.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" - integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-instrument@^6.0.0: - version "6.0.1" - resolved "https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" - integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^7.5.4" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.npmmirror.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.npmmirror.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" +iterall@^1.2.1, iterall@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" + integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== +iterator.prototype@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39" + integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== dependencies: - define-properties "^1.2.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.4" - set-function-name "^2.0.1" + define-data-property "^1.1.4" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + get-proto "^1.0.0" + has-symbols "^1.1.0" + set-function-name "^2.0.2" jackspeak@^2.3.5: version "2.3.6" @@ -17656,96 +19871,6 @@ jackspeak@^3.1.2: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -jake@^10.8.5: - version "10.8.7" - resolved "https://registry.npmmirror.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - dependencies: - execa "^5.0.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" - -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.0" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^29.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-json-comments "^3.1.1" - jest-css-modules@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/jest-css-modules/-/jest-css-modules-2.1.0.tgz#9c25ebe9d0214d8f55861a442268fdd4b01b4781" @@ -17753,7 +19878,7 @@ jest-css-modules@^2.1.0: dependencies: identity-obj-proxy "3.0.0" -"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1, jest-diff@^29.7.0: +jest-diff@^29.7.0: version "29.7.0" resolved "https://registry.npmmirror.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== @@ -17763,229 +19888,40 @@ jest-css-modules@^2.1.0: jest-get-type "^29.6.3" pretty-format "^29.7.0" -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" - -jest-environment-jsdom@^29.0.2: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz#d206fa3551933c3fd519e5dfdb58a0f5139a837f" - integrity sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/jsdom" "^20.0.0" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - jsdom "^20.0.0" - -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - jest-get-type@^29.6.3: version "29.6.3" resolved "https://registry.npmmirror.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - jest-matcher-utils@^29.7.0: version "29.7.0" resolved "https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.npmmirror.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" - -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" - slash "^3.0.0" - -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^29.0.2, jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - strip-bom "^4.0.0" + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-snapshot@^29.7.0: +jest-message-util@^29.7.0: version "29.7.0" - resolved "https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-jsx" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" + resolved "https://registry.npmmirror.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" + "@types/stack-utils" "^2.0.0" chalk "^4.0.0" - expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" + micromatch "^4.0.4" pretty-format "^29.7.0" - semver "^7.5.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-regex-util@30.0.1: + version "30.0.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-30.0.1.tgz#f17c1de3958b67dfe485354f5a10093298f2a49b" + integrity sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA== jest-util@^29.7.0: version "29.7.0" @@ -17999,32 +19935,6 @@ jest-util@^29.7.0: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.0" - -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== - dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" - jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -18044,20 +19954,10 @@ jest-worker@^29.7.0: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^29.7.0: - version "29.7.0" - resolved "https://registry.npmmirror.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== - dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" - -jiti@^1.18.2: - version "1.21.0" - resolved "https://registry.npmmirror.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" - integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== +jiti@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.2.tgz#d19b7732ebb6116b06e2038da74a55366faef560" + integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A== jmespath@^0.15.0: version "0.15.0" @@ -18079,6 +19979,11 @@ jose@^5.0.0: resolved "https://registry.npmmirror.com/jose/-/jose-5.4.0.tgz#4f6c2357e7b3cd4bc10ec65bb29e677d7adfbc84" integrity sha512-6rpxTHPAQyWMb9A35BroFl1Sp0ST3DpPcm5EVIxZxdH+e0Hv9fwhyB3XLKFUcHNpdSDnETmBfuPPTTlYz5+USw== +jose@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/jose/-/jose-6.2.2.tgz#d6b5279b89b3e88d531c202e3fbe351f39a44aac" + integrity sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ== + js-base64@^3.6.0: version "3.7.6" resolved "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.6.tgz#6ccb5d761b48381fd819f9ce04998866dbcbbc99" @@ -18104,14 +20009,14 @@ js-levenshtein@^1.1.6: resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@4.1.0, js-yaml@=4.1.0, js-yaml@^4.0.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== +js-yaml@=4.1.1, js-yaml@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== dependencies: argparse "^2.0.1" -js-yaml@^3.10.0, js-yaml@^3.13.1, js-yaml@^3.6.1, js-yaml@^3.8.3: +js-yaml@^3.10.0, js-yaml@^3.6.1, js-yaml@^3.8.3: version "3.14.1" resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -18119,90 +20024,59 @@ js-yaml@^3.10.0, js-yaml@^3.13.1, js-yaml@^3.6.1, js-yaml@^3.8.3: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.0.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -jsdom@^16.5.2: - version "16.7.0" - resolved "https://registry.npmmirror.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - -jsdom@^20.0.0: - version "20.0.3" - resolved "https://registry.npmmirror.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" - integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== - dependencies: - abab "^2.0.6" - acorn "^8.8.1" - acorn-globals "^7.0.0" - cssom "^0.5.0" - cssstyle "^2.3.0" - data-urls "^3.0.2" - decimal.js "^10.4.2" - domexception "^4.0.0" - escodegen "^2.0.0" - form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.1" +jsdom@^28.0.0: + version "28.1.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-28.1.0.tgz#ac4203e58fd24d7b0f34359ab00d6d9caebd4b62" + integrity sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug== + dependencies: + "@acemir/cssom" "^0.9.31" + "@asamuzakjp/dom-selector" "^6.8.1" + "@bramus/specificity" "^2.4.2" + "@exodus/bytes" "^1.11.0" + cssstyle "^6.0.1" + data-urls "^7.0.0" + decimal.js "^10.6.0" + html-encoding-sniffer "^6.0.0" + http-proxy-agent "^7.0.2" + https-proxy-agent "^7.0.6" is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.2" - parse5 "^7.1.1" + parse5 "^8.0.0" saxes "^6.0.0" symbol-tree "^3.2.4" - tough-cookie "^4.1.2" - w3c-xmlserializer "^4.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" - ws "^8.11.0" - xml-name-validator "^4.0.0" + tough-cookie "^6.0.0" + undici "^7.21.0" + w3c-xmlserializer "^5.0.0" + webidl-conversions "^8.0.1" + whatwg-mimetype "^5.0.0" + whatwg-url "^16.0.0" + xml-name-validator "^5.0.0" jsep@^1.1.2, jsep@^1.2.0: version "1.3.8" resolved "https://registry.npmmirror.com/jsep/-/jsep-1.3.8.tgz#facb6eb908d085d71d950bd2b24b757c7b8a46d7" integrity sha512-qofGylTGgYj9gZFsHuyWAN4jr35eJ66qJCK4eKDnldohuUoQFbU3iZn2zjvEbd9wOAhP9Wx5DsAAduTyE1PSWQ== -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +jsep@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsep/-/jsep-1.4.0.tgz#19feccbfa51d8a79f72480b4b8e40ce2e17152f0" + integrity sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw== json-bigint@^1.0.0: version "1.0.0" @@ -18216,21 +20090,11 @@ json-buffer@3.0.1, json-buffer@^3.0.1: resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-parse-even-better-errors@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz#02bb29fb5da90b5444581749c22cedd3597c6cb0" - integrity sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg== - json-pointer@0.6.2: version "0.6.2" resolved "https://registry.npmmirror.com/json-pointer/-/json-pointer-0.6.2.tgz#f97bd7550be5e9ea901f8c9264c9d436a22a93cd" @@ -18295,16 +20159,6 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stable-stringify@^1.0.2: - version "1.1.1" - resolved "https://registry.npmmirror.com/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz#52d4361b47d49168bcc4e564189a42e5a7439454" - integrity sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg== - dependencies: - call-bind "^1.0.5" - isarray "^2.0.5" - jsonify "^0.0.1" - object-keys "^1.1.1" - json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -18317,7 +20171,7 @@ json5@^1.0.1, json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.1.3, json5@^2.2.2, json5@^2.2.3: +json5@^2.1.2, json5@^2.1.3: version "2.2.3" resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -18327,11 +20181,6 @@ jsonata@^2.0.4: resolved "https://registry.npmmirror.com/jsonata/-/jsonata-2.0.5.tgz#2b3b5098c019b264c4fae061a9cb24d59c7115a2" integrity sha512-wEse9+QLIIU5IaCgtJCPsFi/H4F3qcikWzF4bAELZiRz08ohfx3Q6CjDRf4ZPF5P/92RI3KIHtb7u3jqPaHXdQ== -jsonc-parser@3.2.0: - version "3.2.0" - resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - jsonc-parser@^3.2.0: version "3.2.1" resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" @@ -18358,21 +20207,20 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonify@^0.0.1: - version "0.0.1" - resolved "https://registry.npmmirror.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" - integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== - -jsonparse@^1.2.0, jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.npmmirror.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - jsonpath-plus@7.1.0: version "7.1.0" resolved "https://registry.npmmirror.com/jsonpath-plus/-/jsonpath-plus-7.1.0.tgz#9ac63c3d32a4d91ada68d57e056cb7983e73290a" integrity sha512-gTaNRsPWO/K2KY6MrqaUFClF9kmuM6MFH5Dhg1VYDODgFbByw1yb7xu3hrViE/sz+dGOeMWgCzwUwQtAnCTE9g== +jsonpath-plus@^10.0.7, jsonpath-plus@^10.3.0, "jsonpath-plus@^6.0.1 || ^10.1.0": + version "10.4.0" + resolved "https://registry.yarnpkg.com/jsonpath-plus/-/jsonpath-plus-10.4.0.tgz#73cf545c231afda21452150b7a2a58e48e109702" + integrity sha512-T92WWatJXmhBbKsgH/0hl+jxjdXrifi5IKeMY02DWggRxX0UElcbVzPlmgLTbvsPeW1PasQ6xE2Q75stkhGbsA== + dependencies: + "@jsep-plugin/assignment" "^1.3.0" + "@jsep-plugin/regex" "^1.0.4" + jsep "^1.4.0" + jsonpath-plus@^6.0.1: version "6.0.1" resolved "https://registry.npmmirror.com/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz#9a3e16cedadfab07a3d8dc4e8cd5df4ed8f49c4d" @@ -18397,10 +20245,10 @@ jsonpointer@^5.0.0, jsonpointer@^5.0.1: resolved "https://registry.npmmirror.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== -jsonschema@^1.2.6: - version "1.4.1" - resolved "https://registry.npmmirror.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" - integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== +jsonschema@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.5.0.tgz#f6aceb1ab9123563dd901d05f81f9d4883d3b7d8" + integrity sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw== jsonwebtoken@^9.0.0, jsonwebtoken@^9.0.2: version "9.0.2" @@ -18559,25 +20407,33 @@ keygrip@~1.1.0: dependencies: tsscmp "1.0.6" -keyv@^4.0.0, keyv@^4.5.2, keyv@^4.5.3: +keytar@^7.9.0: + version "7.9.0" + resolved "https://registry.yarnpkg.com/keytar/-/keytar-7.9.0.tgz#4c6225708f51b50cbf77c5aae81721964c2918cb" + integrity sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ== + dependencies: + node-addon-api "^4.3.0" + prebuild-install "^7.0.1" + +keyv@*, keyv@^5.2.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-5.6.0.tgz#03044074c6b4d072d0a62c7b9fa649537baf0105" + integrity sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw== + dependencies: + "@keyv/serialize" "^1.1.1" + +keyv@^4.5.2, keyv@^4.5.3: version "4.5.4" resolved "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" -kind-of@^6.0.2, kind-of@^6.0.3: +kind-of@^6.0.2: version "6.0.3" resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -klaw-sync@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" - integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== - dependencies: - graceful-fs "^4.1.11" - kleur@^3.0.3: version "3.0.3" resolved "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -18608,57 +20464,36 @@ knex@3, knex@^3.0.0: tarn "^3.0.2" tildify "2.0.0" -koa-compose@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" - integrity sha512-8gen2cvKHIZ35eDEik5WOo8zbVp9t4cP8p4hW4uE55waxolLRexKKrqfCpwhGVppnB40jWeF8bZeTVg99eZgPw== - dependencies: - any-promise "^1.1.0" - koa-compose@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== -koa-convert@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" - integrity sha512-K9XqjmEDStGX09v3oxR7t5uPRy0jqJdvodHa6wxWTHrTfDq0WUNnYTOOUZN6g8OM8oZQXprQASbiIXG2Ez8ehA== +koa@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/koa/-/koa-3.0.3.tgz#40a97b6da0c0d49a704af82db2b3e5a618ed9042" + integrity sha512-MeuwbCoN1daWS32/Ni5qkzmrOtQO2qrnfdxDHjrm6s4b59yG4nexAJ0pTEFyzjLp0pBVO80CZp0vW8Ze30Ebow== dependencies: - co "^4.6.0" - koa-compose "^3.0.0" - -koa@2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/koa/-/koa-2.11.0.tgz#fe5a51c46f566d27632dd5dc8fd5d7dd44f935a4" - integrity sha512-EpR9dElBTDlaDgyhDMiLkXrPwp6ZqgAIBvhhmxQ9XN4TFgW+gEz6tkcsNI6BnUbUftrKDjVFj4lW2/J2aNBMMA== - dependencies: - accepts "^1.3.5" - cache-content-type "^1.0.0" - content-disposition "~0.5.2" - content-type "^1.0.4" - cookies "~0.8.0" - debug "~3.1.0" + accepts "^1.3.8" + content-disposition "~0.5.4" + content-type "^1.0.5" + cookies "~0.9.1" delegates "^1.0.0" - depd "^1.1.2" - destroy "^1.0.4" - encodeurl "^1.0.2" - error-inject "^1.0.0" + destroy "^1.2.0" + encodeurl "^2.0.0" escape-html "^1.0.3" fresh "~0.5.2" - http-assert "^1.3.0" - http-errors "^1.6.3" - is-generator-function "^1.0.7" + http-assert "^1.5.0" + http-errors "^2.0.0" koa-compose "^4.1.0" - koa-convert "^1.2.0" - on-finished "^2.3.0" - only "~0.0.2" - parseurl "^1.3.2" - statuses "^1.5.0" - type-is "^1.6.16" + mime-types "^3.0.1" + on-finished "^2.4.1" + parseurl "^1.3.3" + statuses "^2.0.1" + type-is "^2.0.1" vary "^1.1.2" -kubernetes-models@^4.1.0, kubernetes-models@^4.3.1: +kubernetes-models@^4.3.1: version "4.3.1" resolved "https://registry.npmmirror.com/kubernetes-models/-/kubernetes-models-4.3.1.tgz#14b8e465410f22d96270e71f9bb62bf7e5066e9c" integrity sha512-0/8E6tfDGo1mKq0g2gTfUwbBv9oaSQ+xjQ5xjCb4NRZD0nTvErwzBoEijym3eGX+L2RJjNKIBhI9k6VTj1dQWA== @@ -18700,87 +20535,6 @@ lazystream@^1.0.0: dependencies: readable-stream "^2.0.5" -lerna@^7.3.0: - version "7.4.2" - resolved "https://registry.npmmirror.com/lerna/-/lerna-7.4.2.tgz#03497125d7b7c8d463eebfe17a701b16bde2ad09" - integrity sha512-gxavfzHfJ4JL30OvMunmlm4Anw7d7Tq6tdVHzUukLdS9nWnxCN/QB21qR+VJYp5tcyXogHKbdUEGh6qmeyzxSA== - dependencies: - "@lerna/child-process" "7.4.2" - "@lerna/create" "7.4.2" - "@npmcli/run-script" "6.0.2" - "@nx/devkit" ">=16.5.1 < 17" - "@octokit/plugin-enterprise-rest" "6.0.1" - "@octokit/rest" "19.0.11" - byte-size "8.1.1" - chalk "4.1.0" - clone-deep "4.0.1" - cmd-shim "6.0.1" - columnify "1.6.0" - conventional-changelog-angular "7.0.0" - conventional-changelog-core "5.0.1" - conventional-recommended-bump "7.0.1" - cosmiconfig "^8.2.0" - dedent "0.7.0" - envinfo "7.8.1" - execa "5.0.0" - fs-extra "^11.1.1" - get-port "5.1.1" - get-stream "6.0.0" - git-url-parse "13.1.0" - glob-parent "5.1.2" - globby "11.1.0" - graceful-fs "4.2.11" - has-unicode "2.0.1" - import-local "3.1.0" - ini "^1.3.8" - init-package-json "5.0.0" - inquirer "^8.2.4" - is-ci "3.0.1" - is-stream "2.0.0" - jest-diff ">=29.4.3 < 30" - js-yaml "4.1.0" - libnpmaccess "7.0.2" - libnpmpublish "7.3.0" - load-json-file "6.2.0" - lodash "^4.17.21" - make-dir "4.0.0" - minimatch "3.0.5" - multimatch "5.0.0" - node-fetch "2.6.7" - npm-package-arg "8.1.1" - npm-packlist "5.1.1" - npm-registry-fetch "^14.0.5" - npmlog "^6.0.2" - nx ">=16.5.1 < 17" - 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 "^15.2.0" - pify "5.0.0" - read-cmd-shim "4.0.0" - read-package-json "6.0.4" - resolve-from "5.0.0" - rimraf "^4.4.1" - semver "^7.3.8" - signal-exit "3.0.7" - slash "3.0.0" - ssri "^9.0.1" - strong-log-transformer "2.1.0" - tar "6.1.11" - temp-dir "1.0.0" - typescript ">=3 < 6" - upath "2.0.1" - uuid "^9.0.0" - validate-npm-package-license "3.0.4" - validate-npm-package-name "5.0.0" - write-file-atomic "5.0.1" - write-pkg "4.0.0" - yargs "16.2.0" - yargs-parser "20.2.4" - leven@2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -18807,44 +20561,17 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -li@^1.3.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/li/-/li-1.3.0.tgz#22c59bcaefaa9a8ef359cf759784e4bf106aea1b" - integrity sha512-z34TU6GlMram52Tss5mt1m//ifRIpKH5Dqm7yUVOdHI+BQCs9qGPHFaCUTIzsWX7edN30aa2WrPwR7IO10FHaw== - -libnpmaccess@7.0.2: - version "7.0.2" - resolved "https://registry.npmmirror.com/libnpmaccess/-/libnpmaccess-7.0.2.tgz#7f056c8c933dd9c8ba771fa6493556b53c5aac52" - integrity sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw== +libsodium-wrappers@^0.8.0: + version "0.8.4" + resolved "https://registry.yarnpkg.com/libsodium-wrappers/-/libsodium-wrappers-0.8.4.tgz#c9953edc16f2f40f1f4d2580147b8de775fb901c" + integrity sha512-mu8aAWucZjTB5O/BtGXtW4e1agy7uHxNYG7zPthmmD1jU43LCDmSWZLN4JhflbdPXj3yDO4lxM1O9hLDgIOXDw== dependencies: - npm-package-arg "^10.1.0" - npm-registry-fetch "^14.0.3" + libsodium "^0.8.0" -libnpmpublish@7.3.0: - version "7.3.0" - resolved "https://registry.npmmirror.com/libnpmpublish/-/libnpmpublish-7.3.0.tgz#2ceb2b36866d75a6cd7b4aa748808169f4d17e37" - integrity sha512-fHUxw5VJhZCNSls0KLNEG0mCD2PN1i14gH5elGOgiVnU3VgTcRahagYP2LKI1m0tFCJ+XrAm0zVYyF5RCbXzcg== - dependencies: - ci-info "^3.6.1" - normalize-package-data "^5.0.0" - npm-package-arg "^10.1.0" - npm-registry-fetch "^14.0.3" - proc-log "^3.0.0" - semver "^7.3.7" - sigstore "^1.4.0" - ssri "^10.0.1" - -libsodium-wrappers@^0.7.11: - version "0.7.13" - resolved "https://registry.npmmirror.com/libsodium-wrappers/-/libsodium-wrappers-0.7.13.tgz#83299e06ee1466057ba0e64e532777d2929b90d3" - integrity sha512-kasvDsEi/r1fMzKouIDv7B8I6vNmknXwGiYodErGuESoFTohGSKZplFtVxZqHaoQ217AynyIFgnOVRitpHs0Qw== - dependencies: - libsodium "^0.7.13" - -libsodium@^0.7.13: - version "0.7.13" - resolved "https://registry.npmmirror.com/libsodium/-/libsodium-0.7.13.tgz#230712ec0b7447c57b39489c48a4af01985fb393" - integrity sha512-mK8ju0fnrKXXfleL53vtp9xiPq5hKM0zbDQtcxQIsSmxNgSxqCj6R7Hl9PkrNe2j29T4yoDaF7DJLK9/i5iWUw== +libsodium@^0.8.0: + version "0.8.4" + resolved "https://registry.yarnpkg.com/libsodium/-/libsodium-0.8.4.tgz#a61393dad8c25e0fda129e3fdf85b3baee2d456f" + integrity sha512-lMcYaRi0zcs7tarATsQUYC7rstliIXZuoq0c6zXSgNtSNtdvBgkSegjWhpMJAXzKX3SUSwIp7+zEsob+j3LuRw== lie@~3.3.0: version "3.3.0" @@ -18863,52 +20590,27 @@ lines-and-columns@^1.1.6: resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -lines-and-columns@~2.0.3: - version "2.0.4" - resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" - integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== - -linkify-it@^3.0.1: - version "3.0.3" - resolved "https://registry.npmmirror.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e" - integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ== +linkify-it@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421" + integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== dependencies: - uc.micro "^1.0.1" - -linkify-react@4.1.3: - version "4.1.3" - resolved "https://registry.npmmirror.com/linkify-react/-/linkify-react-4.1.3.tgz#461d348b4bdab3fcd0452ae1b5bbc22536395b97" - integrity sha512-rhI3zM/fxn5BfRPHfi4r9N7zgac4vOIxub1wHIWXLA5ENTMs+BGaIaFO1D1PhmxgwhIKmJz3H7uCP0Dg5JwSlA== - -linkifyjs@4.1.3: - version "4.1.3" - resolved "https://registry.npmmirror.com/linkifyjs/-/linkifyjs-4.1.3.tgz#0edbc346428a7390a23ea2e5939f76112c9ae07f" - integrity sha512-auMesunaJ8yfkHvK4gfg1K0SaKX/6Wn9g2Aac/NwX+l5VdmFZzo/hdPGxEOETj+ryRa4/fiOPjeeKURSAJx1sg== + uc.micro "^2.0.0" -load-json-file@6.2.0: - version "6.2.0" - resolved "https://registry.npmmirror.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" - integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== - dependencies: - graceful-fs "^4.1.15" - parse-json "^5.0.0" - strip-bom "^4.0.0" - type-fest "^0.6.0" +linkify-react@4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/linkify-react/-/linkify-react-4.3.2.tgz#8d47fb0ad96ab5b38c07bfbebdcbc57794430693" + integrity sha512-mi744h1hf+WDsr+paJgSBBgYNLMWNSHyM9V9LVUo03RidNGdw1VpI7Twnt+K3pEh3nIzB4xiiAgZxpd61ItKpQ== -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" +linkifyjs@4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.3.2.tgz#d97eb45419aabf97ceb4b05a7adeb7b8c8ade2b1" + integrity sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA== -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== +loader-runner@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" + integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== loader-utils@^1.1.0: version "1.4.2" @@ -18919,7 +20621,7 @@ loader-utils@^1.1.0: emojis-list "^3.0.0" json5 "^1.0.1" -loader-utils@^2.0.4: +loader-utils@^2.0.0, loader-utils@^2.0.4: version "2.0.4" resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== @@ -18933,14 +20635,6 @@ loader-utils@^3.2.0: resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -18983,7 +20677,12 @@ lodash.clonedeepwith@4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeepwith/-/lodash.clonedeepwith-4.5.0.tgz#6ee30573a03a1a60d670a62ef33c10cf1afdbdd4" integrity sha512-QRBRSxhbtsX1nc0baxSkkK5WlVTTm/s48DSukcGcWZwIyI8Zz+lB+kFiELJXtzfH4Aj6kMWQ1VWW4U5uUDgZMA== -lodash.debounce@^4, lodash.debounce@^4.0.8: +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== + +lodash.debounce@^4: version "4.0.8" resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== @@ -18998,6 +20697,11 @@ lodash.flattendeep@^4.0.0: resolved "https://registry.npmmirror.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ== +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== + lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.npmmirror.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -19028,11 +20732,6 @@ lodash.isinteger@^4.0.4: resolved "https://registry.npmmirror.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.npmmirror.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== - lodash.isnumber@^3.0.3: version "3.0.3" resolved "https://registry.npmmirror.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" @@ -19073,16 +20772,16 @@ lodash.uniq@^4.5.0: resolved "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash.zipobject@^4.1.3: - version "4.1.3" - resolved "https://registry.npmmirror.com/lodash.zipobject/-/lodash.zipobject-4.1.3.tgz#b399f5aba8ff62a746f6979bf20b214f964dbef8" - integrity sha512-A9SzX4hMKWS25MyalwcOnNoplyHbkNVsjidhTp8ru0Sj23wY9GWBKS8gAIGDSAqeWjIjvE4KBEl24XXAs+v4wQ== - -lodash@^4.15.0, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0, lodash@~4.17.21: +lodash@^4.15.0, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@~4.17.21: version "4.17.21" resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +lodash@^4.16.4, lodash@^4.18.1: + version "4.18.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c" + integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== + log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" @@ -19091,7 +20790,7 @@ log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -log4js@6.9.1: +log4js@6.9.1, log4js@^6.4.6: version "6.9.1" resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6" integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g== @@ -19143,11 +20842,6 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lowlight@^1.17.0: version "1.20.0" resolved "https://registry.npmmirror.com/lowlight/-/lowlight-1.20.0.tgz#ddb197d33462ad0d93bf19d17b6c301aa3941888" @@ -19161,11 +20855,21 @@ lru-cache@^10.0.0, "lru-cache@^9.1.1 || ^10.0.0": resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== +lru-cache@^10.0.1: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^10.2.0: version "10.2.2" resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== +lru-cache@^11.0.0, lru-cache@^11.2.6: + version "11.3.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.3.5.tgz#29047d348c0b2793e3112a01c739bb7c6d855637" + integrity sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -19180,7 +20884,7 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.14.1, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: +lru-cache@^7.14.0, lru-cache@^7.14.1: version "7.18.3" resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== @@ -19205,6 +20909,11 @@ luxon@^3.0.0, luxon@^3.2.1, luxon@^3.4.3, luxon@~3.4.0: resolved "https://registry.npmmirror.com/luxon/-/luxon-3.4.4.tgz#cf20dc27dc532ba41a169c43fdcc0063601577af" integrity sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA== +luxon@^3.5.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.2.tgz#d697e48f478553cca187a0f8436aff468e3ba0ba" + integrity sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew== + lz-string@^1.5.0: version "1.5.0" resolved "https://registry.npmmirror.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" @@ -19224,103 +20933,40 @@ magic-string@^0.30.3: dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" -make-dir@4.0.0, make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - make-error@^1.1.1: version "1.3.6" resolved "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^10.0.3: - version "10.2.1" - resolved "https://registry.npmmirror.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" - integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== - dependencies: - 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 "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^9.0.0" - -make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.1: - version "11.1.1" - resolved "https://registry.npmmirror.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" - integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== +make-fetch-happen@^13.0.0: + version "13.0.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz#273ba2f78f45e1f3a6dca91cede87d9fa4821e36" + integrity sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA== dependencies: - agentkeepalive "^4.2.1" - cacache "^17.0.0" + "@npmcli/agent" "^2.0.0" + cacache "^18.0.0" http-cache-semantics "^4.1.1" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^5.0.0" + minipass "^7.0.2" minipass-fetch "^3.0.0" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" negotiator "^0.6.3" + proc-log "^4.2.0" promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" ssri "^10.0.0" -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.npmmirror.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -map-age-cleaner@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/map-age-cleaner/-/map-age-cleaner-0.2.0.tgz#0196bc278f7244ddeb7ca0cb3df329b06241a44b" - integrity sha512-AvxTC6id0fzSf6OyNBTp1syyCuKO7nOJvHgYlhT0Qkkjvk40zZo+av3ayVgXlxnF/DxEzEfY9mMdd7FHsd+wKQ== - dependencies: - p-defer "^1.0.0" - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - -markdown-it@^12.2.0: - version "12.3.2" - resolved "https://registry.npmmirror.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90" - integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg== +markdown-it@^14.1.0: + version "14.1.1" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.1.tgz#856f90b66fc39ae70affd25c1b18b581d7deee1f" + integrity sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA== dependencies: argparse "^2.0.1" - entities "~2.1.0" - linkify-it "^3.0.1" - mdurl "^1.0.1" - uc.micro "^1.0.5" + entities "^4.4.0" + linkify-it "^5.0.0" + mdurl "^2.0.0" + punycode.js "^2.3.1" + uc.micro "^2.1.0" markdown-table@^3.0.0: version "3.0.3" @@ -19332,6 +20978,24 @@ markdown-to-jsx@^7.4.1: resolved "https://registry.npmmirror.com/markdown-to-jsx/-/markdown-to-jsx-7.4.7.tgz#740ee7ec933865ef5cc683a0992797685a75e2ee" integrity sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg== +marked-terminal@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-7.3.0.tgz#7a86236565f3dd530f465ffce9c3f8b62ef270e8" + integrity sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw== + dependencies: + ansi-escapes "^7.0.0" + ansi-regex "^6.1.0" + chalk "^5.4.1" + cli-highlight "^2.1.11" + cli-table3 "^0.6.5" + node-emoji "^2.2.0" + supports-hyperlinks "^3.1.0" + +marked@^15.0.12: + version "15.0.12" + resolved "https://registry.yarnpkg.com/marked/-/marked-15.0.12.tgz#30722c7346e12d0a2d0207ab9b0c4f0102d86c4e" + integrity sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA== + marked@^4.0.14: version "4.3.0" resolved "https://registry.npmmirror.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" @@ -19344,16 +21008,28 @@ matcher@^3.0.0: dependencies: escape-string-regexp "^4.0.0" -material-ui-popup-state@^1.9.3: - version "1.9.3" - resolved "https://registry.npmmirror.com/material-ui-popup-state/-/material-ui-popup-state-1.9.3.tgz#133ee02be8adf936e738d6b5f3dc89726af39bce" - integrity sha512-+Ete5Tzw5rXlYfmqptOS8kBUH8vnK5OJsd6IQ7SHtLjU0PsvsmM73M/k8ot0xkX4RmPGuNRsFbK3mlCe/ClQuw== +matcher@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-4.0.0.tgz#a42a05a09aaed92e2d241eb91fddac689461ea51" + integrity sha512-S6x5wmcDmsDRRU/c2dkccDwQPXoFczc5+HpQ2lON8pnvHlnvHAHj5WlLVvw6n6vNyHuVugYrFohYxbS+pvFpKQ== dependencies: - "@babel/runtime" "^7.12.5" - "@material-ui/types" "^6.0.1" + escape-string-regexp "^4.0.0" + +material-ui-popup-state@^5.3.6: + version "5.3.7" + resolved "https://registry.yarnpkg.com/material-ui-popup-state/-/material-ui-popup-state-5.3.7.tgz#dddb75194db390cce1684f4f39d83b5be9fb77ae" + integrity sha512-3ppRgNEfJ4pSEmVnRYeDDi/8L6RSGnsBrCP+WikozCeF7E21DyKAm80EOtBbeiOTooPCEQoeqrQ32uDKW2VYcw== + dependencies: + "@babel/runtime" "^7.26.0" + "@types/prop-types" "^15.7.3" classnames "^2.2.6" prop-types "^15.7.2" +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -19506,10 +21182,15 @@ mdn-data@2.0.14: resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== -mdurl@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== +mdn-data@2.27.1: + version "2.27.1" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.27.1.tgz#e37b9c50880b75366c4d40ac63d9bbcacdb61f0e" + integrity sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ== + +mdurl@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" + integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== media-typer@0.3.0: version "0.3.0" @@ -19528,6 +21209,26 @@ memfs@^3.1.2, memfs@^3.4.1: dependencies: fs-monkey "^1.0.4" +memfs@^4.43.1, memfs@^4.56.10: + version "4.57.2" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.57.2.tgz#5f74e977c9a14681ea10d427b3ce5d7db5f817e7" + integrity sha512-2nWzSsJzrukurSDna4Z0WywuScK4Id3tSKejgu74u8KCdW4uNrseKRSIDg75C6Yw5ZRqBe0F0EtMNlTbUq8bAQ== + dependencies: + "@jsonjoy.com/fs-core" "4.57.2" + "@jsonjoy.com/fs-fsa" "4.57.2" + "@jsonjoy.com/fs-node" "4.57.2" + "@jsonjoy.com/fs-node-builtins" "4.57.2" + "@jsonjoy.com/fs-node-to-fsa" "4.57.2" + "@jsonjoy.com/fs-node-utils" "4.57.2" + "@jsonjoy.com/fs-print" "4.57.2" + "@jsonjoy.com/fs-snapshot" "4.57.2" + "@jsonjoy.com/json-pack" "^1.11.0" + "@jsonjoy.com/util" "^1.9.0" + glob-to-regex.js "^1.0.1" + thingies "^2.5.0" + tree-dump "^1.0.3" + tslib "^2.0.0" + memfs@^4.6.0: version "4.9.2" resolved "https://registry.npmmirror.com/memfs/-/memfs-4.9.2.tgz#42e7b48207268dad8c9c48ea5d4952c5d3840433" @@ -19538,7 +21239,7 @@ memfs@^4.6.0: sonic-forest "^1.0.0" tslib "^2.0.0" -memjs@^1.3.1: +memjs@^1.3.1, memjs@^1.3.2: version "1.3.2" resolved "https://registry.npmmirror.com/memjs/-/memjs-1.3.2.tgz#0b6229bddba00162d1e281ed454217435c4968b3" integrity sha512-qUEg2g8vxPe+zPn09KidjIStHPtoBO8Cttm8bgJFWWabbsjQ9Av9Ky+6UcvKx6ue0LLb/LEhtcyQpRyKfzeXcg== @@ -19548,28 +21249,16 @@ memjs@^1.3.1: resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== -meow@^8.1.2: - version "8.1.2" - resolved "https://registry.npmmirror.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -19580,7 +21269,7 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -meros@^1.1.4, meros@^1.2.1: +meros@^1.1.4: version "1.3.0" resolved "https://registry.npmmirror.com/meros/-/meros-1.3.0.tgz#c617d2092739d55286bf618129280f362e6242f2" integrity sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w== @@ -19871,6 +21560,14 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.npmmirror.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -19884,19 +21581,31 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.0.8, mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: +mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + +mime-types@^2.0.8, mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@^2.1.35, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" +mime-types@^3.0.0, mime-types@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" + integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== + dependencies: + mime-db "^1.54.0" + mime@1.6.0: version "1.6.0" resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@2.6.0: +mime@2.6.0, mime@^2.5.2: version "2.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== @@ -19911,11 +21620,6 @@ mimic-fn@^2.1.0: resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" @@ -19950,13 +21654,6 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@3.0.5: - version "3.0.5" - resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" - integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== - dependencies: - brace-expansion "^1.1.7" - minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -19964,17 +21661,17 @@ minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch dependencies: brace-expansion "^1.1.7" -minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== +minimatch@^10.2.1, minimatch@^10.2.2: + version "10.2.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.5.tgz#bd48687a0be38ed2961399105600f832095861d1" + integrity sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg== dependencies: - brace-expansion "^2.0.1" + brace-expansion "^5.0.5" -minimatch@^4.2.3: - version "4.2.3" - resolved "https://registry.npmmirror.com/minimatch/-/minimatch-4.2.3.tgz#b4dcece1d674dee104bb0fb833ebb85a78cbbca6" - integrity sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng== +minimatch@^3.1.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" + integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== dependencies: brace-expansion "^1.1.7" @@ -19985,17 +21682,10 @@ minimatch@^5.0.1, minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" -minimatch@^7.4.3: - version "7.4.6" - resolved "https://registry.npmmirror.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" - integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^8.0.2: - version "8.0.4" - resolved "https://registry.npmmirror.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" - integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== +minimatch@^9.0.0, minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: brace-expansion "^2.0.1" @@ -20006,16 +21696,7 @@ minimatch@^9.0.4: dependencies: brace-expansion "^2.0.1" -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -20027,23 +21708,12 @@ minimisted@^2.0.0: dependencies: minimist "^1.2.5" -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^2.0.3: - version "2.1.2" - resolved "https://registry.npmmirror.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" - integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== dependencies: - minipass "^3.1.6" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" + minipass "^7.0.3" minipass-fetch@^3.0.0: version "3.0.4" @@ -20063,14 +21733,6 @@ minipass-flush@^1.0.5: dependencies: minipass "^3.0.0" -minipass-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== - dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" - minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.npmmirror.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" @@ -20085,18 +21747,13 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: +minipass@^3.0.0: version "3.3.6" resolved "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" -minipass@^4.2.4: - version "4.2.8" - resolved "https://registry.npmmirror.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" - integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== - minipass@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" @@ -20107,6 +21764,11 @@ minipass@^5.0.0: resolved "https://registry.npmmirror.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== +minipass@^7.0.2, minipass@^7.0.4, minipass@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" + integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== + minipass@^7.1.2: version "7.1.2" resolved "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" @@ -20120,32 +21782,75 @@ minizlib@^2.1.1, minizlib@^2.1.2: minipass "^3.0.0" yallist "^4.0.0" +minizlib@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c" + integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw== + dependencies: + minipass "^7.1.2" + mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.npmmirror.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@^0.5.4: - version "0.5.6" - resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@^1.0.3: version "1.0.4" resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -modify-values@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -moment@^2.29.1: - version "2.30.1" - resolved "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" - integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== +mkdirp@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + +mockttp@^3.13.0: + version "3.17.1" + resolved "https://registry.yarnpkg.com/mockttp/-/mockttp-3.17.1.tgz#77a0ca0a0a63c00079c2bcfc872eaf39185d4fb7" + integrity sha512-sW6m4uaRIGJrtrQNZbUoSisTEAq91oS9C4cUyVFpHgMcpTwsG2ZvF94qOBt4PpEf9gGCiwkxvzkEEt4W/CPHHg== + dependencies: + "@graphql-tools/schema" "^8.5.0" + "@graphql-tools/utils" "^8.8.0" + "@httptoolkit/httpolyglot" "^2.2.1" + "@httptoolkit/subscriptions-transport-ws" "^0.11.2" + "@httptoolkit/websocket-stream" "^6.0.1" + "@types/cors" "^2.8.6" + "@types/node" "*" + async-mutex "^0.5.0" + base64-arraybuffer "^0.1.5" + body-parser "^1.15.2" + cacheable-lookup "^6.0.0" + common-tags "^1.8.0" + connect "^3.7.0" + cors "^2.8.4" + cors-gate "^1.1.3" + cross-fetch "^3.1.5" + destroyable-server "^1.1.1" + express "^4.14.0" + fast-json-patch "^3.1.1" + graphql "^14.0.2 || ^15.5" + graphql-http "^1.22.0" + graphql-subscriptions "^1.1.0" + graphql-tag "^2.12.6" + http-encoding "^2.0.1" + http2-wrapper "^2.2.1" + https-proxy-agent "^5.0.1" + isomorphic-ws "^4.0.1" + lodash "^4.16.4" + lru-cache "^7.14.0" + native-duplexpair "^1.0.0" + node-forge "^1.2.1" + pac-proxy-agent "^7.0.0" + parse-multipart-data "^1.4.0" + performance-now "^2.1.0" + portfinder "^1.0.32" + read-tls-client-hello "^1.1.0" + semver "^7.5.3" + socks-proxy-agent "^7.0.0" + typed-error "^3.0.2" + urlpattern-polyfill "^8.0.0" + uuid "^8.3.2" + ws "^8.8.0" moo@^0.5.0: version "0.5.2" @@ -20163,6 +21868,26 @@ morgan@^1.10.0: on-finished "~2.3.0" on-headers "~1.0.2" +motion-dom@^12.38.0: + version "12.38.0" + resolved "https://registry.yarnpkg.com/motion-dom/-/motion-dom-12.38.0.tgz#9ef3253ea0fb28b6757588327073848d940e9aab" + integrity sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA== + dependencies: + motion-utils "^12.36.0" + +motion-utils@^12.36.0: + version "12.36.0" + resolved "https://registry.yarnpkg.com/motion-utils/-/motion-utils-12.36.0.tgz#cff2df2a28c3fe53a3de7e0103ba7f73ff7d77a7" + integrity sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg== + +motion@^12.0.0: + version "12.38.0" + resolved "https://registry.yarnpkg.com/motion/-/motion-12.38.0.tgz#851fb591f98ed98815e223c09a0de13614ea4155" + integrity sha512-uYfXzeHlgThchzwz5Te47dlv5JOUC7OB4rjJ/7XTUgtBZD8CchMN8qEJ4ZVsUmTyYA44zjV0fBwsiktRuFnn+w== + dependencies: + framer-motion "^12.38.0" + tslib "^2.4.0" + mri@1.1.4: version "1.1.4" resolved "https://registry.npmmirror.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" @@ -20183,7 +21908,7 @@ ms@2.1.2: resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.0.0, ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -20213,18 +21938,15 @@ msw@^1.0.0: type-fest "^2.19.0" yargs "^17.3.1" -multer@^1.4.5-lts.1: - version "1.4.5-lts.1" - resolved "https://registry.npmmirror.com/multer/-/multer-1.4.5-lts.1.tgz#803e24ad1984f58edffbc79f56e305aec5cfd1ac" - integrity sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ== +multer@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/multer/-/multer-2.1.1.tgz#122d819244fbdfee1efddd9147426691014385b7" + integrity sha512-mo+QTzKlx8R7E5ylSXxWzGoXoZbOsRMpyitcht8By2KHvMbf3tjwosZ/Mu/XYU6UuJ3VZnODIrak5ZrPiPyB6A== dependencies: append-field "^1.0.0" - busboy "^1.0.0" - concat-stream "^1.5.2" - mkdirp "^0.5.4" - object-assign "^4.1.1" - type-is "^1.6.4" - xtend "^4.0.0" + busboy "^1.6.0" + concat-stream "^2.0.0" + type-is "^1.6.18" multicast-dns@^7.2.5: version "7.2.5" @@ -20234,27 +21956,11 @@ multicast-dns@^7.2.5: dns-packet "^5.2.2" thunky "^1.0.2" -multimatch@5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" - integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== - dependencies: - "@types/minimatch" "^3.0.3" - array-differ "^3.0.0" - array-union "^2.1.0" - arrify "^2.0.1" - minimatch "^3.0.4" - mute-stream@0.0.8: version "0.0.8" resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mute-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - mysql2@^3.0.0: version "3.10.0" resolved "https://registry.npmmirror.com/mysql2/-/mysql2-3.10.0.tgz#5109449fda3dc03fb7d6bdf2cf91f97477081987" @@ -20269,7 +21975,7 @@ mysql2@^3.0.0: seq-queue "^0.0.5" sqlstring "^2.3.2" -mz@^2.7.0: +mz@^2.4.0, mz@^2.7.0: version "2.7.0" resolved "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== @@ -20285,11 +21991,16 @@ named-placeholders@^1.1.3: dependencies: lru-cache "^7.14.1" -nan@^2.14.0, nan@^2.17.0, nan@^2.18.0: +nan@^2.17.0, nan@^2.18.0: version "2.18.0" resolved "https://registry.npmmirror.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== +nan@^2.19.0, nan@^2.23.0: + version "2.26.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.26.2.tgz#2e5e25764224c737b9897790b57c3294d4dcee9c" + integrity sha512-0tTvBTYkt3tdGw22nrAy50x7gpbGCCFH3AFcyS5WiUu7Eu4vWlri1woE6qHBSfy11vksDqkiwjOnlR7WV8G1Hw== + nano-css@^5.6.1: version "5.6.1" resolved "https://registry.npmmirror.com/nano-css/-/nano-css-5.6.1.tgz#964120cb1af6cccaa6d0717a473ccd876b34c197" @@ -20304,6 +22015,20 @@ nano-css@^5.6.1: stacktrace-js "^2.0.2" stylis "^4.3.0" +nano-css@^5.6.2: + version "5.6.2" + resolved "https://registry.yarnpkg.com/nano-css/-/nano-css-5.6.2.tgz#584884ddd7547278f6d6915b6805069742679a32" + integrity sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + css-tree "^1.1.2" + csstype "^3.1.2" + fastest-stable-stringify "^2.0.2" + inline-style-prefixer "^7.0.1" + rtl-css-js "^1.16.1" + stacktrace-js "^2.0.2" + stylis "^4.3.0" + nanoid@^3.3.7: version "3.3.7" resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" @@ -20314,6 +22039,16 @@ napi-build-utils@^1.0.1: resolved "https://registry.npmmirror.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== +napi-build-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" + integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA== + +native-duplexpair@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/native-duplexpair/-/native-duplexpair-1.0.0.tgz#7899078e64bf3c8a3d732601b3d40ff05db58fa0" + integrity sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -20345,11 +22080,26 @@ negotiator@0.6.3, negotiator@^0.6.3: resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +negotiator@~0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + neo-async@^2.6.2: version "2.6.2" resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +neotraverse@=0.6.18: + version "0.6.18" + resolved "https://registry.yarnpkg.com/neotraverse/-/neotraverse-0.6.18.tgz#abcb33dda2e8e713cf6321b29405e822230cdb30" + integrity sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA== + +netmask@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.1.1.tgz#80043d265b53aa521b3bd01e8fcdf353f9e1e81e" + integrity sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA== + nimma@0.2.2: version "0.2.2" resolved "https://registry.npmmirror.com/nimma/-/nimma-0.2.2.tgz#48d00f837d17b4baa23beec22ac1380f152f15ef" @@ -20363,6 +22113,19 @@ nimma@0.2.2: jsonpath-plus "^6.0.1" lodash.topath "^4.5.2" +nimma@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/nimma/-/nimma-0.2.3.tgz#33cd6244ede857d9c8ac45b9d1aad07091559e45" + integrity sha512-1ZOI8J+1PKKGceo/5CT5GfQOG6H8I2BencSK06YarZ2wXwH37BSSUWldqJmMJYA5JfqDqffxDXynt6f11AyKcA== + dependencies: + "@jsep-plugin/regex" "^1.0.1" + "@jsep-plugin/ternary" "^1.0.2" + astring "^1.8.1" + jsep "^1.2.0" + optionalDependencies: + jsonpath-plus "^6.0.1 || ^10.1.0" + lodash.topath "^4.5.2" + no-case@^3.0.4: version "3.0.4" resolved "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -20383,26 +22146,44 @@ node-abort-controller@^3.0.1, node-abort-controller@^3.1.1: resolved "https://registry.npmmirror.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== -node-addon-api@^3.2.1: - version "3.2.1" - resolved "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" - integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== +node-addon-api@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" + integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== -node-cache@^5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/node-cache/-/node-cache-5.1.2.tgz#f264dc2ccad0a780e76253a694e9fd0ed19c398d" - integrity sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg== - dependencies: - clone "2.x" +node-addon-api@^8.0.0, node-addon-api@^8.2.2, node-addon-api@^8.3.0, node-addon-api@^8.3.1: + version "8.7.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-8.7.0.tgz#f64f8413456ecbe900221305a3f883c37666473f" + integrity sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA== -node-domexception@^1.0.0: +node-domexception@1.0.0, node-domexception@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== -node-fetch-commonjs@^3.3.1: +node-emoji@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.2.0.tgz#1d000e3c76e462577895be1b436f4aa2d6760eb0" + integrity sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw== + dependencies: + "@sindresorhus/is" "^4.6.0" + char-regex "^1.0.2" + emojilib "^2.4.0" + skin-tone "^2.0.0" + +node-exports-info@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/node-exports-info/-/node-exports-info-1.6.0.tgz#1aedafb01a966059c9a5e791a94a94d93f5c2a13" + integrity sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw== + dependencies: + array.prototype.flatmap "^1.3.3" + es-errors "^1.3.0" + object.entries "^1.1.9" + semver "^6.3.1" + +node-fetch-commonjs@^3.3.2: version "3.3.2" - resolved "https://registry.npmmirror.com/node-fetch-commonjs/-/node-fetch-commonjs-3.3.2.tgz#0dd0fd4c4a314c5234f496ff7b5d9ce5a6c8feaa" + resolved "https://registry.yarnpkg.com/node-fetch-commonjs/-/node-fetch-commonjs-3.3.2.tgz#0dd0fd4c4a314c5234f496ff7b5d9ce5a6c8feaa" integrity sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A== dependencies: node-domexception "^1.0.0" @@ -20415,7 +22196,7 @@ node-fetch@2.6.7: dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7, node-fetch@^2.6.9: +node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7, node-fetch@^2.6.9, node-fetch@^2.7.0: version "2.7.0" resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -20427,72 +22208,47 @@ node-forge@^1, node-forge@^1.3.1: resolved "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-gyp-build@^4.3.0: - version "4.8.0" - resolved "https://registry.npmmirror.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" - integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== +node-forge@^1.2.1, node-forge@^1.3.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.4.0.tgz#1c7b7d8bdc2d078739f58287d589d903a11b2fc2" + integrity sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ== + +node-gyp-build@^4.8.0, node-gyp-build@^4.8.2, node-gyp-build@^4.8.4: + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== -node-gyp@^9.0.0: - version "9.4.1" - resolved "https://registry.npmmirror.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185" - integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ== +node-gyp@^10.0.0: + version "10.3.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.3.1.tgz#1dd1a1a1c6c5c59da1a76aea06a062786b2c8a1a" + integrity sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ== dependencies: env-paths "^2.2.0" exponential-backoff "^3.1.1" - glob "^7.1.4" + glob "^10.3.10" graceful-fs "^4.2.6" - make-fetch-happen "^10.0.3" - nopt "^6.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" + make-fetch-happen "^13.0.0" + nopt "^7.0.0" + proc-log "^4.1.0" semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmmirror.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.npmmirror.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" + tar "^6.2.1" + which "^4.0.0" -node-machine-id@1.1.12: - version "1.1.12" - resolved "https://registry.npmmirror.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" - integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== +node-hex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/node-hex/-/node-hex-1.0.1.tgz#606208e91f9c02b9b81531b692b9f1da4860fb24" + integrity sha512-iwpZdvW6Umz12ICmu9IYPRxg0tOLGmU3Tq2tKetejCj3oZd7b2nUXwP3a7QA5M9glWy8wlPS1G3RwM/CdsUbdQ== node-releases@^2.0.14: version "2.0.14" resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +node-releases@^2.0.36: + version "2.0.38" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.38.tgz#791569b9e4424a044e12c3abfad418ed83ce9947" + integrity sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw== + node-schedule@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/node-schedule/-/node-schedule-2.1.1.tgz#6958b2c5af8834954f69bb0a7a97c62b97185de3" @@ -20502,49 +22258,45 @@ node-schedule@2.1.1: long-timeout "0.1.1" sorted-array-functions "^1.3.0" -nopt@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" - integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== - dependencies: - abbrev "^1.0.0" - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0, normalize-package-data@^3.0.3: - version "3.0.3" - resolved "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" - integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== +node-stdlib-browser@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-stdlib-browser/-/node-stdlib-browser-1.3.1.tgz#f41fa554f720a3df951e40339f4d92ac512222ac" + integrity sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw== dependencies: - hosted-git-info "^6.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" + assert "^2.0.0" + browser-resolve "^2.0.0" + browserify-zlib "^0.2.0" + buffer "^5.7.1" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + create-require "^1.1.1" + crypto-browserify "^3.12.1" + domain-browser "4.22.0" + events "^3.0.0" + https-browserify "^1.0.0" + isomorphic-timers-promises "^1.0.1" + os-browserify "^0.3.0" + path-browserify "^1.0.1" + pkg-dir "^5.0.0" + process "^0.11.10" + punycode "^1.4.1" + querystring-es3 "^0.2.1" + readable-stream "^3.6.0" + stream-browserify "^3.0.0" + stream-http "^3.2.0" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.1" + url "^0.11.4" + util "^0.12.4" + vm-browserify "^1.0.1" -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== +nopt@^7.0.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" + integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== dependencies: - remove-trailing-separator "^1.0.1" + abbrev "^2.0.0" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -20556,13 +22308,6 @@ normalize-url@^6.0.1: resolved "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-bundled@^1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" - integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== - dependencies: - npm-normalize-package-bin "^1.0.1" - npm-bundled@^2.0.0: version "2.0.1" resolved "https://registry.npmmirror.com/npm-bundled/-/npm-bundled-2.0.1.tgz#94113f7eb342cd7a67de1e789f896b04d2c600f4" @@ -20570,64 +22315,11 @@ npm-bundled@^2.0.0: dependencies: npm-normalize-package-bin "^2.0.0" -npm-bundled@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" - integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== - dependencies: - npm-normalize-package-bin "^3.0.0" - -npm-install-checks@^6.0.0: - version "6.3.0" - resolved "https://registry.npmmirror.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" - integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - npm-normalize-package-bin@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== -npm-normalize-package-bin@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" - integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== - -npm-package-arg@8.1.1: - version "8.1.1" - resolved "https://registry.npmmirror.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" - integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== - dependencies: - hosted-git-info "^3.0.6" - semver "^7.0.0" - validate-npm-package-name "^3.0.0" - -npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: - version "10.1.0" - resolved "https://registry.npmmirror.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" - integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== - dependencies: - hosted-git-info "^6.0.0" - proc-log "^3.0.0" - semver "^7.3.5" - validate-npm-package-name "^5.0.0" - -npm-packlist@5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" - integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== - dependencies: - glob "^8.0.1" - ignore-walk "^5.0.1" - npm-bundled "^1.1.2" - npm-normalize-package-bin "^1.0.1" - npm-packlist@^5.0.0: version "5.1.3" resolved "https://registry.npmmirror.com/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" @@ -20638,36 +22330,6 @@ npm-packlist@^5.0.0: npm-bundled "^2.0.0" npm-normalize-package-bin "^2.0.0" -npm-packlist@^7.0.0: - version "7.0.4" - resolved "https://registry.npmmirror.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" - integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== - dependencies: - ignore-walk "^6.0.0" - -npm-pick-manifest@^8.0.0: - version "8.0.2" - resolved "https://registry.npmmirror.com/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz#2159778d9c7360420c925c1a2287b5a884c713aa" - integrity sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg== - dependencies: - npm-install-checks "^6.0.0" - npm-normalize-package-bin "^3.0.0" - npm-package-arg "^10.0.0" - semver "^7.3.5" - -npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: - version "14.0.5" - resolved "https://registry.npmmirror.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" - integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== - dependencies: - make-fetch-happen "^11.0.0" - minipass "^5.0.0" - minipass-fetch "^3.0.0" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^10.0.0" - proc-log "^3.0.0" - npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -20675,16 +22337,6 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@^6.0.0, npmlog@^6.0.2: - version "6.0.2" - resolved "https://registry.npmmirror.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - nth-check@^2.0.1: version "2.1.1" resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -20706,80 +22358,22 @@ nunjucks@^3.2.3: asap "^2.0.3" commander "^5.1.0" -nwsapi@^2.2.0, nwsapi@^2.2.2: - version "2.2.7" - resolved "https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - -nx@16.10.0, "nx@>=16.5.1 < 17": - version "16.10.0" - resolved "https://registry.npmmirror.com/nx/-/nx-16.10.0.tgz#b070461f7de0a3d7988bd78558ea84cda3543ace" - integrity sha512-gZl4iCC0Hx0Qe1VWmO4Bkeul2nttuXdPpfnlcDKSACGu3ZIo+uySqwOF8yBAxSTIf8xe2JRhgzJN1aFkuezEBg== - dependencies: - "@nrwl/tao" "16.10.0" - "@parcel/watcher" "2.0.4" - "@yarnpkg/lockfile" "^1.1.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.3.1" - dotenv-expand "~10.0.0" - enquirer "~2.3.6" - figures "3.2.0" - flat "^5.0.2" - fs-extra "^11.1.0" - glob "7.1.4" - ignore "^5.0.4" - jest-diff "^29.4.1" - js-yaml "4.1.0" - jsonc-parser "3.2.0" - lines-and-columns "~2.0.3" - minimatch "3.0.5" - node-machine-id "1.1.12" - npm-run-path "^4.0.1" - open "^8.4.0" - semver "7.5.3" - string-width "^4.2.3" - strong-log-transformer "^2.1.0" - tar-stream "~2.2.0" - tmp "~0.2.1" - tsconfig-paths "^4.1.2" - tslib "^2.3.0" - v8-compile-cache "2.3.0" - yargs "^17.6.2" - yargs-parser "21.1.1" - optionalDependencies: - "@nx/nx-darwin-arm64" "16.10.0" - "@nx/nx-darwin-x64" "16.10.0" - "@nx/nx-freebsd-x64" "16.10.0" - "@nx/nx-linux-arm-gnueabihf" "16.10.0" - "@nx/nx-linux-arm64-gnu" "16.10.0" - "@nx/nx-linux-arm64-musl" "16.10.0" - "@nx/nx-linux-x64-gnu" "16.10.0" - "@nx/nx-linux-x64-musl" "16.10.0" - "@nx/nx-win32-arm64-msvc" "16.10.0" - "@nx/nx-win32-x64-msvc" "16.10.0" - oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== +oauth4webapi@^3.8.5: + version "3.8.5" + resolved "https://registry.yarnpkg.com/oauth4webapi/-/oauth4webapi-3.8.5.tgz#4aa8a73f5c4644daf674a7c40497be910db99d3f" + integrity sha512-A8jmyUckVhRJj5lspguklcl90Ydqk61H3dcU0oLhH3Yv13KpAliKTt5hknpGGPZSSfOwGyraNEFmofDYH+1kSg== + oauth@0.10.x: version "0.10.0" resolved "https://registry.npmmirror.com/oauth/-/oauth-0.10.0.tgz#3551c4c9b95c53ea437e1e21e46b649482339c58" integrity sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q== -oauth@0.9.x: - version "0.9.15" - resolved "https://registry.npmmirror.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" - integrity sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA== - -object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -20799,6 +22393,11 @@ object-inspect@^1.13.1, object-inspect@^1.9.0: resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== +object-inspect@^1.13.3, object-inspect@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + object-is@^1.1.5: version "1.1.5" resolved "https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" @@ -20822,43 +22421,48 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.6, object.entries@^1.1.7: - version "1.1.7" - resolved "https://registry.npmmirror.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== +object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" -object.fromentries@^2.0.6, object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.npmmirror.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== +object.entries@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" + integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-object-atoms "^1.1.1" -object.groupby@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" -object.hasown@^1.1.2: - version "1.1.3" - resolved "https://registry.npmmirror.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" - integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" -object.values@^1.1.6, object.values@^1.1.7: +object.values@^1.1.6: version "1.1.7" resolved "https://registry.npmmirror.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== @@ -20867,6 +22471,16 @@ object.values@^1.1.6, object.values@^1.1.7: define-properties "^1.2.0" es-abstract "^1.22.1" +object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -20900,7 +22514,7 @@ oidc-token-hash@^5.0.3: resolved "https://registry.npmmirror.com/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz#9a229f0a1ce9d4fc89bcaee5478c97a889e7b7b6" integrity sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw== -on-finished@2.4.1, on-finished@^2.3.0, on-finished@^2.4.1: +on-finished@2.4.1, on-finished@^2.4.1, on-finished@~2.4.1: version "2.4.1" resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -20919,6 +22533,11 @@ on-headers@~1.0.2: resolved "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== +on-headers@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65" + integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -20940,11 +22559,6 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -only@~0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" - integrity sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ== - ono@^7.1.3: version "7.1.3" resolved "https://registry.npmmirror.com/ono/-/ono-7.1.3.tgz#a054e96a388f566a6c4c95e1e92b9b253722d286" @@ -20962,14 +22576,6 @@ open@^10.0.3: is-inside-container "^1.0.0" is-wsl "^3.1.0" -open@^7.4.2: - version "7.4.2" - resolved "https://registry.npmmirror.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - open@^8.0.0, open@^8.4.0: version "8.4.2" resolved "https://registry.npmmirror.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" @@ -20988,6 +22594,13 @@ openapi-merge@^1.3.2: lodash "^4.17.15" ts-is-present "^1.1.1" +openapi-path-templating@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/openapi-path-templating/-/openapi-path-templating-2.2.1.tgz#57026767530667096d33d7362382a93d75d497f6" + integrity sha512-eN14VrDvl/YyGxxrkGOHkVkWEoPyhyeydOUrbvjoz8K5eIGgELASwN1eqFOJ2CTQMGCy2EntOK1KdtJ8ZMekcg== + dependencies: + apg-lite "^1.0.4" + openapi-sampler@^1.2.1: version "1.4.0" resolved "https://registry.npmmirror.com/openapi-sampler/-/openapi-sampler-1.4.0.tgz#c133cad6250481f2ec7e48b16eb70062adb514c0" @@ -20996,6 +22609,13 @@ openapi-sampler@^1.2.1: "@types/json-schema" "^7.0.7" json-pointer "0.6.2" +openapi-server-url-templating@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/openapi-server-url-templating/-/openapi-server-url-templating-1.3.0.tgz#80bc6ea5209a3c4fe9d359673ba51635676e2503" + integrity sha512-DPlCms3KKEbjVQb0spV6Awfn6UWNheuG/+folQPzh/wUaKwuqvj8zt5gagD7qoyxtE03cIiKPgLFS3Q8Bz00uQ== + dependencies: + apg-lite "^1.0.4" + openapi3-ts@^3.1.2: version "3.2.0" resolved "https://registry.npmmirror.com/openapi3-ts/-/openapi3-ts-3.2.0.tgz#7e30d33c480e938e67e809ab16f419bc9beae3f8" @@ -21003,7 +22623,7 @@ openapi3-ts@^3.1.2: dependencies: yaml "^2.2.1" -openid-client@^5.2.1, openid-client@^5.3.0: +openid-client@^5.3.0: version "5.6.4" resolved "https://registry.npmmirror.com/openid-client/-/openid-client-5.6.4.tgz#b2c25e6d5338ba3ce00e04341bb286798a196177" integrity sha512-T1h3B10BRPKfcObdBklX639tVz+xh34O7GjofqrqiAQdm7eHsQ00ih18x6wuJ/E6FxdtS2u3FmUGPDeEcMwzNA== @@ -21023,6 +22643,14 @@ openid-client@^5.5.0: object-hash "^2.2.0" oidc-token-hash "^5.0.3" +openid-client@^6.1.3: + version "6.8.3" + resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-6.8.3.tgz#38aaf86552f1b9dbe1d0fe4a69512e533da14420" + integrity sha512-AoY/NaN9esS3+xvHInFSK0g3skSfeE0uqQAKRj4rB6/GsBIvzwTUaYo9+HcqpKIaP0dP85p5W07hayKgS4GAeA== + dependencies: + jose "^6.2.2" + oauth4webapi "^3.8.5" + optionator@^0.8.1: version "0.8.3" resolved "https://registry.npmmirror.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -21067,45 +22695,45 @@ os-browserify@^0.3.0: resolved "https://registry.npmmirror.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== +os-name@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-1.0.3.tgz#1b379f64835af7c5a7f498b357cb95215c159edf" + integrity sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew== + dependencies: + osx-release "^1.0.0" + win-release "^1.0.0" + os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== +osx-release@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/osx-release/-/osx-release-1.1.0.tgz#f217911a28136949af1bf9308b241e2737d3cd6c" + integrity sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A== + dependencies: + minimist "^1.1.0" + outvariant@^1.2.1, outvariant@^1.4.0: version "1.4.2" resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.2.tgz#f54f19240eeb7f15b28263d5147405752d8e2066" integrity sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ== -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" p-finally@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== -p-limit@3.1.0, p-limit@^3.0.1, p-limit@^3.0.2, p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -21113,12 +22741,12 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== +p-limit@^3.0.1, p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: - p-limit "^1.1.0" + yocto-queue "^0.1.0" p-locate@^3.0.0: version "3.0.0" @@ -21141,24 +22769,14 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map-series@2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" - integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== - -p-map@4.0.0, p-map@^4.0.0: +p-map@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" -p-pipe@3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" - integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== - -p-queue@6.6.2, p-queue@^6.6.2: +p-queue@^6.6.2: version "6.6.2" resolved "https://registry.npmmirror.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== @@ -21166,11 +22784,6 @@ p-queue@6.6.2, p-queue@^6.6.2: eventemitter3 "^4.0.4" p-timeout "^3.2.0" -p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" - integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== - p-retry@^6.2.0: version "6.2.0" resolved "https://registry.npmmirror.com/p-retry/-/p-retry-6.2.0.tgz#8d6df01af298750009691ce2f9b3ad2d5968f3bd" @@ -21180,6 +22793,11 @@ p-retry@^6.2.0: is-network-error "^1.0.0" retry "^0.13.1" +p-throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/p-throttle/-/p-throttle-4.1.1.tgz#80b1fbd358af40a8bfa1667f9dc8b72b714ad692" + integrity sha512-TuU8Ato+pRTPJoDzYD4s7ocJYcNSEZRvlxoq3hcPI2kZDZ49IQ1Wkj7/gDJc3X7XiEAAvRGtDzdXJI0tC3IL1g== + p-timeout@^3.2.0: version "3.2.0" resolved "https://registry.npmmirror.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" @@ -21187,52 +22805,43 @@ p-timeout@^3.2.0: dependencies: p-finally "^1.0.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - p-try@^2.0.0: version "2.2.0" resolved "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -p-waterfall@2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" - integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== +pac-proxy-agent@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz#9cfaf33ff25da36f6147a20844230ec92c06e5df" + integrity sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA== + dependencies: + "@tootallnate/quickjs-emscripten" "^0.23.0" + agent-base "^7.1.2" + debug "^4.3.4" + get-uri "^6.0.1" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.6" + pac-resolver "^7.0.1" + socks-proxy-agent "^8.0.5" + +pac-resolver@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6" + integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg== dependencies: - p-reduce "^2.0.0" + degenerator "^5.0.0" + netmask "^2.0.2" + +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== packet-reader@1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== -pacote@^15.2.0: - version "15.2.0" - resolved "https://registry.npmmirror.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" - integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== - dependencies: - "@npmcli/git" "^4.0.0" - "@npmcli/installed-package-contents" "^2.0.1" - "@npmcli/promise-spawn" "^6.0.1" - "@npmcli/run-script" "^6.0.0" - cacache "^17.0.0" - fs-minipass "^3.0.0" - minipass "^5.0.0" - npm-package-arg "^10.0.0" - npm-packlist "^7.0.0" - npm-pick-manifest "^8.0.0" - npm-registry-fetch "^14.0.0" - proc-log "^3.0.0" - promise-retry "^2.0.1" - read-package-json "^6.0.0" - read-package-json-fast "^3.0.0" - sigstore "^1.3.0" - ssri "^10.0.0" - tar "^6.1.11" - pako@^1.0.10, pako@~1.0.2, pako@~1.0.5: version "1.0.11" resolved "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -21258,7 +22867,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.6: +parse-asn1@^5.0.0: version "5.1.6" resolved "https://registry.npmmirror.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== @@ -21269,6 +22878,17 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.6: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-asn1@^5.1.9: + version "5.1.9" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.9.tgz#8dd24c3ea8da77dffbc708d94eaf232fd6156e95" + integrity sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg== + dependencies: + asn1.js "^4.10.1" + browserify-aes "^1.2.0" + evp_bytestokey "^1.0.3" + pbkdf2 "^3.1.5" + safe-buffer "^5.2.1" + parse-entities@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" @@ -21281,13 +22901,18 @@ parse-entities@^2.0.0: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== +parse-entities@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.2.tgz#61d46f5ed28e4ee62e9ddc43d6b010188443f159" + integrity sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw== dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" + "@types/unist" "^2.0.0" + character-entities-legacy "^3.0.0" + character-reference-invalid "^2.0.0" + decode-named-character-reference "^1.0.0" + is-alphanumerical "^2.0.0" + is-decimal "^2.0.0" + is-hexadecimal "^2.0.0" parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" @@ -21299,6 +22924,11 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-multipart-data@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/parse-multipart-data/-/parse-multipart-data-1.5.0.tgz#ab894cc6c40229d0a2042500e120df7562d94b87" + integrity sha512-ck5zaMF0ydjGfejNMnlo5YU2oJ+pT+80Jb1y4ybanT27j+zbVP/jkYmCrUGsEln0Ox/hZmuvgy8Ra7AxbXP2Mw== + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -21318,19 +22948,31 @@ parse-url@^8.1.0: dependencies: parse-path "^7.0.0" -parse5@6.0.1: +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.0, parse5@^6.0.1: version "6.0.1" - resolved "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== -parse5@^7.0.0, parse5@^7.1.1: - version "7.1.2" - resolved "https://registry.npmmirror.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== +parse5@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-8.0.1.tgz#f43bcd2cd683efe084075333e9ce0da7d06da31e" + integrity sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw== dependencies: - entities "^4.4.0" + entities "^8.0.0" -parseurl@^1.3.2, parseurl@~1.3.2, parseurl@~1.3.3: +parseurl@^1.3.3, parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== @@ -21343,90 +22985,6 @@ pascal-case@^3.1.2: no-case "^3.0.4" tslib "^2.0.3" -passport-atlassian-oauth2@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/passport-atlassian-oauth2/-/passport-atlassian-oauth2-2.1.0.tgz#8043ced378ca002055ac0ea0e4cb2198692acb07" - integrity sha512-uUjdoeeA0qqEedj14LzeAFGyK/eesPezQfdN1ui/7D8TYNCGVtuoYhKT64gT8KhOCz5nPYS12XWXRfoPTS6kpg== - dependencies: - passport-oauth2 "^1.4.0" - -passport-auth0@^1.4.3: - version "1.4.4" - resolved "https://registry.npmmirror.com/passport-auth0/-/passport-auth0-1.4.4.tgz#38f8bb2b478b71a8b90ebf497be271fe80f6ca52" - integrity sha512-PFkjMfsfXSwgn94QCrZl2hObRHiqrAJffyeUvI8e8HqTG7MfOlyzWO3wSL5dlH+MUGR5+DQr+vtXFFu6Sx8cfg== - dependencies: - axios "^1.6.0" - passport-oauth "^1.0.0" - passport-oauth2 "^1.6.0" - -passport-bitbucket-oauth2@^0.1.2: - version "0.1.2" - resolved "https://registry.npmmirror.com/passport-bitbucket-oauth2/-/passport-bitbucket-oauth2-0.1.2.tgz#eb3af5cdd0d06830adc49b76acae4ad82290693b" - integrity sha512-bE4eQuyK2U0bumRdxfZedfoBfkHzblhui6MElz64xptn70CIrJrEKon1Ui95ML3KsvOmGGoaSZcwXwAjWF6M0Q== - dependencies: - passport-oauth2 "^1.1.2" - pkginfo "0.2.x" - -passport-github2@^0.1.12: - version "0.1.12" - resolved "https://registry.npmmirror.com/passport-github2/-/passport-github2-0.1.12.tgz#a72ebff4fa52a35bc2c71122dcf470d1116f772c" - integrity sha512-3nPUCc7ttF/3HSP/k9sAXjz3SkGv5Nki84I05kSQPo01Jqq1NzJACgMblCK0fGcv9pKCG/KXU3AJRDGLqHLoIw== - dependencies: - passport-oauth2 "1.x.x" - -passport-gitlab2@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/passport-gitlab2/-/passport-gitlab2-5.0.0.tgz#ea37e5285321c026a02671e87469cac28cce9b69" - integrity sha512-cXQMgM6JQx9wHVh7JLH30D8fplfwjsDwRz+zS0pqC8JS+4bNmc1J04NGp5g2M4yfwylH9kQRrMN98GxMw7q7cg== - dependencies: - passport-oauth2 "^1.4.0" - -passport-google-oauth20@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz#0d241b2d21ebd3dc7f2b60669ec4d587e3a674ef" - integrity sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ== - dependencies: - passport-oauth2 "1.x.x" - -passport-microsoft@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/passport-microsoft/-/passport-microsoft-1.0.0.tgz#78954cf3201fdce61beeb6587a3b158f8e9db86c" - integrity sha512-L1JHeCbSObSZZXiG7jU2KoKie6nzZLwGt38HXz1GasKrsCQdOnf5kH8ltV4BWNUfBL2Pt1csWn1iuBSerprrcg== - dependencies: - passport-oauth2 "1.6.1" - pkginfo "0.4.x" - -passport-oauth1@1.x.x: - version "1.3.0" - resolved "https://registry.npmmirror.com/passport-oauth1/-/passport-oauth1-1.3.0.tgz#5d57f1415c8e28e46b461a12ec1b492934f7c354" - integrity sha512-8T/nX4gwKTw0PjxP1xfD0QhrydQNakzeOpZ6M5Uqdgz9/a/Ag62RmJxnZQ4LkbdXGrRehQHIAHNAu11rCP46Sw== - dependencies: - oauth "0.9.x" - passport-strategy "1.x.x" - utils-merge "1.x.x" - -passport-oauth2@1.6.1: - version "1.6.1" - resolved "https://registry.npmmirror.com/passport-oauth2/-/passport-oauth2-1.6.1.tgz#c5aee8f849ce8bd436c7f81d904a3cd1666f181b" - integrity sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ== - dependencies: - base64url "3.x.x" - oauth "0.9.x" - passport-strategy "1.x.x" - uid2 "0.0.x" - utils-merge "1.x.x" - -passport-oauth2@1.x.x, passport-oauth2@^1.1.2, passport-oauth2@^1.4.0, passport-oauth2@^1.6.0, passport-oauth2@^1.6.1: - version "1.7.0" - resolved "https://registry.npmmirror.com/passport-oauth2/-/passport-oauth2-1.7.0.tgz#5c4766c8531ac45ffe9ec2c09de9809e2c841fc4" - integrity sha512-j2gf34szdTF2Onw3+76alNnaAExlUmHvkc7cL+cmaS5NzHzDP/BvFHJruueQ9XAeNOdpI+CH+PWid8RA7KCwAQ== - dependencies: - base64url "3.x.x" - oauth "0.9.x" - passport-strategy "1.x.x" - uid2 "0.0.x" - utils-merge "1.x.x" - passport-oauth2@^1.7.0: version "1.8.0" resolved "https://registry.npmmirror.com/passport-oauth2/-/passport-oauth2-1.8.0.tgz#55725771d160f09bbb191828d5e3d559eee079c8" @@ -21438,37 +22996,11 @@ passport-oauth2@^1.7.0: uid2 "0.0.x" utils-merge "1.x.x" -passport-oauth@1.0.0, passport-oauth@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/passport-oauth/-/passport-oauth-1.0.0.tgz#90aff63387540f02089af28cdad39ea7f80d77df" - integrity sha512-4IZNVsZbN1dkBzmEbBqUxDG8oFOIK81jqdksE3HEb/vI3ib3FMjbiZZ6MTtooyYZzmKu0BfovjvT1pdGgIq+4Q== - dependencies: - passport-oauth1 "1.x.x" - passport-oauth2 "1.x.x" - -passport-onelogin-oauth@^0.0.1: - version "0.0.1" - resolved "https://registry.npmmirror.com/passport-onelogin-oauth/-/passport-onelogin-oauth-0.0.1.tgz#6e991ac6720783fdd80d4caa08c36cc71ef19962" - integrity sha512-EXFBqlJdHf5AX4QaiZsLfhgQUOR6z3zGA5479SUJF4I4rnAt7yasZEbs27pg8MRiQh/uLZEWLGMoVXr6LHV9mQ== - dependencies: - passport-oauth "1.0.0" - pkginfo "0.2.x" - uid2 "0.0.3" - -passport-strategy@1.x.x, passport-strategy@^1.0.0: +passport-strategy@1.x.x: version "1.0.0" resolved "https://registry.npmmirror.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" integrity sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA== -passport@^0.6.0: - version "0.6.0" - resolved "https://registry.npmmirror.com/passport/-/passport-0.6.0.tgz#e869579fab465b5c0b291e841e6cc95c005fac9d" - integrity sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug== - dependencies: - passport-strategy "1.x.x" - pause "0.0.1" - utils-merge "^1.0.1" - passport@^0.7.0: version "0.7.0" resolved "https://registry.npmmirror.com/passport/-/passport-0.7.0.tgz#3688415a59a48cf8068417a8a8092d4492ca3a05" @@ -21478,31 +23010,10 @@ passport@^0.7.0: pause "0.0.1" utils-merge "^1.0.1" -patch-package@^8.0.0: - version "8.0.0" - resolved "https://registry.npmmirror.com/patch-package/-/patch-package-8.0.0.tgz#d191e2f1b6e06a4624a0116bcb88edd6714ede61" - integrity sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA== - dependencies: - "@yarnpkg/lockfile" "^1.1.0" - chalk "^4.1.2" - ci-info "^3.7.0" - cross-spawn "^7.0.3" - find-yarn-workspace-root "^2.0.0" - fs-extra "^9.0.0" - json-stable-stringify "^1.0.2" - klaw-sync "^6.0.0" - minimist "^1.2.6" - open "^7.4.2" - rimraf "^2.6.3" - semver "^7.5.3" - slash "^2.0.0" - tmp "^0.0.33" - yaml "^2.2.2" - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.npmmirror.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== path-equal@^1.2.5: version "1.2.5" @@ -21519,6 +23030,11 @@ path-exists@^4.0.0: resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== +path-expression-matcher@^1.1.3, path-expression-matcher@^1.2.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz#3b98545dc88ffebb593e2d8458d0929da9275f4a" + integrity sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -21534,7 +23050,7 @@ path-parse@^1.0.7: resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1, path-scurry@^1.6.1: +path-scurry@^1.10.1: version "1.10.1" resolved "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== @@ -21550,6 +23066,14 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" +path-scurry@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.2.tgz#6be0d0ee02a10d9e0de7a98bae65e182c9061f85" + integrity sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -21560,23 +23084,28 @@ path-to-regexp@^6.2.0: resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== -path-to-regexp@^6.2.1: - version "6.2.2" - resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.2.2.tgz#324377a83e5049cbecadc5554d6a63a9a4866b36" - integrity sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw== +path-to-regexp@^8.0.0, path-to-regexp@^8.3.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.4.2.tgz#795c420c4f7ca45c5b887366f622ee0c9852cccd" + integrity sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA== -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" +path-to-regexp@~0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.13.tgz#9b22ec16bc3ab88d05a0c7e369869421401ab17d" + integrity sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA== path-type@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pause-stream@~0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A== + dependencies: + through "~2.3" + pause@0.0.1: version "0.0.1" resolved "https://registry.npmmirror.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" @@ -21593,6 +23122,18 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pbkdf2@^3.1.2, pbkdf2@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.5.tgz#444a59d7a259a95536c56e80c89de31cc01ed366" + integrity sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ== + dependencies: + create-hash "^1.2.0" + create-hmac "^1.1.7" + ripemd160 "^2.0.3" + safe-buffer "^5.2.1" + sha.js "^2.4.12" + to-buffer "^1.2.1" + pct-encode@~1.0.0: version "1.0.2" resolved "https://registry.npmmirror.com/pct-encode/-/pct-encode-1.0.2.tgz#b99b7b044d6bd7c39e4839a7a80122ad7515caa5" @@ -21628,6 +23169,11 @@ pg-connection-string@^2.3.0: resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.4.tgz#f543862adfa49fa4e14bc8a8892d2a84d754246d" integrity sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA== +pg-format@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/pg-format/-/pg-format-1.0.4.tgz#27734236c2ad3f4e5064915a59334e20040a828e" + integrity sha512-YyKEF78pEA6wwTAqOUaHIN/rWpfzzIuMh9KdAhc3rSLQ/7zkRFcCgYBAEGatDstLyZw4g0s9SNICmaTGnBVeyw== + pg-int8@1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" @@ -21686,36 +23232,41 @@ picocolors@^1.0.0: resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picomatch-browser@^2.2.6: version "2.2.6" resolved "https://registry.npmmirror.com/picomatch-browser/-/picomatch-browser-2.2.6.tgz#e0626204575eb49f019f2f2feac24fc3b53e7a8a" integrity sha512-0ypsOQt9D4e3hziV8O4elD9uN0z/jtUEfxVRtNaAAtXIyUx9m/SzlO020i8YNL2aL/E6blOvvHQcin6HZlFy/w== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@5.0.0, pify@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== +picomatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589" + integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== pify@^2.3.0: version "2.3.0" resolved "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - pify@^4.0.1: version "4.0.1" resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +pify@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + pino-pretty@^2.6.0: version "2.6.1" resolved "https://registry.npmmirror.com/pino-pretty/-/pino-pretty-2.6.1.tgz#b5a8e28137deb1629428931d98c708b51f0e9555" @@ -21748,17 +23299,17 @@ pino@^5.12.2: quick-format-unescaped "^3.0.3" sonic-boom "^0.7.5" -pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.6: +pirates@^4.0.1, pirates@^4.0.6: version "4.0.6" resolved "https://registry.npmmirror.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== +pkg-dir@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" + integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== dependencies: - find-up "^4.0.0" + find-up "^5.0.0" pkg-up@^3.1.0: version "3.1.0" @@ -21767,27 +23318,17 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" -pkginfo@0.2.x: - version "0.2.3" - resolved "https://registry.npmmirror.com/pkginfo/-/pkginfo-0.2.3.tgz#7239c42a5ef6c30b8f328439d9b9ff71042490f8" - integrity sha512-7W7wTrE/NsY8xv/DTGjwNIyNah81EQH0MWcTzrHL6pOpMocOGZc0Mbdz9aXxSrp+U0mSmkU8jrNCDCfUs3sOBg== - -pkginfo@0.4.x, pkginfo@^0.4.1: - version "0.4.1" - resolved "https://registry.npmmirror.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" - integrity sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ== - -playwright-core@1.41.1: - version "1.41.1" - resolved "https://registry.npmmirror.com/playwright-core/-/playwright-core-1.41.1.tgz#9c152670010d9d6f970f34b68e3e935d3c487431" - integrity sha512-/KPO5DzXSMlxSX77wy+HihKGOunh3hqndhqeo/nMxfigiKzogn8kfL0ZBDu0L1RKgan5XHCPmn6zXd2NUJgjhg== +playwright-core@1.59.1: + version "1.59.1" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.59.1.tgz#d8a2b28bcb8f2bd08ef3df93b02ae83c813244b2" + integrity sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg== -playwright@1.41.1: - version "1.41.1" - resolved "https://registry.npmmirror.com/playwright/-/playwright-1.41.1.tgz#83325f34165840d019355c2a78a50f21ed9b9c85" - integrity sha512-gdZAWG97oUnbBdRL3GuBvX3nDDmUOuqzV/D24dytqlKt+eI5KbwusluZRGljx1YoJKZ2NRPaeWiFTeGZO7SosQ== +playwright@1.59.1: + version "1.59.1" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.59.1.tgz#f7b0ca61637ae25264cec370df671bbe1f368a4a" + integrity sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw== dependencies: - playwright-core "1.41.1" + playwright-core "1.59.1" optionalDependencies: fsevents "2.3.2" @@ -21796,7 +23337,7 @@ pluralize@^8.0.0: resolved "https://registry.npmmirror.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== -pony-cause@^1.0.0: +pony-cause@^1.0.0, pony-cause@^1.1.1: version "1.1.1" resolved "https://registry.npmmirror.com/pony-cause/-/pony-cause-1.1.1.tgz#f795524f83bebbf1878bd3587b45f69143cbf3f9" integrity sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g== @@ -21816,6 +23357,19 @@ popper.js@1.16.1-lts: resolved "https://registry.npmmirror.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== +portfinder@^1.0.32: + version "1.0.38" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.38.tgz#e4fb3a2d888b20d2977da050e48ab5e1f57a185e" + integrity sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg== + dependencies: + async "^3.2.6" + debug "^4.3.6" + +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + postcss-calc@^8.2.3: version "8.2.4" resolved "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" @@ -21862,6 +23416,15 @@ postcss-discard-overridden@^5.1.0: resolved "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== +postcss-import@^16.1.0: + version "16.1.1" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-16.1.1.tgz#cfbe79e6c9232b0dbbe1c18f35308825cfe8ff2a" + integrity sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + postcss-load-config@^3.0.0: version "3.1.4" resolved "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" @@ -22071,7 +23634,7 @@ postcss-unique-selectors@^5.1.1: dependencies: postcss-selector-parser "^6.0.5" -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: +postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== @@ -22107,6 +23670,24 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" +prebuild-install@^7.0.1: + version "7.1.3" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec" + integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^2.0.0" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + prebuild-install@^7.1.1: version "7.1.1" resolved "https://registry.npmmirror.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" @@ -22171,15 +23752,20 @@ prismjs@^1.27.0: resolved "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== +prismjs@^1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.30.0.tgz#d9709969d9d4e16403f6f348c63553b19f0975a9" + integrity sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw== + prismjs@~1.27.0: version "1.27.0" resolved "https://registry.npmmirror.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== -proc-log@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" - integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== +proc-log@^4.1.0, proc-log@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034" + integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== process-nextick-args@~2.0.0: version "2.0.1" @@ -22199,11 +23785,6 @@ prom-client@^15.0.0: "@opentelemetry/api" "^1.4.0" tdigest "^0.1.1" -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - promise-retry@^2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" @@ -22217,7 +23798,14 @@ promise.series@^0.2.0: resolved "https://registry.npmmirror.com/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" integrity sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ== -prompts@^2.0.1, prompts@^2.4.2: +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prompts@^2.4.2: version "2.4.2" resolved "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== @@ -22225,14 +23813,7 @@ prompts@^2.0.1, prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -promzard@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b" - integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== - dependencies: - read "^2.0.0" - -prop-types@15.x, prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.7, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@15.x, prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -22241,10 +23822,22 @@ prop-types@15.x, prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.7, pr object-assign "^4.1.1" react-is "^16.13.1" -property-expr@^2.0.5: - version "2.0.6" - resolved "https://registry.npmmirror.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8" - integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA== +proper-lockfile@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" + integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== + dependencies: + graceful-fs "^4.2.4" + retry "^0.12.0" + signal-exit "^3.0.2" + +properties-reader@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/properties-reader/-/properties-reader-3.0.1.tgz#576af69708759bb75672bfc162b80cc8a3d1bdb2" + integrity sha512-WPn+h9RGEExOKdu4bsF4HksG/uzd3cFq3MFtq8PsFeExPse5Ha/VOjQNyHhjboBFwGXGev6muJYTSPAOkROq2g== + dependencies: + "@kwsites/file-exists" "^1.1.1" + mkdirp "^3.0.1" property-information@^5.0.0: version "5.6.0" @@ -22258,6 +23851,11 @@ property-information@^6.0.0: resolved "https://registry.npmmirror.com/property-information/-/property-information-6.4.1.tgz#de8b79a7415fd2107dfbe65758bb2cc9dfcf60ac" integrity sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w== +property-information@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d" + integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ== + proto3-json-serializer@^2.0.0: version "2.0.1" resolved "https://registry.npmmirror.com/proto3-json-serializer/-/proto3-json-serializer-2.0.1.tgz#da0b510f6d6e584b1b5c271f045c26728abe71e0" @@ -22283,10 +23881,10 @@ protobufjs@7.2.6, protobufjs@^7.2.4, protobufjs@^7.2.5: "@types/node" ">=13.7.0" long "^5.0.0" -protobufjs@^7.2.6: - version "7.3.2" - resolved "https://registry.npmmirror.com/protobufjs/-/protobufjs-7.3.2.tgz#60f3b7624968868f6f739430cfbc8c9370e26df4" - integrity sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg== +protobufjs@^7.0.0, protobufjs@^7.3.2, protobufjs@^7.4.0, protobufjs@^7.5.3: + version "7.5.5" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.5.5.tgz#b7089ca4410374c75150baf277353ef76db69f96" + integrity sha512-3wY1AxV+VBNW8Yypfd1yQY9pXnqTAN+KwQxL8iYm3/BjKYMNg4i0owhEe26PWDOMaIrzeeF98Lqd5NGz4omiIg== dependencies: "@protobufjs/aspromise" "^1.1.2" "@protobufjs/base64" "^1.1.2" @@ -22319,14 +23917,19 @@ proxy-from-env@^1.1.0: resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -psl@^1.1.28, psl@^1.1.33: +proxy-from-env@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz#a7487568adad577cfaaa7e88c49cab3ab3081aba" + integrity sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA== + +psl@^1.1.28: version "1.9.0" resolved "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== -public-encrypt@^4.0.0: +public-encrypt@^4.0.3: version "4.0.3" - resolved "https://registry.npmmirror.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== dependencies: bn.js "^4.1.0" @@ -22344,20 +23947,25 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^1.2.4, punycode@^1.4.1: +punycode.js@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" + integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== + +punycode@^1.4.1: version "1.4.1" resolved "https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: version "2.3.1" resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -pure-rand@^6.0.0: - version "6.0.4" - resolved "https://registry.npmmirror.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" - integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== qs@6.11.0: version "6.11.0" @@ -22366,7 +23974,7 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" -qs@^6.10.1, qs@^6.10.2, qs@^6.11.2, qs@^6.9.1, qs@^6.9.4: +qs@^6.10.1, qs@^6.11.2, qs@^6.9.4: version "6.11.2" resolved "https://registry.npmmirror.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== @@ -22380,24 +23988,28 @@ qs@^6.11.0: dependencies: side-channel "^1.0.6" +qs@^6.12.2, qs@^6.12.3, qs@^6.14.1: + version "6.15.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.1.tgz#bdb55aed06bfac257a90c44a446a73fba5575c8f" + integrity sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg== + dependencies: + side-channel "^1.1.0" + +qs@~6.14.0: + version "6.14.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.2.tgz#b5634cf9d9ad9898e31fba3504e866e8efb6798c" + integrity sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q== + dependencies: + side-channel "^1.1.0" + qs@~6.5.2: version "6.5.3" resolved "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== -query-string@^7.0.0: - version "7.1.3" - resolved "https://registry.npmmirror.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" - integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg== - dependencies: - decode-uri-component "^0.2.2" - filter-obj "^1.1.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - -querystring-es3@^0.2.0: +querystring-es3@^0.2.1: version "0.2.1" - resolved "https://registry.npmmirror.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== querystringify@^2.1.1: @@ -22420,11 +24032,6 @@ quick-format-unescaped@^3.0.3: resolved "https://registry.npmmirror.com/quick-format-unescaped/-/quick-format-unescaped-3.0.3.tgz#fb3e468ac64c01d22305806c39f121ddac0d1fb9" integrity sha512-dy1yjycmn9blucmJLXOfZDx1ikZJUi6E8bBZLnhPG5gBrVhHXx2xVyqqgKBubVNEXmx51dBACMHpoMQK/N/AXQ== -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - quick-lru@^5.1.1: version "5.1.1" resolved "https://registry.npmmirror.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" @@ -22445,15 +24052,15 @@ rambda@^9.1.0: resolved "https://registry.yarnpkg.com/rambda/-/rambda-9.2.1.tgz#d52070e457ef16d51693f5805679774697e3362a" integrity sha512-6Dp+QQVQuAuhwBlbIvL2FjJVHCKF29W+n9ca/BMTVDqpj+Q7KKqUh7UAINEna8aaB2/oRvPuL5hViCTQARa70Q== -ramda-adjunct@^4.0.0, ramda-adjunct@^4.1.1: - version "4.1.1" - resolved "https://registry.npmmirror.com/ramda-adjunct/-/ramda-adjunct-4.1.1.tgz#085ca9a7bf19857378eff648f9852b15136dc66f" - integrity sha512-BnCGsZybQZMDGram9y7RiryoRHS5uwx8YeGuUeDKuZuvK38XO6JJfmK85BwRWAKFA6pZ5nZBO/HBFtExVaf31w== +ramda-adjunct@^5.0.0, ramda-adjunct@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ramda-adjunct/-/ramda-adjunct-5.1.0.tgz#c1281100922b03e74b1535cb9c966628697c5cc1" + integrity sha512-8qCpl2vZBXEJyNbi4zqcgdfHtcdsWjOGbiNSEnEBrM6Y0OKOT8UxJbIVGm1TIcjaSu2MxaWcgtsNlKlCk7o7qg== -ramda@~0.29.1: - version "0.29.1" - resolved "https://registry.npmmirror.com/ramda/-/ramda-0.29.1.tgz#408a6165b9555b7ba2fc62555804b6c5a2eca196" - integrity sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA== +ramda@^0.30.1, ramda@~0.30.0: + version "0.30.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.30.1.tgz#7108ac95673062b060025052cd5143ae8fc605bf" + integrity sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw== randexp@0.4.6: version "0.4.6" @@ -22483,9 +24090,9 @@ randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -randomfill@^1.0.3: +randomfill@^1.0.4: version "1.0.4" - resolved "https://registry.npmmirror.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: randombytes "^2.0.5" @@ -22496,9 +24103,14 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -rate-limiter-flexible@^4.0.0: +rate-limit-redis@^4.2.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/rate-limit-redis/-/rate-limit-redis-4.3.1.tgz#77274184fe89ce4a8834395306821f854857178e" + integrity sha512-+a1zU8+D7L8siDK9jb14refQXz60vq427VuiplgnaLk9B2LnvGe/APLTfhwb4uNIL7eWVknh8GnRp/unCj+lMA== + +rate-limiter-flexible@^4.0.1: version "4.0.1" - resolved "https://registry.npmmirror.com/rate-limiter-flexible/-/rate-limiter-flexible-4.0.1.tgz#79b0ce111abe9c5da41d6fddf7cca93cedd3a8fc" + resolved "https://registry.yarnpkg.com/rate-limiter-flexible/-/rate-limiter-flexible-4.0.1.tgz#79b0ce111abe9c5da41d6fddf7cca93cedd3a8fc" integrity sha512-2/dGHpDFpeA0+755oUkW+EKyklqLS9lu0go9pDsbhqQjZcxfRyJ6LA4JI0+HAdZ2bemD/oOjUeZQB2lCZqXQfQ== raw-body@2.5.1: @@ -22511,7 +24123,7 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" -raw-body@2.5.2, raw-body@^2.4.1: +raw-body@^2.4.1: version "2.5.2" resolved "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== @@ -22521,6 +24133,24 @@ raw-body@2.5.2, raw-body@^2.4.1: iconv-lite "0.4.24" unpipe "1.0.0" +raw-body@~2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" + integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== + dependencies: + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + unpipe "~1.0.0" + +raw-loader@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" + integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + rc-progress@3.5.1: version "3.5.1" resolved "https://registry.npmmirror.com/rc-progress/-/rc-progress-3.5.1.tgz#a3cdfd2fe04eb5c3d43fa1c69e7dd70c73b102ae" @@ -22548,6 +24178,83 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +re2-wasm@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/re2-wasm/-/re2-wasm-1.0.2.tgz#78c09dc651b8962aa814b55ae7fe5e472ec15bbb" + integrity sha512-VXUdgSiUrE/WZXn6gUIVVIsg0+Hp6VPZPOaHCay+OuFKy6u/8ktmeNEf+U5qSA8jzGGFsg8jrDNu1BeHpz2pJA== + +react-aria-components@1.17.0, react-aria-components@~1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/react-aria-components/-/react-aria-components-1.17.0.tgz#7fd5c9b6c575b3353a5bf9996dbdc39c1ccc211e" + integrity sha512-0EyisMgvsFJ2aML3crDYv2tW5vT2Ryf8PGzY/g63JjDdCbLshlwazhS8JNtPF1vkTkungJJ6sVJbKyX+YKSoFA== + dependencies: + "@internationalized/date" "^3.12.1" + "@react-types/shared" "^3.34.0" + "@swc/helpers" "^0.5.0" + client-only "^0.0.1" + react-aria "3.48.0" + react-stately "3.46.0" + +react-aria-components@~1.16.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/react-aria-components/-/react-aria-components-1.16.0.tgz#6a5d4c75d5e9bf2c83ef8837ac19fb0a50abb698" + integrity sha512-MjHbTLpMFzzD2Tv5KbeXoZwPczuUWZcRavVvQQlNHRtXHH38D+sToMEYpNeir7Wh3K/XWtzeX3EujfJW6QNkrw== + dependencies: + "@internationalized/date" "^3.12.0" + "@internationalized/string" "^3.2.7" + "@react-aria/autocomplete" "3.0.0-rc.6" + "@react-aria/collections" "^3.0.3" + "@react-aria/dnd" "^3.11.6" + "@react-aria/focus" "^3.21.5" + "@react-aria/interactions" "^3.27.1" + "@react-aria/live-announcer" "^3.4.4" + "@react-aria/overlays" "^3.31.2" + "@react-aria/ssr" "^3.9.10" + "@react-aria/textfield" "^3.18.5" + "@react-aria/toolbar" "3.0.0-beta.24" + "@react-aria/utils" "^3.33.1" + "@react-aria/virtualizer" "^4.1.13" + "@react-stately/autocomplete" "3.0.0-beta.4" + "@react-stately/layout" "^4.6.0" + "@react-stately/selection" "^3.20.9" + "@react-stately/table" "^3.15.4" + "@react-stately/utils" "^3.11.0" + "@react-stately/virtualizer" "^4.4.6" + "@react-types/form" "^3.7.18" + "@react-types/grid" "^3.3.8" + "@react-types/shared" "^3.33.1" + "@react-types/table" "^3.13.6" + "@swc/helpers" "^0.5.0" + client-only "^0.0.1" + react-aria "^3.47.0" + react-stately "^3.45.0" + use-sync-external-store "^1.6.0" + +react-aria@3.48.0, react-aria@^3.47.0, react-aria@~3.48.0: + version "3.48.0" + resolved "https://registry.yarnpkg.com/react-aria/-/react-aria-3.48.0.tgz#ede91d3b247d34ea35216e246f0cb7de074303bd" + integrity sha512-jQjd4rBEIMqecBaAKYJbVGK6EqIHLa5znVQ7jwFyK5vCyljoj6KhgtiahmcIPsG5vG5vEDLw+ba+bEWn6A2P4w== + dependencies: + "@internationalized/date" "^3.12.1" + "@internationalized/number" "^3.6.6" + "@internationalized/string" "^3.2.8" + "@react-types/shared" "^3.34.0" + "@swc/helpers" "^0.5.0" + aria-hidden "^1.2.3" + clsx "^2.0.0" + react-stately "3.46.0" + use-sync-external-store "^1.6.0" + +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ== + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + react-beautiful-dnd@^13.0.0: version "13.1.1" resolved "https://registry.npmmirror.com/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz#b0f3087a5840920abf8bb2325f1ffa46d8c4d0a2" @@ -22561,6 +24268,11 @@ react-beautiful-dnd@^13.0.0: redux "^4.0.4" use-memo-one "^1.1.1" +react-compiler-runtime@19.1.0-rc.1: + version "19.1.0-rc.1" + resolved "https://registry.yarnpkg.com/react-compiler-runtime/-/react-compiler-runtime-19.1.0-rc.1.tgz#2535efd2e9fc9fc7d5ad47e970061dfbe38fb3f6" + integrity sha512-wCt6g+cRh8g32QT18/9blfQHywGjYu+4FlEc3CW1mx3pPxYzZZl1y+VtqxRgnKKBCFLIGUYxog4j4rs5YS86hw== + react-copy-to-clipboard@5.1.0: version "5.1.0" resolved "https://registry.npmmirror.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz#09aae5ec4c62750ccb2e6421a58725eabc41255c" @@ -22569,6 +24281,14 @@ react-copy-to-clipboard@5.1.0: copy-to-clipboard "^3.3.1" prop-types "^15.8.1" +react-copy-to-clipboard@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.1.tgz#76adb8be03616e99692fcf3f762365ed3fb5ff16" + integrity sha512-s+HrzLyJBxrpGTYXF15dTgMjAJpEPZT/Yp6NytAtZMRngejxt6Pt5WrfFxLAcsqUDU6sY1Jz6tyHwIicE1U2Xg== + dependencies: + copy-to-clipboard "^3.3.3" + prop-types "^15.8.1" + react-debounce-input@=3.3.0: version "3.3.0" resolved "https://registry.npmmirror.com/react-debounce-input/-/react-debounce-input-3.3.0.tgz#85e3ebcaa41f2016e50613134a1ec9fe3cdb422e" @@ -22628,6 +24348,13 @@ react-draggable@^4.0.0, react-draggable@^4.0.3: clsx "^1.1.1" prop-types "^15.8.1" +react-error-boundary@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-4.1.2.tgz#bc750ad962edb8b135d6ae922c046051eb58f289" + integrity sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag== + dependencies: + "@babel/runtime" "^7.12.5" + react-error-overlay@^6.0.11: version "6.0.11" resolved "https://registry.npmmirror.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" @@ -22638,6 +24365,27 @@ react-fast-compare@^3.1.1: resolved "https://registry.npmmirror.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== +react-flow-renderer@^10.3.17: + version "10.3.17" + resolved "https://registry.yarnpkg.com/react-flow-renderer/-/react-flow-renderer-10.3.17.tgz#06d6ecef5559ba5d3e64d2c8dcb74c43071d62b1" + integrity sha512-bywiqVErlh5kCDqw3x0an5Ur3mT9j9CwJsDwmhmz4i1IgYM1a0SPqqEhClvjX+s5pU4nHjmVaGXWK96pwsiGcQ== + dependencies: + "@babel/runtime" "^7.18.9" + "@types/d3" "^7.4.0" + "@types/resize-observer-browser" "^0.1.7" + classcat "^5.0.3" + d3-drag "^3.0.0" + d3-selection "^3.0.0" + d3-zoom "^3.0.0" + zustand "^3.7.2" + +react-full-screen@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/react-full-screen/-/react-full-screen-1.1.1.tgz#b707d56891015a71c503a65dbab3086d75be97d7" + integrity sha512-xoEgkoTiN0dw9cjYYGViiMCBYbkS97BYb4bHPhQVWXj1UnOs8PZ1rPzpX+2HMhuvQV1jA5AF9GaRbO3fA5aZtg== + dependencies: + fscreen "^1.0.2" + react-grid-layout@1.3.4: version "1.3.4" resolved "https://registry.npmmirror.com/react-grid-layout/-/react-grid-layout-1.3.4.tgz#4fa819be24a1ba9268aa11b82d63afc4762a32ff" @@ -22664,11 +24412,6 @@ react-hook-form@^7.12.2: resolved "https://registry.npmmirror.com/react-hook-form/-/react-hook-form-7.49.3.tgz#576a4567f8a774830812f4855e89f5da5830435c" integrity sha512-foD6r3juidAT1cOZzpmD/gOKt7fRsDhXXZ0y28+Al1CHgX+AY1qIN9VSIIItXRq1dN68QrRwl1ORFlwjBaAqeQ== -react-idle-timer@5.6.2: - version "5.6.2" - resolved "https://registry.npmmirror.com/react-idle-timer/-/react-idle-timer-5.6.2.tgz#0342b381ca26ea46e8232dbdc7f2b948bc4ddb0d" - integrity sha512-X7zjDv7duCopQ4v3X2Gun8QunvYplPWkvW2y7suDSREu1vQRQ0mr1ESv325QoJuvSIE5QCSbLaJlrbbooNaUNg== - react-idle-timer@5.7.2: version "5.7.2" resolved "https://registry.npmmirror.com/react-idle-timer/-/react-idle-timer-5.7.2.tgz#f506db28a86645dd1b87987116501703e512142b" @@ -22691,7 +24434,7 @@ react-inspector@^6.0.1: resolved "https://registry.npmmirror.com/react-inspector/-/react-inspector-6.0.2.tgz#aa3028803550cb6dbd7344816d5c80bf39d07e9d" integrity sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ== -react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.0: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -22706,6 +24449,26 @@ react-is@^18.0.0, react-is@^18.2.0: resolved "https://registry.npmmirror.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== +react-is@^19.0.0: + version "19.2.5" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.2.5.tgz#7e7b54143e9313fed787b23fd4295d5a23872ad9" + integrity sha512-Dn0t8IQhCmeIT3wu+Apm1/YVsJXsGWi6k4sPdnBIdqMVtHtv0IGi6dcpNpNkNac0zB2uUAqNX3MHzN8c+z2rwQ== + +react-json-view@^1.21.3: + version "1.21.3" + resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" + integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== + dependencies: + flux "^4.0.1" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^8.3.2" + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + react-markdown@^8.0.0: version "8.0.7" resolved "https://registry.npmmirror.com/react-markdown/-/react-markdown-8.0.7.tgz#c8dbd1b9ba5f1c5e7e5f2a44de465a3caafdf89b" @@ -22739,18 +24502,23 @@ react-redux@^7.2.0: prop-types "^15.7.2" react-is "^17.0.2" -react-redux@^9.1.0: - version "9.1.0" - resolved "https://registry.npmmirror.com/react-redux/-/react-redux-9.1.0.tgz#46a46d4cfed4e534ce5452bb39ba18e1d98a8197" - integrity sha512-6qoDzIO+gbrza8h3hjMA9aq4nwVFCKFtY2iLxCtVT38Swyy2C/dJCGBXHeHLtx6qlg/8qzc2MrhOeduf5K32wQ== +react-redux@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.2.0.tgz#96c3ab23fb9a3af2cb4654be4b51c989e32366f5" + integrity sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g== dependencies: - "@types/use-sync-external-store" "^0.0.3" - use-sync-external-store "^1.0.0" + "@types/use-sync-external-store" "^0.0.6" + use-sync-external-store "^1.4.0" -react-refresh@^0.14.0: - version "0.14.0" - resolved "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" - integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== +react-refresh@^0.17.0: + version "0.17.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.17.0.tgz#b7e579c3657f23d04eccbe4ad2e58a8ed51e7e53" + integrity sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ== + +react-refresh@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.18.0.tgz#2dce97f4fe932a4d8142fa1630e475c1729c8062" + integrity sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw== react-remove-scroll-bar@^2.3.3: version "2.3.4" @@ -22771,6 +24539,11 @@ react-remove-scroll@2.5.5: use-callback-ref "^1.3.0" use-sidecar "^1.1.2" +react-resizable-panels@^3.0.4: + version "3.0.6" + resolved "https://registry.yarnpkg.com/react-resizable-panels/-/react-resizable-panels-3.0.6.tgz#8183132ea13a09821e9c93962ed49f240cdcfd3f" + integrity sha512-b3qKHQ3MLqOgSS+FRYKapNkJZf5EQzuf6+RLiq1/IlTHw99YrZ2NJZLk4hQIzTnnIkRg2LUqyVinu6YWWpUYew== + react-resizable@^3.0.4, react-resizable@^3.0.5: version "3.0.5" resolved "https://registry.npmmirror.com/react-resizable/-/react-resizable-3.0.5.tgz#362721f2efbd094976f1780ae13f1ad7739786c1" @@ -22787,7 +24560,7 @@ react-router-dom@^6.3.0: "@remix-run/router" "1.14.2" react-router "6.21.3" -react-router@6.21.3, react-router@^6.3.0: +react-router@6.21.3: version "6.21.3" resolved "https://registry.npmmirror.com/react-router/-/react-router-6.21.3.tgz#8086cea922c2bfebbb49c6594967418f1f167d70" integrity sha512-a0H638ZXULv1OdkmiK6s6itNhoy33ywxmUFT/xtSoVyf9VnC7n7+VT4LjVzdIHSaF5TIh9ylUgxMXksHTgGrKg== @@ -22806,6 +24579,18 @@ react-sparklines@^1.7.0: dependencies: prop-types "^15.5.10" +react-stately@3.46.0, react-stately@^3.45.0, react-stately@~3.46.0: + version "3.46.0" + resolved "https://registry.yarnpkg.com/react-stately/-/react-stately-3.46.0.tgz#9ce293b765c246c398a1765d6290acd0a77caa49" + integrity sha512-OdxhWvHgs2L4OJGIs7hnuTr5WjjMM6enhNEAMRqiekhF8+ITvA2LRwNftOZwcogaoCslGYq5S2VQTQwnm0GbCA== + dependencies: + "@internationalized/date" "^3.12.1" + "@internationalized/number" "^3.6.6" + "@internationalized/string" "^3.2.8" + "@react-types/shared" "^3.34.0" + "@swc/helpers" "^0.5.0" + use-sync-external-store "^1.6.0" + react-style-singleton@^2.2.1: version "2.2.1" resolved "https://registry.npmmirror.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4" @@ -22815,7 +24600,7 @@ react-style-singleton@^2.2.1: invariant "^2.2.4" tslib "^2.0.0" -react-syntax-highlighter@^15.4.5, react-syntax-highlighter@^15.5.0: +react-syntax-highlighter@^15.4.5: version "15.5.0" resolved "https://registry.npmmirror.com/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz#4b3eccc2325fa2ec8eff1e2d6c18fa4a9e07ab20" integrity sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg== @@ -22826,12 +24611,38 @@ react-syntax-highlighter@^15.4.5, react-syntax-highlighter@^15.5.0: prismjs "^1.27.0" refractor "^3.6.0" -react-text-truncate@^0.19.0: - version "0.19.0" - resolved "https://registry.npmmirror.com/react-text-truncate/-/react-text-truncate-0.19.0.tgz#60bc5ecf29a03ebc256f31f90a2d8402176aac91" - integrity sha512-QxHpZABfGG0Z3WEYbRTZ+rXdZn50Zvp+sWZXgVAd7FCKAMzv/kcwctTpNmWgXDTpAoHhMjOVwmgRtX3x5yeF4w== +react-syntax-highlighter@^15.6.1: + version "15.6.6" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-15.6.6.tgz#77417c81ebdc554300d0332800a2e1efe5b1190b" + integrity sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw== + dependencies: + "@babel/runtime" "^7.3.1" + highlight.js "^10.4.1" + highlightjs-vue "^1.0.0" + lowlight "^1.17.0" + prismjs "^1.30.0" + refractor "^3.6.0" + +react-syntax-highlighter@^16.0.0: + version "16.1.1" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-16.1.1.tgz#928459855d375f5cfc8e646071e20d541cebcb52" + integrity sha512-PjVawBGy80C6YbC5DDZJeUjBmC7skaoEUdvfFQediQHgCL7aKyVHe57SaJGfQsloGDac+gCpTfRdtxzWWKmCXA== + dependencies: + "@babel/runtime" "^7.28.4" + highlight.js "^10.4.1" + highlightjs-vue "^1.0.0" + lowlight "^1.17.0" + prismjs "^1.30.0" + refractor "^5.0.0" + +react-textarea-autosize@^8.3.2: + version "8.5.9" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.9.tgz#ab8627b09aa04d8a2f45d5b5cd94c84d1d4a8893" + integrity sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A== dependencies: - prop-types "^15.5.7" + "@babel/runtime" "^7.20.13" + use-composed-ref "^1.3.0" + use-latest "^1.2.1" react-transition-group@^4.0.0, react-transition-group@^4.4.0, react-transition-group@^4.4.5: version "4.4.5" @@ -22868,6 +24679,26 @@ react-use@^17.2.4, react-use@^17.3.2, react-use@^17.4.0: ts-easing "^0.2.0" tslib "^2.1.0" +react-use@^17.6.0: + version "17.6.0" + resolved "https://registry.yarnpkg.com/react-use/-/react-use-17.6.0.tgz#2101a3a79dc965a25866b21f5d6de4b128488a14" + integrity sha512-OmedEScUMKFfzn1Ir8dBxiLLSOzhKe/dPZwVxcujweSj45aNM7BEGPb9BEVIgVEqEXx6f3/TsXzwIktNgUR02g== + dependencies: + "@types/js-cookie" "^2.2.6" + "@xobotyi/scrollbar-width" "^1.9.5" + copy-to-clipboard "^3.3.1" + fast-deep-equal "^3.1.3" + fast-shallow-equal "^1.0.0" + js-cookie "^2.2.1" + nano-css "^5.6.2" + react-universal-interface "^0.6.2" + resize-observer-polyfill "^1.5.1" + screenfull "^5.1.0" + set-harmonic-interval "^1.0.1" + throttle-debounce "^3.0.1" + ts-easing "^0.2.0" + tslib "^2.1.0" + react-virtualized-auto-sizer@^1.0.11: version "1.0.21" resolved "https://registry.npmmirror.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.21.tgz#c840bbc80a691aee030d090785b98142102013c5" @@ -22888,64 +24719,19 @@ react@^18.0.2: dependencies: loose-envify "^1.1.0" -read-cmd-shim@4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" - integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== - -read-package-json-fast@^3.0.0: - version "3.0.2" - resolved "https://registry.npmmirror.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" - integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== - dependencies: - json-parse-even-better-errors "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -read-package-json@6.0.4, read-package-json@^6.0.0: - version "6.0.4" - resolved "https://registry.npmmirror.com/read-package-json/-/read-package-json-6.0.4.tgz#90318824ec456c287437ea79595f4c2854708836" - integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== - dependencies: - glob "^10.2.2" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^5.0.0" - npm-normalize-package-bin "^3.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" + pify "^2.3.0" -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== +read-tls-client-hello@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-tls-client-hello/-/read-tls-client-hello-1.1.0.tgz#2e1694921b6b6e1c52cda61614859e2273db0bf0" + integrity sha512-htV8ph2jXGCVnKRwW12V1UQdfwC2jPFrDrk8Qh9P+4R/t/Jef/BNmfdX5jsxlcakUMPskwiPZT/enVbjRQqtGQ== dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" + "@types/node" "*" read-yaml-file@^1.1.0: version "1.1.0" @@ -22957,14 +24743,7 @@ read-yaml-file@^1.1.0: pify "^4.0.1" strip-bom "^3.0.0" -read@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" - integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== - dependencies: - mute-stream "~1.0.0" - -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0, readable-stream@^3.6.2: +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -22973,7 +24752,7 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stre string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.5, readable-stream@^2.3.3, readable-stream@^2.3.8, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -22986,6 +24765,17 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^4.0.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" + integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + readable-web-to-node-stream@^3.0.0: version "3.0.2" resolved "https://registry.npmmirror.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" @@ -23058,17 +24848,19 @@ redux@^5.0.1: resolved "https://registry.npmmirror.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b" integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== -reflect.getprototypeof@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" - integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" refractor@^3.6.0: version "3.6.0" @@ -23079,17 +24871,15 @@ refractor@^3.6.0: parse-entities "^2.0.0" prismjs "~1.27.0" -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== +refractor@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-5.0.0.tgz#85daf0448a6d947f5361796eb22c31733d61d904" + integrity sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw== dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + "@types/hast" "^3.0.0" + "@types/prismjs" "^1.0.0" + hastscript "^9.0.0" + parse-entities "^4.0.0" regenerator-runtime@^0.10.5: version "0.10.5" @@ -23106,14 +24896,7 @@ regenerator-runtime@^0.14.0: resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: +regexp.prototype.flags@^1.5.1: version "1.5.1" resolved "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== @@ -23122,24 +24905,35 @@ regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: define-properties "^1.2.0" set-function-name "^2.0.0" -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== +regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== +rehype-raw@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-6.1.1.tgz#81bbef3793bd7abacc6bf8335879d1b6c868c9d4" + integrity sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ== + dependencies: + "@types/hast" "^2.0.0" + hast-util-raw "^7.2.0" + unified "^10.0.0" + +rehype-sanitize@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/rehype-sanitize/-/rehype-sanitize-5.0.1.tgz#dac01a7417bdd329260c74c74449697b4be5eb56" + integrity sha512-da/jIOjq8eYt/1r9GN6GwxIR3gde7OZ+WV8pheu1tL8K0D9KxM2AyMh+UEfke+FfdM3PvGHeYJU0Td5OWa7L5A== dependencies: - jsesc "~0.5.0" + "@types/hast" "^2.0.0" + hast-util-sanitize "^4.0.0" + unified "^10.0.0" relateurl@^0.2.7: version "0.2.7" @@ -23183,11 +24977,6 @@ remarkable@^2.0.1: argparse "^1.0.10" autolinker "^3.11.0" -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - renderkid@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" @@ -23254,28 +25043,21 @@ requires-port@^1.0.0: resolved "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -reselect@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/reselect/-/reselect-5.1.0.tgz#c479139ab9dd91be4d9c764a7f3868210ef8cd21" - integrity sha512-aw7jcGLDpSgNDyWBQLv2cedml85qd95/iszJjN988zX1t7AVRJi19d9kto5+W7oCfQ94gyo40dVbT6g2k4/kXg== +reselect@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.1.tgz#c766b1eb5d558291e5e550298adb0becc24bb72e" + integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w== resize-observer-polyfill@^1.5.1: version "1.5.1" resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== -resolve-alpn@^1.0.0: +resolve-alpn@^1.2.0: version "1.2.1" - resolved "https://registry.npmmirror.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" @@ -23284,27 +25066,22 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: expand-tilde "^2.0.0" global-modules "^1.0.0" -resolve-from@5.0.0, resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve-pkg-maps@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== -resolve.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.npmmirror.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== - -resolve@1.22.8, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.4: +resolve@1.22.8, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.4: version "1.22.8" resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -23313,21 +25090,27 @@ resolve@1.22.8, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.4: - version "2.0.0-next.5" - resolved "https://registry.npmmirror.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" - integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== +resolve@^1.1.7, resolve@^1.17.0: + version "1.22.12" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.12.tgz#f5b2a680897c69c238a13cd16b15671f8b73549f" + integrity sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA== dependencies: - is-core-module "^2.13.0" + es-errors "^1.3.0" + is-core-module "^2.16.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== +resolve@^2.0.0-next.5: + version "2.0.0-next.6" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.6.tgz#b3961812be69ace7b3bc35d5bf259434681294af" + integrity sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA== dependencies: - lowercase-keys "^2.0.0" + es-errors "^1.3.0" + is-core-module "^2.16.1" + node-exports-info "^1.6.0" + object-keys "^1.1.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" restore-cursor@^3.1.0: version "3.1.0" @@ -23388,27 +25171,13 @@ rifm@^0.7.0: dependencies: "@babel/runtime" "^7.3.1" -rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" -rimraf@^4.4.1: - version "4.4.1" - resolved "https://registry.npmmirror.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" - integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== - dependencies: - glob "^9.2.0" - rimraf@^5.0.5: version "5.0.7" resolved "https://registry.npmmirror.com/rimraf/-/rimraf-5.0.7.tgz#27bddf202e7d89cb2e0381656380d1734a854a74" @@ -23424,6 +25193,14 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +ripemd160@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.3.tgz#9be54e4ba5e3559c8eee06a25cd7648bbccdf5a8" + integrity sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA== + dependencies: + hash-base "^3.1.2" + inherits "^2.0.4" + roarr@^2.15.3: version "2.15.4" resolved "https://registry.npmmirror.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" @@ -23481,29 +25258,38 @@ rollup-pluginutils@^2.8.2: dependencies: estree-walker "^0.6.1" -rollup@^4.0.0: - version "4.18.0" - resolved "https://registry.npmmirror.com/rollup/-/rollup-4.18.0.tgz#497f60f0c5308e4602cf41136339fbf87d5f5dda" - integrity sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg== +rollup@^4.27.3, rollup@^4.59.0: + version "4.60.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.60.2.tgz#ac23fe4bd530304cef9fa61e639d7098b6762cf4" + integrity sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ== dependencies: - "@types/estree" "1.0.5" + "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.18.0" - "@rollup/rollup-android-arm64" "4.18.0" - "@rollup/rollup-darwin-arm64" "4.18.0" - "@rollup/rollup-darwin-x64" "4.18.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.18.0" - "@rollup/rollup-linux-arm-musleabihf" "4.18.0" - "@rollup/rollup-linux-arm64-gnu" "4.18.0" - "@rollup/rollup-linux-arm64-musl" "4.18.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.18.0" - "@rollup/rollup-linux-riscv64-gnu" "4.18.0" - "@rollup/rollup-linux-s390x-gnu" "4.18.0" - "@rollup/rollup-linux-x64-gnu" "4.18.0" - "@rollup/rollup-linux-x64-musl" "4.18.0" - "@rollup/rollup-win32-arm64-msvc" "4.18.0" - "@rollup/rollup-win32-ia32-msvc" "4.18.0" - "@rollup/rollup-win32-x64-msvc" "4.18.0" + "@rollup/rollup-android-arm-eabi" "4.60.2" + "@rollup/rollup-android-arm64" "4.60.2" + "@rollup/rollup-darwin-arm64" "4.60.2" + "@rollup/rollup-darwin-x64" "4.60.2" + "@rollup/rollup-freebsd-arm64" "4.60.2" + "@rollup/rollup-freebsd-x64" "4.60.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.60.2" + "@rollup/rollup-linux-arm-musleabihf" "4.60.2" + "@rollup/rollup-linux-arm64-gnu" "4.60.2" + "@rollup/rollup-linux-arm64-musl" "4.60.2" + "@rollup/rollup-linux-loong64-gnu" "4.60.2" + "@rollup/rollup-linux-loong64-musl" "4.60.2" + "@rollup/rollup-linux-ppc64-gnu" "4.60.2" + "@rollup/rollup-linux-ppc64-musl" "4.60.2" + "@rollup/rollup-linux-riscv64-gnu" "4.60.2" + "@rollup/rollup-linux-riscv64-musl" "4.60.2" + "@rollup/rollup-linux-s390x-gnu" "4.60.2" + "@rollup/rollup-linux-x64-gnu" "4.60.2" + "@rollup/rollup-linux-x64-musl" "4.60.2" + "@rollup/rollup-openbsd-x64" "4.60.2" + "@rollup/rollup-openharmony-arm64" "4.60.2" + "@rollup/rollup-win32-arm64-msvc" "4.60.2" + "@rollup/rollup-win32-ia32-msvc" "4.60.2" + "@rollup/rollup-win32-x64-gnu" "4.60.2" + "@rollup/rollup-win32-x64-msvc" "4.60.2" fsevents "~2.3.2" rtl-css-js@^1.16.1: @@ -23530,11 +25316,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -run-script-webpack-plugin@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/run-script-webpack-plugin/-/run-script-webpack-plugin-0.2.0.tgz#45bfdd4e11345c8619eabaef8113c2a4f26dc653" - integrity sha512-SVNNq4jxzjfnaW+HkdTlyH1CWwCuSb/weYfic0D7Y/KnhY27YRYkzgybdzTDEPJlpQ73FDCRDbyBFwNsJMmwWQ== - rxjs@^7.5.5, rxjs@^7.8.1: version "7.8.1" resolved "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" @@ -23549,6 +25330,11 @@ sade@^1.7.3: dependencies: mri "^1.1.0" +safari-14-idb-fix@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/safari-14-idb-fix/-/safari-14-idb-fix-1.0.6.tgz#cbaabc33a4500c44b5c432d6c525b0ed9b68bb65" + integrity sha512-oTEQOdMwRX+uCtWCKT1nx2gAeSdpr8elg/2gcaKUH00SJU2xWESfkx11nmXwTRHy7xfQoj1o4TTQvdmuBosTnA== + safe-array-concat@^1.0.1: version "1.1.0" resolved "https://registry.npmmirror.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" @@ -23559,6 +25345,17 @@ safe-array-concat@^1.0.1: has-symbols "^1.0.3" isarray "^2.0.5" +safe-array-concat@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.4.tgz#a54cc9b61a57f33b42abad3cbdda3a2b38cc5719" + integrity sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg== + dependencies: + call-bind "^1.0.9" + call-bound "^1.0.4" + get-intrinsic "^1.3.0" + has-symbols "^1.1.0" + isarray "^2.0.5" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -23574,6 +25371,14 @@ safe-identifier@^0.4.2: resolved "https://registry.npmmirror.com/safe-identifier/-/safe-identifier-0.4.2.tgz#cf6bfca31c2897c588092d1750d30ef501d59fcb" integrity sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w== +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + safe-regex-test@^1.0.0: version "1.0.2" resolved "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.2.tgz#3ba32bdb3ea35f940ee87e5087c60ee786c3f6c5" @@ -23583,6 +25388,15 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.2.2" is-regex "^1.1.4" +safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + safe-stable-stringify@^1.1: version "1.1.1" resolved "https://registry.npmmirror.com/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz#c8a220ab525cd94e60ebf47ddc404d610dc5d84a" @@ -23603,13 +25417,6 @@ sax@>=0.6.0: resolved "https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - saxes@^6.0.0: version "6.0.0" resolved "https://registry.npmmirror.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" @@ -23633,7 +25440,7 @@ schema-utils@2.7.0: ajv "^6.12.2" ajv-keywords "^3.4.1" -schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: +schema-utils@^3.0.0, schema-utils@^3.1.1: version "3.3.0" resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== @@ -23652,6 +25459,16 @@ schema-utils@^4.0.0, schema-utils@^4.2.0: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" +schema-utils@^4.3.0, schema-utils@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" + integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + schemes@^1.4.0: version "1.4.0" resolved "https://registry.npmmirror.com/schemes/-/schemes-1.4.0.tgz#9d03302275e562488dd3afa7b654ed42e00569ec" @@ -23664,6 +25481,11 @@ screenfull@^5.1.0: resolved "https://registry.npmmirror.com/screenfull/-/screenfull-5.2.0.tgz#6533d524d30621fc1283b9692146f3f13a93d1ba" integrity sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA== +select-case@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/select-case/-/select-case-1.0.0.tgz#9f9bbc00b8261f19f62701917846d52eea4f6d97" + integrity sha512-YN35jnDPQyvPk84kUGhJWBVKRhtNn51byIXbznpC6tZpTCUz330w7WX2tT5A6+3rw+NXIdya7ZQHqxKXi1m25g== + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -23682,30 +25504,33 @@ semver-compare@^1.0.0: resolved "https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== -"semver@2 || 3 || 4 || 5", semver@^5.6.0: +semver@7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +semver@^5.0.1: version "5.7.2" - resolved "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.5.3: - version "7.5.3" - resolved "https://registry.npmmirror.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" - integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== - dependencies: - lru-cache "^6.0.0" - -semver@^6.3.0, semver@^6.3.1: +semver@^6.3.1: version "6.3.1" resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: +semver@^7.3.2, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" +semver@^7.6.0, semver@^7.7.3: + version "7.7.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" + integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== + send@0.18.0: version "0.18.0" resolved "https://registry.npmmirror.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -23725,6 +25550,25 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" +send@~0.19.0, send@~0.19.1: + version "0.19.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.2.tgz#59bc0da1b4ea7ad42736fd642b1c4294e114ff29" + integrity sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~2.0.0" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "~0.5.2" + http-errors "~2.0.1" + mime "1.6.0" + ms "2.1.3" + on-finished "~2.4.1" + range-parser "~1.2.1" + statuses "~2.0.2" + seq-queue@^0.0.5: version "0.0.5" resolved "https://registry.npmmirror.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" @@ -23744,13 +25588,6 @@ serialize-error@^8.0.1, serialize-error@^8.1.0: dependencies: type-fest "^0.20.2" -serialize-javascript@^6.0.1: - version "6.0.2" - resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" - serve-index@^1.9.1: version "1.9.1" resolved "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" @@ -23774,10 +25611,15 @@ serve-static@1.15.0: parseurl "~1.3.3" send "0.18.0" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +serve-static@~1.16.2: + version "1.16.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.3.tgz#a97b74d955778583f3862a4f0b841eb4d5d78cf9" + integrity sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA== + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "~0.19.1" set-cookie-parser@^2.4.6: version "2.6.0" @@ -23795,7 +25637,7 @@ set-function-length@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.1" -set-function-length@^1.2.1: +set-function-length@^1.2.1, set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== @@ -23816,11 +25658,30 @@ set-function-name@^2.0.0, set-function-name@^2.0.1: functions-have-names "^1.2.3" has-property-descriptors "^1.0.0" +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + set-harmonic-interval@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz#e1773705539cdfb80ce1c3d99e7f298bb3995249" integrity sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g== +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + set-value@^4.1.0: version "4.1.0" resolved "https://registry.npmmirror.com/set-value/-/set-value-4.1.0.tgz#aa433662d87081b75ad88a4743bd450f044e7d09" @@ -23839,7 +25700,7 @@ setprototypeof@1.1.0: resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== -setprototypeof@1.2.0: +setprototypeof@1.2.0, setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== @@ -23852,12 +25713,14 @@ sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8, sha.js@^2.4.9: inherits "^2.0.1" safe-buffer "^5.0.1" -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== +sha.js@^2.4.12: + version "2.4.12" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.12.tgz#eb8b568bf383dfd1867a32c3f2b74eb52bdbf23f" + integrity sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w== dependencies: - kind-of "^6.0.2" + inherits "^2.0.4" + safe-buffer "^5.2.1" + to-buffer "^1.2.0" shebang-command@^2.0.0: version "2.0.0" @@ -23876,10 +25739,39 @@ shell-quote@^1.7.3, shell-quote@^1.8.1: resolved "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== -short-unique-id@^5.0.2: - version "5.0.3" - resolved "https://registry.npmmirror.com/short-unique-id/-/short-unique-id-5.0.3.tgz#bc6975dc5e8b296960ff5ac91ddabbc7ddb693d9" - integrity sha512-yhniEILouC0s4lpH0h7rJsfylZdca10W9mDJRAFh3EpcSUanCHGb0R7kcFOIUCZYSAPo0PUD5ZxWQdW0T4xaug== +short-unique-id@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/short-unique-id/-/short-unique-id-5.3.2.tgz#6fea1b8fcaac44455abd1fa25840ebdb9c0a8ae7" + integrity sha512-KRT/hufMSxXKEDSQujfVE0Faa/kZ51ihUcZQAcmP04t00DvPj7Ox5anHke1sJYUtzSuiT/Y5uyzg/W7bBEGhCg== + +side-channel-list@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.1.tgz#c2e0b5a14a540aebee3bbc6c3f8666cc9b509127" + integrity sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.4" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" side-channel@^1.0.4: version "1.0.4" @@ -23900,7 +25792,18 @@ side-channel@^1.0.6: get-intrinsic "^1.2.4" object-inspect "^1.13.1" -signal-exit@3.0.7, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -23910,17 +25813,6 @@ signal-exit@^4.0.1: resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -sigstore@^1.3.0, sigstore@^1.4.0: - version "1.9.0" - resolved "https://registry.npmmirror.com/sigstore/-/sigstore-1.9.0.tgz#1e7ad8933aa99b75c6898ddd0eeebc3eb0d59875" - integrity sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A== - dependencies: - "@sigstore/bundle" "^1.1.0" - "@sigstore/protobuf-specs" "^0.2.0" - "@sigstore/sign" "^1.0.0" - "@sigstore/tuf" "^1.0.3" - make-fetch-happen "^11.0.1" - simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -23954,16 +25846,18 @@ sisteransi@^1.0.5: resolved "https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -slash@3.0.0, slash@^3.0.0: +skin-tone@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/skin-tone/-/skin-tone-2.0.0.tgz#4e3933ab45c0d4f4f781745d64b9f4c208e41237" + integrity sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA== + dependencies: + unicode-emoji-modifier-base "^1.0.0" + +slash@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" @@ -23994,6 +25888,15 @@ socks-proxy-agent@^7.0.0: debug "^4.3.3" socks "^2.6.2" +socks-proxy-agent@^8.0.3, socks-proxy-agent@^8.0.4, socks-proxy-agent@^8.0.5: + version "8.0.5" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" + integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== + dependencies: + agent-base "^7.1.2" + debug "^4.3.4" + socks "^2.8.3" + socks@^2.6.2: version "2.7.1" resolved "https://registry.npmmirror.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" @@ -24002,6 +25905,14 @@ socks@^2.6.2: ip "^2.0.0" smart-buffer "^4.2.0" +socks@^2.8.3: + version "2.8.7" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.7.tgz#e2fb1d9a603add75050a2067db8c381a0b5669ea" + integrity sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A== + dependencies: + ip-address "^10.0.1" + smart-buffer "^4.2.0" + sonic-boom@^0.7.5: version "0.7.7" resolved "https://registry.npmmirror.com/sonic-boom/-/sonic-boom-0.7.7.tgz#d921de887428208bfa07b0ae32c278de043f350a" @@ -24017,13 +25928,6 @@ sonic-forest@^1.0.0: dependencies: tree-dump "^1.0.0" -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== - dependencies: - is-plain-obj "^1.0.0" - sorted-array-functions@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz#8605695563294dffb2c9796d602bd8459f7a0dd5" @@ -24039,13 +25943,10 @@ source-map-js@^1.0.2: resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map-support@~0.5.20: version "0.5.21" @@ -24080,41 +25981,15 @@ space-separated-tokens@^1.0.0: resolved "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== -space-separated-tokens@^2.0.0: - version "2.0.2" - resolved "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" - integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== - -spawn-command@0.0.2: - version "0.0.2" - resolved "https://registry.npmmirror.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" - integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.4.0" - resolved "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b" - integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== -spdx-license-ids@^3.0.0: - version "3.0.16" - resolved "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== +spawn-command@0.0.2: + version "0.0.2" + resolved "https://registry.npmmirror.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" + integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== spdy-transport@^3.0.0: version "3.0.0" @@ -24144,12 +26019,7 @@ split-ca@^1.0.1: resolved "https://registry.npmmirror.com/split-ca/-/split-ca-1.0.1.tgz#6c83aff3692fa61256e0cd197e05e9de157691a6" integrity sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ== -split-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== - -split2@^3.0.0, split2@^3.2.2: +split2@^3.0.0: version "3.2.2" resolved "https://registry.npmmirror.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== @@ -24161,13 +26031,6 @@ split2@^4.1.0: resolved "https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== -split@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - sprintf-js@^1.1.2: version "1.1.3" resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" @@ -24183,7 +26046,15 @@ sqlstring@^2.3.2: resolved "https://registry.npmmirror.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c" integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== -ssh2@^1.11.0, ssh2@^1.15.0: +ssh-remote-port-forward@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/ssh-remote-port-forward/-/ssh-remote-port-forward-1.0.4.tgz#72b0c5df8ec27ca300c75805cc6b266dee07e298" + integrity sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ== + dependencies: + "@types/ssh2" "^0.5.48" + ssh2 "^1.4.0" + +ssh2@^1.15.0: version "1.15.0" resolved "https://registry.npmmirror.com/ssh2/-/ssh2-1.15.0.tgz#2f998455036a7f89e0df5847efb5421748d9871b" integrity sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw== @@ -24194,6 +26065,17 @@ ssh2@^1.11.0, ssh2@^1.15.0: cpu-features "~0.0.9" nan "^2.18.0" +ssh2@^1.4.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.17.0.tgz#dc686e8e3abdbd4ad95d46fa139615903c12258c" + integrity sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ== + dependencies: + asn1 "^0.2.6" + bcrypt-pbkdf "^1.0.2" + optionalDependencies: + cpu-features "~0.0.10" + nan "^2.23.0" + sshpk@^1.7.0: version "1.18.0" resolved "https://registry.npmmirror.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" @@ -24209,20 +26091,13 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^10.0.0, ssri@^10.0.1: +ssri@^10.0.0: version "10.0.5" resolved "https://registry.npmmirror.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== dependencies: minipass "^7.0.3" -ssri@^9.0.0, ssri@^9.0.1: - version "9.0.1" - resolved "https://registry.npmmirror.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" - integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== - dependencies: - minipass "^3.1.1" - stable@^0.1.8: version "0.1.8" resolved "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -24269,11 +26144,6 @@ stacktrace-js@^2.0.2: stack-generator "^2.0.5" stacktrace-gps "^3.0.4" -stampit@^4.3.2: - version "4.3.2" - resolved "https://registry.npmmirror.com/stampit/-/stampit-4.3.2.tgz#cfd3f607dd628a161ce6305621597994b4d56573" - integrity sha512-pE2org1+ZWQBnIxRPrBM2gVupkuDD0TTNIo1H6GdT/vO82NXli2z8lRE8cu/nBIHrcOCXFBAHpb9ZldrB2/qOA== - standard-as-callback@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" @@ -24291,11 +26161,16 @@ statuses@2.0.1: resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0: +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +statuses@^2.0.1, statuses@~2.0.1, statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + stop-iteration-iterator@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" @@ -24303,27 +26178,27 @@ stop-iteration-iterator@^1.0.0: dependencies: internal-slot "^1.0.4" +stop-iteration-iterator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== + dependencies: + es-errors "^1.3.0" + internal-slot "^1.1.0" + stoppable@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b" integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw== -stream-browserify@3.0.0: +stream-browserify@3.0.0, stream-browserify@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== dependencies: inherits "~2.0.4" readable-stream "^3.5.0" -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.npmmirror.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - stream-buffers@^3.0.2: version "3.0.2" resolved "https://registry.npmmirror.com/stream-buffers/-/stream-buffers-3.0.2.tgz#5249005a8d5c2d00b3a32e6e0a6ea209dc4f3521" @@ -24336,16 +26211,15 @@ stream-events@^1.0.5: dependencies: stubs "^3.0.0" -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.npmmirror.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== +stream-http@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.2.0.tgz#1872dfcf24cb15752677e40e5c3f9cc1926028b5" + integrity sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A== dependencies: builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" + inherits "^2.0.4" + readable-stream "^3.6.0" + xtend "^4.0.2" stream-shift@^1.0.0: version "1.0.3" @@ -24366,6 +26240,15 @@ streamsearch@^1.1.0: resolved "https://registry.npmmirror.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== +streamx@^2.12.5, streamx@^2.25.0: + version "2.25.0" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.25.0.tgz#cc967e99390fda8b918b1eeaf3bc437637c8c7af" + integrity sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg== + dependencies: + events-universal "^1.0.0" + fast-fifo "^1.3.2" + text-decoder "^1.1.0" + streamx@^2.15.0: version "2.15.6" resolved "https://registry.npmmirror.com/streamx/-/streamx-2.15.6.tgz#28bf36997ebc7bf6c08f9eba958735231b833887" @@ -24386,29 +26269,11 @@ strict-event-emitter@^0.4.3: resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz#ff347c8162b3e931e3ff5f02cfce6772c3b07eb3" integrity sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg== -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== - -string-env-interpolation@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz#ad4397ae4ac53fe6c91d1402ad6f6a52862c7152" - integrity sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg== - string-hash@^1.1.1: version "1.1.3" resolved "https://registry.npmmirror.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" integrity sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A== -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.npmmirror.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -24418,7 +26283,7 @@ string-length@^4.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -24436,20 +26301,54 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.matchall@^4.0.8: - version "4.0.10" - resolved "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== +string.prototype.includes@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" + integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + +string.prototype.matchall@^4.0.12: + version "4.0.12" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0" + integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + gopd "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + regexp.prototype.flags "^1.5.3" + set-function-name "^2.0.2" + side-channel "^1.1.0" + +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" string.prototype.trim@^1.2.8: version "1.2.8" @@ -24469,6 +26368,16 @@ string.prototype.trimend@^1.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" +string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + string.prototype.trimstart@^1.0.7: version "1.0.7" resolved "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" @@ -24478,7 +26387,16 @@ string.prototype.trimstart@^1.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" -string_decoder@^1.0.0, string_decoder@^1.1.1: +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -24520,16 +26438,18 @@ strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" +strip-ansi@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" + integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== + dependencies: + ansi-regex "^6.2.2" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -24557,14 +26477,10 @@ strnum@^1.0.5: resolved "https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== -strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" - integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== - dependencies: - duplexer "^0.1.1" - minimist "^1.2.0" - through "^2.3.4" +strnum@^2.2.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.2.3.tgz#0119fce02749a11bb126a4d686ac5dbdf6e57586" + integrity sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg== strtok3@^6.2.4: version "6.3.0" @@ -24671,7 +26587,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -24685,17 +26601,20 @@ supports-color@^8.0.0, supports-color@^8.1.1: dependencies: has-flag "^4.0.0" +supports-hyperlinks@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz#b8e485b179681dea496a1e7abdf8985bd3145461" + integrity sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -svg-parser@^2.0.4: - version "2.0.4" - resolved "https://registry.npmmirror.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" - integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== - -svgo@^2.7.0, svgo@^2.8.0: +svgo@^2.7.0: version "2.8.0" resolved "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== @@ -24708,46 +26627,49 @@ svgo@^2.7.0, svgo@^2.8.0: picocolors "^1.0.0" stable "^0.1.8" -swagger-client@^3.25.0: - version "3.25.0" - resolved "https://registry.npmmirror.com/swagger-client/-/swagger-client-3.25.0.tgz#c59b181bed7172475d275487e6ab8365bd3f06ec" - integrity sha512-p143zWkIhgyh2E5+3HPFMlCw3WkV9RbX9HyftfBdiccCbOlmHdcJC0XEJZxcm+ZA+80DORs0F30/mzk7sx4iwA== +swagger-client@^3.37.2: + version "3.37.2" + resolved "https://registry.yarnpkg.com/swagger-client/-/swagger-client-3.37.2.tgz#19d15564b2c77c9200a3ee2b8a913e2bd2e4a596" + integrity sha512-KcB8psL1On4GWwv9Ribp1oteh50ygNnAyvQbd5MwiXMGkcB4f53rkZEdvZKPDdJO764mQjgErxQEGDVw6QBUMQ== dependencies: "@babel/runtime-corejs3" "^7.22.15" - "@swagger-api/apidom-core" ">=0.90.0 <1.0.0" - "@swagger-api/apidom-error" ">=0.90.0 <1.0.0" - "@swagger-api/apidom-json-pointer" ">=0.90.0 <1.0.0" - "@swagger-api/apidom-ns-openapi-3-1" ">=0.90.0 <1.0.0" - "@swagger-api/apidom-reference" ">=0.90.0 <1.0.0" - cookie "~0.6.0" + "@scarf/scarf" "=1.4.0" + "@swagger-api/apidom-core" "^1.10.2" + "@swagger-api/apidom-error" "^1.10.2" + "@swagger-api/apidom-json-pointer" "^1.10.2" + "@swagger-api/apidom-ns-openapi-3-1" "^1.10.2" + "@swagger-api/apidom-ns-openapi-3-2" "^1.10.2" + "@swagger-api/apidom-reference" "^1.10.2" + "@swaggerexpert/cookie" "^2.0.2" deepmerge "~4.3.0" fast-json-patch "^3.0.0-1" - is-plain-object "^5.0.0" js-yaml "^4.1.0" + neotraverse "=0.6.18" node-abort-controller "^3.1.1" - node-fetch-commonjs "^3.3.1" - qs "^6.10.2" - traverse "~0.6.6" - undici "^5.24.0" - -swagger-ui-react@^5.0.0: - version "5.11.2" - resolved "https://registry.npmmirror.com/swagger-ui-react/-/swagger-ui-react-5.11.2.tgz#00d6f08b106e345c9236ad39e151948577b98a23" - integrity sha512-J7QevDccLZYXV1OkplfWPdgW17MVbFozcwmfWX6Ob+XwukXGjPC5XY9EqhZiwRQd02MfZX9uQLKp4kPrlibAGA== - dependencies: - "@babel/runtime-corejs3" "^7.23.8" - "@braintree/sanitize-url" "=7.0.0" + node-fetch-commonjs "^3.3.2" + openapi-path-templating "^2.2.1" + openapi-server-url-templating "^1.3.0" + ramda "^0.30.1" + ramda-adjunct "^5.1.0" + +swagger-ui-react@^5.27.1: + version "5.32.4" + resolved "https://registry.yarnpkg.com/swagger-ui-react/-/swagger-ui-react-5.32.4.tgz#783b22213c4e826618b1470fd8ae9e68a2587c7d" + integrity sha512-OsTqKCiDT/o8/oqZbt+p1djPkrOk3unKK/7+wGvP1+WY6pOzFoDLM4D39cNFtpIArtlg9uoK6MKIz3W00WX8qw== + dependencies: + "@babel/runtime-corejs3" "^7.27.1" + "@scarf/scarf" "=1.4.0" base64-js "^1.5.1" + buffer "^6.0.3" classnames "^2.5.1" css.escape "1.5.1" deep-extend "0.6.0" - dompurify "=3.0.8" + dompurify "^3.3.2" ieee754 "^1.2.1" immutable "^3.x.x" js-file-download "^0.4.12" - js-yaml "=4.1.0" - lodash "^4.17.21" - patch-package "^8.0.0" + js-yaml "=4.1.1" + lodash "^4.18.1" prop-types "^15.8.1" randexp "^0.5.3" randombytes "^2.1.0" @@ -24756,15 +26678,15 @@ swagger-ui-react@^5.0.0: react-immutable-proptypes "2.2.0" react-immutable-pure-component "^2.2.0" react-inspector "^6.0.1" - react-redux "^9.1.0" - react-syntax-highlighter "^15.5.0" + react-redux "^9.2.0" + react-syntax-highlighter "^16.0.0" redux "^5.0.1" redux-immutable "^4.0.0" remarkable "^2.0.1" - reselect "^5.1.0" + reselect "^5.1.1" serialize-error "^8.1.0" - sha.js "^2.4.11" - swagger-client "^3.25.0" + sha.js "^2.4.12" + swagger-client "^3.37.2" url-parse "^1.5.10" xml "=1.0.1" xml-but-prettier "^1.0.1" @@ -24783,6 +26705,11 @@ swr@^2.0.0: client-only "^0.0.1" use-sync-external-store "^1.2.0" +symbol-observable@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -24793,11 +26720,16 @@ tapable@^1.0.0: resolved "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: +tapable@^2.0.0, tapable@^2.2.1: version "2.2.1" resolved "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tapable@^2.3.0, tapable@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.3.tgz#5da7c9992c46038221267985ab28421a8879f160" + integrity sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A== + tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" @@ -24808,6 +26740,27 @@ tar-fs@^2.0.0: pump "^3.0.0" tar-stream "^2.1.4" +tar-fs@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.4.tgz#800824dbf4ef06ded9afea4acafe71c67c76b930" + integrity sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-fs@^3.0.9, tar-fs@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.1.2.tgz#114b012f54796f31e62f3e57792820a80b83ae6e" + integrity sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw== + dependencies: + pump "^3.0.0" + tar-stream "^3.1.5" + optionalDependencies: + bare-fs "^4.0.1" + bare-path "^3.0.0" + tar-fs@~2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.0.1.tgz#e44086c1c60d31a4f0cf893b1c4e155dabfae9e2" @@ -24818,7 +26771,7 @@ tar-fs@~2.0.1: pump "^3.0.0" tar-stream "^2.0.0" -tar-stream@^2.0.0, tar-stream@^2.1.4, tar-stream@~2.2.0: +tar-stream@^2.0.0, tar-stream@^2.1.4: version "2.2.0" resolved "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== @@ -24838,22 +26791,32 @@ tar-stream@^3.0.0: fast-fifo "^1.2.0" streamx "^2.15.0" -tar@6.1.11: - version "6.1.11" - resolved "https://registry.npmmirror.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== +tar-stream@^3.1.5: + version "3.1.8" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.8.tgz#a26f5b26c34dfd4936a4f8a9e694a8f5102af13d" + integrity sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ== + dependencies: + b4a "^1.6.4" + bare-fs "^4.5.5" + fast-fifo "^1.2.0" + streamx "^2.15.0" + +tar@^6.1.11, tar@^6.1.12: + version "6.2.0" + resolved "https://registry.npmmirror.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^3.0.0" + minipass "^5.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" -tar@^6.1.11, tar@^6.1.12, tar@^6.1.2: - version "6.2.0" - resolved "https://registry.npmmirror.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== +tar@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -24862,6 +26825,17 @@ tar@^6.1.11, tar@^6.1.12, tar@^6.1.2: mkdirp "^1.0.3" yallist "^4.0.0" +tar@^7.4.3, tar@^7.5.6: + version "7.5.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.13.tgz#0d214ed56781a26edc313581c0e2d929ceeb866d" + integrity sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng== + dependencies: + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.1.0" + yallist "^5.0.0" + tarn@^3.0.2: version "3.0.2" resolved "https://registry.npmmirror.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693" @@ -24885,23 +26859,29 @@ teeny-request@^9.0.0: stream-events "^1.0.5" uuid "^9.0.0" -temp-dir@1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== +teex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/teex/-/teex-1.0.1.tgz#b8fa7245ef8e8effa8078281946c85ab780a0b12" + integrity sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg== + dependencies: + streamx "^2.12.5" + +terminal-columns@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/terminal-columns/-/terminal-columns-2.0.0.tgz#6be0bdce01da79e616a4566b8091291a527f9cae" + integrity sha512-6IByuUjyNZJXUtwDNm+OIe62zgwwaRbH+WMNTcx05O2G5V9WhvluAAHJY8OvUdwmzMPpqAD/7EUpGdI6ae1aiQ== -terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.10: - version "5.3.10" - resolved "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" - integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== +terser-webpack-plugin@^5.3.17: + version "5.4.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz#95fc4cf4437e587be11ecf37d08636089174d76b" + integrity sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g== dependencies: - "@jridgewell/trace-mapping" "^0.3.20" + "@jridgewell/trace-mapping" "^0.3.25" jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.26.0" + schema-utils "^4.3.0" + terser "^5.31.1" -terser@^5.10.0, terser@^5.26.0: +terser@^5.10.0: version "5.27.0" resolved "https://registry.npmmirror.com/terser/-/terser-5.27.0.tgz#70108689d9ab25fef61c4e93e808e9fd092bf20c" integrity sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A== @@ -24911,19 +26891,48 @@ terser@^5.10.0, terser@^5.26.0: commander "^2.20.0" source-map-support "~0.5.20" -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== +terser@^5.31.1: + version "5.46.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.46.2.tgz#b9529672d5b0024c7959571c83b82f65077b2a4f" + integrity sha512-uxfo9fPcSgLDYob/w1FuL0c99MWiJDnv+5qXSQc5+Ki5NjVNsYi66INnMFBjf6uFz6OnX12piJQPF4IpjJTNTw== dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" + "@jridgewell/source-map" "^0.3.3" + acorn "^8.15.0" + commander "^2.20.0" + source-map-support "~0.5.20" -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.npmmirror.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== +testcontainers@^11.9.0: + version "11.14.0" + resolved "https://registry.yarnpkg.com/testcontainers/-/testcontainers-11.14.0.tgz#ee4262acede48788018adc38f902bda86bd21585" + integrity sha512-r9pniwv/iwzyHaI7gwAvAm4Y+IvjJg3vBWdjrUCaDMc2AXIr4jKbq7jJO18Mw2ybs73pZy1Aj7p/4RVBGMRWjg== + dependencies: + "@balena/dockerignore" "^1.0.2" + "@types/dockerode" "^4.0.1" + archiver "^7.0.1" + async-lock "^1.4.1" + byline "^5.0.0" + debug "^4.4.3" + docker-compose "^1.4.2" + dockerode "^4.0.10" + get-port "^7.2.0" + proper-lockfile "^4.1.2" + properties-reader "^3.0.1" + ssh-remote-port-forward "^1.0.4" + tar-fs "^3.1.2" + tmp "^0.2.5" + undici "^7.24.5" + +text-decoder@^1.1.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.7.tgz#5d073a9a74b9c0a9d28dfadcab96b604af57d8ba" + integrity sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ== + dependencies: + b4a "^1.6.4" + +text-extensions@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.4.0.tgz#a1cfcc50cf34da41bfd047cc744f804d1680ea34" + integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== text-hex@1.0.x: version "1.0.0" @@ -24954,19 +26963,16 @@ thingies@^1.20.0: resolved "https://registry.npmmirror.com/thingies/-/thingies-1.21.0.tgz#e80fbe58fd6fdaaab8fad9b67bd0a5c943c445c1" integrity sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g== +thingies@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/thingies/-/thingies-2.6.0.tgz#e09b98b9e6f6caf8a759eca8481fea1de974d2b1" + integrity sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg== + throttle-debounce@^3.0.1: version "3.0.1" resolved "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg== -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - through2@^4.0.0: version "4.0.2" resolved "https://registry.npmmirror.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" @@ -24974,7 +26980,7 @@ through2@^4.0.0: dependencies: readable-stream "3" -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: +through@^2.3.6, through@~2.3: version "2.3.8" resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== @@ -24996,11 +27002,6 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" -tiny-case@^1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03" - integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== - tiny-invariant@^1.0.6: version "1.3.1" resolved "https://registry.npmmirror.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" @@ -25011,6 +27012,26 @@ tiny-warning@^1.0.2: resolved "https://registry.npmmirror.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tinyglobby@^0.2.15, tinyglobby@^0.2.9: + version "0.2.16" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.16.tgz#1c3b7eb953fce42b226bc5a1ee06428281aff3d6" + integrity sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.4" + +tldts-core@^7.0.28: + version "7.0.28" + resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-7.0.28.tgz#28c256edae2ed177b2a8338a51caf81d41580ecf" + integrity sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ== + +tldts@^7.0.5: + version "7.0.28" + resolved "https://registry.yarnpkg.com/tldts/-/tldts-7.0.28.tgz#5a5bb26ef3f70008d88c6e53ff58cd59ed8d4c68" + integrity sha512-+Zg3vWhRUv8B1maGSTFdev9mjoo8Etn2Ayfs4cnjlD3CsGkxXX4QyW3j2WJ0wdjYcYmy7Lx2RDsZMhgCWafKIw== + dependencies: + tldts-core "^7.0.28" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -25018,22 +27039,19 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.npmmirror.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== +tmp@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA== +to-buffer@^1.2.0, to-buffer@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.2.tgz#ffe59ef7522ada0a2d1cb5dfe03bb8abc3cdc133" + integrity sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw== + dependencies: + isarray "^2.0.5" + safe-buffer "^5.2.1" + typed-array-buffer "^1.0.3" to-fast-properties@^2.0.0: version "2.0.0" @@ -25052,7 +27070,7 @@ toggle-selection@^1.0.6: resolved "https://registry.npmmirror.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== -toidentifier@1.0.1: +toidentifier@1.0.1, toidentifier@~1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== @@ -25065,25 +27083,17 @@ token-types@^4.1.1: "@tokenizer/token" "^0.3.0" ieee754 "^1.2.1" -toposort@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" - integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== - tosource@^2.0.0-alpha.3: version "2.0.0-alpha.3" resolved "https://registry.npmmirror.com/tosource/-/tosource-2.0.0-alpha.3.tgz#ef385dac9092e009bf25c018838ddaae436daeb6" integrity sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug== -tough-cookie@^4.0.0, tough-cookie@^4.1.2: - version "4.1.3" - resolved "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== +tough-cookie@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-6.0.1.tgz#a495f833836609ed983c19bc65639cfbceb54c76" + integrity sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw== dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" + tldts "^7.0.5" tough-cookie@~2.5.0: version "2.5.0" @@ -25093,72 +27103,62 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - -tr46@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" - integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== +tr46@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-6.0.0.tgz#f5a1ae546a0adb32a277a2278d0d17fa2f9093e6" + integrity sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw== dependencies: - punycode "^2.1.1" + punycode "^2.3.1" tr46@~0.0.3: version "0.0.3" resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -traverse@~0.6.6: - version "0.6.8" - resolved "https://registry.npmmirror.com/traverse/-/traverse-0.6.8.tgz#5e5e0c41878b57e4b73ad2f3d1e36a715ea4ab15" - integrity sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA== - tree-dump@^1.0.0: version "1.0.1" resolved "https://registry.npmmirror.com/tree-dump/-/tree-dump-1.0.1.tgz#b448758da7495580e6b7830d6b7834fca4c45b96" integrity sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA== +tree-dump@^1.0.3, tree-dump@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.1.0.tgz#ab29129169dc46004414f5a9d4a3c6e89f13e8a4" + integrity sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA== + tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.npmmirror.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -tree-sitter-json@=0.20.1: - version "0.20.1" - resolved "https://registry.npmmirror.com/tree-sitter-json/-/tree-sitter-json-0.20.1.tgz#d1fe6c59571dd3a987ebb3f5aeef404f37b3a453" - integrity sha512-482hf7J+aBwhksSw8yWaqI8nyP1DrSwnS4IMBShsnkFWD3SE8oalHnsEik59fEVi3orcTCUtMzSjZx+0Tpa6Vw== +tree-sitter-json@=0.24.8: + version "0.24.8" + resolved "https://registry.yarnpkg.com/tree-sitter-json/-/tree-sitter-json-0.24.8.tgz#72bfa26942691f2bf59d973b6794923c033f04c2" + integrity sha512-Tc9ZZYwHyWZ3Tt1VEw7Pa2scu1YO7/d2BCBbKTx5hXwig3UfdQjsOPkPyLpDJOn/m1UBEWYAtSdGAwCSyagBqQ== dependencies: - nan "^2.18.0" + node-addon-api "^8.2.2" + node-gyp-build "^4.8.2" -tree-sitter-yaml@=0.5.0: - version "0.5.0" - resolved "https://registry.npmmirror.com/tree-sitter-yaml/-/tree-sitter-yaml-0.5.0.tgz#c617ba72837399d8105ec10cdb4c360e1ed76076" - integrity sha512-POJ4ZNXXSWIG/W4Rjuyg36MkUD4d769YRUGKRqN+sVaj/VCo6Dh6Pkssn1Rtewd5kybx+jT1BWMyWN0CijXnMA== +tree-sitter@=0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/tree-sitter/-/tree-sitter-0.21.1.tgz#fbb34c09056700814af0e1e37688e06463ba04c4" + integrity sha512-7dxoA6kYvtgWw80265MyqJlkRl4yawIjO7S5MigytjELkX43fV2WsAXzsNfO7sBpPPCF5Gp0+XzHk0DwLCq3xQ== dependencies: - nan "^2.14.0" + node-addon-api "^8.0.0" + node-gyp-build "^4.8.0" -tree-sitter@=0.20.4: - version "0.20.4" - resolved "https://registry.npmmirror.com/tree-sitter/-/tree-sitter-0.20.4.tgz#7d9d4f769fc05342ef43e5559f7ff34b0fc48327" - integrity sha512-rjfR5dc4knG3jnJNN/giJ9WOoN1zL/kZyrS0ILh+eqq8RNcIbiXA63JsMEgluug0aNvfQvK4BfCErN1vIzvKog== +tree-sitter@=0.22.4: + version "0.22.4" + resolved "https://registry.yarnpkg.com/tree-sitter/-/tree-sitter-0.22.4.tgz#7d29547f663ff6f49ee8d1ac444e6fa169c72b77" + integrity sha512-usbHZP9/oxNsUY65MQUsduGRqDHQOou1cagUSwjhoSYAmSahjQDAVsh9s+SlZkn8X8+O1FULRGwHu7AFP3kjzg== dependencies: - nan "^2.17.0" - prebuild-install "^7.1.1" + node-addon-api "^8.3.0" + node-gyp-build "^4.8.4" trim-lines@^3.0.0: version "3.0.1" resolved "https://registry.npmmirror.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - triple-beam@^1.3.0, triple-beam@^1.4.1: version "1.4.1" resolved "https://registry.npmmirror.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" @@ -25179,10 +27179,25 @@ ts-algebra@^2.0.0: resolved "https://registry.npmmirror.com/ts-algebra/-/ts-algebra-2.0.0.tgz#4e3e0953878f26518fce7f6bb115064a65388b7a" integrity sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw== -ts-api-utils@^1.0.1: - version "1.0.3" - resolved "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" - integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== +ts-api-utils@^1.3.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== + +ts-api-utils@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.5.0.tgz#4acd4a155e22734990a5ed1fe9e97f113bcb37c1" + integrity sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA== + +ts-checker-rspack-plugin@^1.1.5: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-checker-rspack-plugin/-/ts-checker-rspack-plugin-1.3.0.tgz#6d7473b1d2a12811863720925ab1dd209883cb13" + integrity sha512-89oK/BtApjdid1j9CGjPGiYry+EZBhsnTAM481/8ipgr/y2IOgCbW1HPnan+fs5FnzlpUgf9dWGNZ4Ayw3Bd8A== + dependencies: + "@rspack/lite-tapable" "^1.1.0" + chokidar "^3.6.0" + memfs "^4.56.10" + picocolors "^1.1.1" ts-easing@^0.2.0: version "0.2.0" @@ -25204,6 +27219,19 @@ ts-mixer@^6.0.3: resolved "https://registry.npmmirror.com/ts-mixer/-/ts-mixer-6.0.3.tgz#69bd50f406ff39daa369885b16c77a6194c7cae6" integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ== +ts-mixer@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.4.tgz#1da39ceabc09d947a82140d9f09db0f84919ca28" + integrity sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA== + +ts-morph@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-24.0.0.tgz#6249b526ade40cf99c8803e7abdae6c65882e58e" + integrity sha512-2OAOg/Ob5yx9Et7ZX4CvTCc0UFoZHwLEJ+dpDPSUi5TgwwlTlX47w+iFRrEwzUZwYACjq83cgjS/Da50Ga37uw== + dependencies: + "@ts-morph/common" "~0.25.0" + code-block-writer "^13.0.3" + ts-node@^10.9.1: version "10.9.2" resolved "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" @@ -25238,16 +27266,7 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tsconfig-paths@^4.1.2: - version "4.2.0" - resolved "https://registry.npmmirror.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" - integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== - dependencies: - json5 "^2.2.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.11.1, tslib@^1.14.1, tslib@^1.8.1: +tslib@^1.11.1, tslib@^1.14.1: version "1.14.1" resolved "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -25257,31 +27276,20 @@ tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3 resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +tslib@^2.0.1, tslib@^2.8.0, tslib@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tsscmp@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.npmmirror.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw== - -tuf-js@^1.1.7: - version "1.1.7" - resolved "https://registry.npmmirror.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" - integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg== - dependencies: - "@tufjs/models" "1.0.4" - debug "^4.3.4" - make-fetch-happen "^11.1.1" +tty-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" + integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== tunnel-agent@^0.6.0: version "0.6.0" @@ -25290,7 +27298,7 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tunnel@0.0.6, tunnel@^0.0.6: +tunnel@^0.0.6: version "0.0.6" resolved "https://registry.npmmirror.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== @@ -25314,21 +27322,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - type-fest@^0.13.1: version "0.13.1" resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - type-fest@^0.20.2: version "0.20.2" resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" @@ -25339,27 +27337,22 @@ type-fest@^0.21.3: resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.4.1: - version "0.4.1" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" - integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - type-fest@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== -type-is@^1.6.16, type-is@^1.6.4, type-is@~1.6.18: +type-fest@^4.3.1: + version "4.41.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" + integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== + +type-flag@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/type-flag/-/type-flag-4.2.0.tgz#c92fd04b09309d66277a57d84a3f538b890307d8" + integrity sha512-6h6QpSh5glA+BrMCq8FINo4o/BqSHNQdfIPpeSBt0s/6mynPaQWWZL+RHaYm95htTbid/spUbJer1yOCsA6ezQ== + +type-is@^1.6.18, type-is@~1.6.18: version "1.6.18" resolved "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -25367,6 +27360,15 @@ type-is@^1.6.16, type-is@^1.6.4, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +type-is@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.0.1.tgz#64f6cf03f92fce4015c2b224793f6bdd4b068c97" + integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw== + dependencies: + content-type "^1.0.5" + media-typer "^1.1.0" + mime-types "^3.0.0" + typed-array-buffer@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" @@ -25376,6 +27378,15 @@ typed-array-buffer@^1.0.0: get-intrinsic "^1.2.1" is-typed-array "^1.1.10" +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + typed-array-byte-length@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" @@ -25386,6 +27397,17 @@ typed-array-byte-length@^1.0.0: has-proto "^1.0.1" is-typed-array "^1.1.10" +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + typed-array-byte-offset@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" @@ -25397,6 +27419,19 @@ typed-array-byte-offset@^1.0.0: has-proto "^1.0.1" is-typed-array "^1.1.10" +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + typed-array-length@^1.0.4: version "1.0.4" resolved "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" @@ -25406,60 +27441,69 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typed-rest-client@^1.8.4: - version "1.8.11" - resolved "https://registry.npmmirror.com/typed-rest-client/-/typed-rest-client-1.8.11.tgz#6906f02e3c91e8d851579f255abf0fd60800a04d" - integrity sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA== +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== dependencies: - qs "^6.9.1" - tunnel "0.0.6" - underscore "^1.12.1" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +typed-error@^3.0.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/typed-error/-/typed-error-3.2.3.tgz#e8c7fb7f86caa797ce25a25510832f8604328147" + integrity sha512-xmXIbAyEOYeRg11jY3AzjyB9clkxVfzBlHs3JgD3N6vPMMVBX+xNtQft4pKb1oM9lASdTISA+pOj1EejFr2SgQ== typedarray@^0.0.6: version "0.0.6" resolved "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -types-ramda@^0.29.7: - version "0.29.7" - resolved "https://registry.npmmirror.com/types-ramda/-/types-ramda-0.29.7.tgz#dbd0dfc3c032502da2824b6f060f9b68bddffddc" - integrity sha512-8KBxZGJwUF3MpRkkJauSpvfHXk8Ssq15QXGuCBTDGeKd9PfheokkC3wAKRV3djej9O31Qa5M7Owsg8hF0GjtAw== +types-ramda@^0.30.1: + version "0.30.1" + resolved "https://registry.yarnpkg.com/types-ramda/-/types-ramda-0.30.1.tgz#03d255128e3696aeaac76281ca19949e01dddc78" + integrity sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA== dependencies: ts-toolbelt "^9.6.0" -typescript-json-schema@^0.63.0: - version "0.63.0" - resolved "https://registry.npmmirror.com/typescript-json-schema/-/typescript-json-schema-0.63.0.tgz#55ef6c4dde71625425b169d37e0de3d2ea14e093" - integrity sha512-vBfMBq4U/rZ5FIRi7u4o/YAdeRHsSabdGHogUlCPi0cYU0CGvS4Bdu8bSzyUsF+Kf5PTQUGh2TictJuQTDK6eQ== +typescript-json-schema@^0.67.0: + version "0.67.1" + resolved "https://registry.yarnpkg.com/typescript-json-schema/-/typescript-json-schema-0.67.1.tgz#e894a540a38bf6b07d1e3ec66764d43ac85df34b" + integrity sha512-vKTZB/RoYTIBdVP7E7vrgHMCssBuhja91wQy498QIVhvfRimaOgjc98uwAXmZ7mbLUytJmOSbF11wPz+ByQeXg== dependencies: "@types/json-schema" "^7.0.9" - "@types/node" "^16.9.2" + "@types/node" "^18.11.9" glob "^7.1.7" path-equal "^1.2.5" safe-stable-stringify "^2.2.0" ts-node "^10.9.1" - typescript "~5.1.0" + typescript "~5.5.0" + vm2 "^3.10.0" yargs "^17.1.1" -"typescript@>=3 < 6": - version "5.3.3" - resolved "https://registry.npmmirror.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== +typescript@~5.4.0: + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== -typescript@~5.1.0: - version "5.1.6" - resolved "https://registry.npmmirror.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" - integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== +typescript@~5.5.0: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== -typescript@~5.2.0: - version "5.2.2" - resolved "https://registry.npmmirror.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== +ua-parser-js@^1.0.35: + version "1.0.41" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.41.tgz#bd04dc9ec830fcf9e4fad35cf22dcedd2e3b4e9c" + integrity sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug== -uc.micro@^1.0.1, uc.micro@^1.0.5: - version "1.0.6" - resolved "https://registry.npmmirror.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" - integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== +uc.micro@^2.0.0, uc.micro@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" + integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== uglify-js@^3.1.4: version "3.17.4" @@ -25473,21 +27517,11 @@ uid-safe@~2.1.5: dependencies: random-bytes "~1.0.0" -uid2@0.0.3: - version "0.0.3" - resolved "https://registry.npmmirror.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82" - integrity sha512-5gSP1liv10Gjp8cMEnFd6shzkL/D6W1uhXSFNCxDC+YI8+L8wkCYCbJ7n77Ezb4wE/xzMogecE+DtamEe9PZjg== - uid2@0.0.x: version "0.0.4" resolved "https://registry.npmmirror.com/uid2/-/uid2-0.0.4.tgz#033f3b1d5d32505f5ce5f888b9f3b667123c0a44" integrity sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA== -uid2@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/uid2/-/uid2-1.0.0.tgz#ef8d95a128d7c5c44defa1a3d052eecc17a06bfb" - integrity sha512-+I6aJUv63YAcY9n4mQreLUt0d4lvwkkopDNmpomkAUz0fAkEMV9pRWxN0EjhW1YfRhcuyHg2v3mwddCDW1+LFQ== - unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -25498,50 +27532,52 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + underscore@1.12.1: version "1.12.1" resolved "https://registry.npmmirror.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== -underscore@^1.12.1: - version "1.13.6" - resolved "https://registry.npmmirror.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" - integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== +underscore@^1.13.3: + version "1.13.8" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.8.tgz#a93a21186c049dbf0e847496dba72b7bd8c1e92b" + integrity sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ== undici-types@~5.26.4: version "5.26.5" resolved "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -undici@^5.24.0: - version "5.28.2" - resolved "https://registry.npmmirror.com/undici/-/undici-5.28.2.tgz#fea200eac65fc7ecaff80a023d1a0543423b4c91" - integrity sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w== - dependencies: - "@fastify/busboy" "^2.0.0" - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== +undici@^5.28.2: + version "5.29.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.29.0.tgz#419595449ae3f2cdcba3580a2e8903399bd1f5a3" + integrity sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg== dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" + "@fastify/busboy" "^2.0.0" -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== +undici@^7.2.3, undici@^7.21.0, undici@^7.24.5: + version "7.25.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-7.25.0.tgz#7d72fc429a0421769ca2966fd07cac875c85b781" + integrity sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ== -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== +unicode-emoji-modifier-base@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz#dbbd5b54ba30f287e2a8d5a249da6c0cef369459" + integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== unified@^10.0.0: version "10.1.2" @@ -25556,13 +27592,6 @@ unified@^10.0.0: trough "^2.0.0" vfile "^5.0.0" -unique-filename@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" - integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== - dependencies: - unique-slug "^3.0.0" - unique-filename@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" @@ -25570,13 +27599,6 @@ unique-filename@^3.0.0: dependencies: unique-slug "^4.0.0" -unique-slug@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" - integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== - dependencies: - imurmurhash "^0.1.4" - unique-slug@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" @@ -25645,23 +27667,11 @@ universalify@^0.1.0: resolved "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - universalify@^2.0.0: version "2.0.1" resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unixify@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/unixify/-/unixify-1.0.0.tgz#3a641c8c2ffbce4da683a5c70f03a462940c2090" - integrity sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg== - dependencies: - normalize-path "^2.1.1" - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -25685,6 +27695,14 @@ update-browserslist-db@^1.0.13: escalade "^3.1.1" picocolors "^1.0.0" +update-browserslist-db@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + uri-js@^4.2.2, uri-js@^4.4.1: version "4.4.1" resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -25704,7 +27722,7 @@ urijs@^1.19.10, urijs@^1.19.11: resolved "https://registry.npmmirror.com/urijs/-/urijs-1.19.11.tgz#204b0d6b605ae80bea54bea39280cdb7c9f923cc" integrity sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ== -url-parse@^1.5.10, url-parse@^1.5.3: +url-parse@^1.5.10: version "1.5.10" resolved "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== @@ -25712,18 +27730,35 @@ url-parse@^1.5.10, url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" -url@^0.11.0: - version "0.11.3" - resolved "https://registry.npmmirror.com/url/-/url-0.11.3.tgz#6f495f4b935de40ce4a0a52faee8954244f3d3ad" - integrity sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw== +url@^0.11.4: + version "0.11.4" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.4.tgz#adca77b3562d56b72746e76b330b7f27b6721f3c" + integrity sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg== dependencies: punycode "^1.4.1" + qs "^6.12.3" + +urllib@^3.23.0: + version "3.27.3" + resolved "https://registry.yarnpkg.com/urllib/-/urllib-3.27.3.tgz#feaf39d254cd36d3b73c921704a695db5c9de84a" + integrity sha512-24ht/hHAkhWXbqSCM499B8gFPXaf4aFQJNqJH5pMsvfyo+aM3zKuQ/uiZ/mdz41Nnw6ItuiqMVMK5VDAlAHLlw== + dependencies: + default-user-agent "^1.0.0" + digest-header "^1.0.0" + form-data-encoder "^1.7.2" + formdata-node "^4.3.3" + formstream "^1.1.1" + mime-types "^2.1.35" + pump "^3.0.0" qs "^6.11.2" + type-fest "^4.3.1" + undici "^5.28.2" + ylru "^1.3.2" -urlpattern-polyfill@^10.0.0: - version "10.0.0" - resolved "https://registry.npmmirror.com/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz#f0a03a97bfb03cdf33553e5e79a2aadd22cac8ec" - integrity sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg== +urlpattern-polyfill@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz#99f096e35eff8bf4b5a2aa7d58a1523d6ebc7ce5" + integrity sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ== use-callback-ref@^1.3.0: version "1.3.1" @@ -25732,20 +27767,37 @@ use-callback-ref@^1.3.0: dependencies: tslib "^2.0.0" -use-immer@^0.9.0: - version "0.9.0" - resolved "https://registry.npmmirror.com/use-immer/-/use-immer-0.9.0.tgz#66e4e8f7ab75df45e96dfd5c56337f9fd49db9fd" - integrity sha512-/L+enLi0nvuZ6j4WlyK0US9/ECUtV5v9RUbtxnn5+WbtaXYUaOBoKHDNL9I5AETdurQ4rIFIj/s+Z5X80ATyKw== +use-composed-ref@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.4.0.tgz#09e023bf798d005286ad85cd20674bdf5770653b" + integrity sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w== + +use-immer@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/use-immer/-/use-immer-0.11.0.tgz#8dd46cbc913cbc3298e60b8f2d9f58d82fc22e08" + integrity sha512-RNAqi3GqsWJ4bcCd4LMBgdzvPmTABam24DUaFiKfX9s3MSorNRz9RDZYJkllJoMHUxVLMDetwAuCDeyWNrp1yA== + +use-isomorphic-layout-effect@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz#2f11a525628f56424521c748feabc2ffcc962fce" + integrity sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA== + +use-latest@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.3.0.tgz#549b9b0d4c1761862072f0899c6f096eb379137a" + integrity sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ== + dependencies: + use-isomorphic-layout-effect "^1.1.1" use-memo-one@^1.1.1: version "1.1.3" resolved "https://registry.npmmirror.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ== -use-resize-observer@^8.0.0: - version "8.0.0" - resolved "https://registry.npmmirror.com/use-resize-observer/-/use-resize-observer-8.0.0.tgz#69bd80c1ddd94f3758563fe107efb25fed85067a" - integrity sha512-n0iKSeiQpJCyaFh5JA0qsVLBIovsF4EIIR1G6XiBwKJN66ZrD4Oj62bjcuTAATPKiSp6an/2UZZxCf/67fk3sQ== +use-resize-observer@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/use-resize-observer/-/use-resize-observer-9.1.0.tgz#14735235cf3268569c1ea468f8a90c5789fc5c6c" + integrity sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow== dependencies: "@juggle/resize-observer" "^3.3.1" @@ -25757,31 +27809,22 @@ use-sidecar@^1.1.2: detect-node-es "^1.1.0" tslib "^2.0.0" -use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: +use-sync-external-store@^1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +use-sync-external-store@^1.4.0, use-sync-external-store@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz#b174bfa65cb2b526732d9f2ac0a408027876f32d" + integrity sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w== + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.10.4: - version "0.10.4" - resolved "https://registry.npmmirror.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== - dependencies: - inherits "2.0.3" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.npmmirror.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -util@^0.12.3: +util@^0.12.3, util@^0.12.4, util@^0.12.5: version "0.12.5" resolved "https://registry.npmmirror.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== @@ -25807,6 +27850,16 @@ utils-merge@1.0.1, utils-merge@1.x.x, utils-merge@^1.0.1: resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +uuid@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" + integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== + +uuid@^11.0.0, uuid@^11.0.2: + version "11.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912" + integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== + uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" resolved "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" @@ -25837,47 +27890,11 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -v8-compile-cache@2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -v8-to-istanbul@^9.0.1: - version "9.2.0" - resolved "https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" - integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^2.0.0" - valid-url@^1.0.9: version "1.0.9" resolved "https://registry.npmmirror.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA== -validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@5.0.0, validate-npm-package-name@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" - integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== - dependencies: - builtins "^5.0.0" - -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== - dependencies: - builtins "^1.0.3" - validate.io-array@^1.0.3: version "1.0.6" resolved "https://registry.npmmirror.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" @@ -25908,10 +27925,10 @@ validate.io-number@^1.0.3: resolved "https://registry.npmmirror.com/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8" integrity sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg== -value-or-promise@^1.0.11, value-or-promise@^1.0.12: - version "1.0.12" - resolved "https://registry.npmmirror.com/value-or-promise/-/value-or-promise-1.0.12.tgz#0e5abfeec70148c78460a849f6b003ea7986f15c" - integrity sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q== +value-or-promise@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140" + integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg== vary@^1, vary@^1.1.2, vary@~1.1.2: version "1.1.2" @@ -25927,6 +27944,14 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vfile-location@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-4.1.0.tgz#69df82fb9ef0a38d0d02b90dd84620e120050dd0" + integrity sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw== + dependencies: + "@types/unist" "^2.0.0" + vfile "^5.0.0" + vfile-message@^3.0.0: version "3.1.4" resolved "https://registry.npmmirror.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" @@ -25950,48 +27975,35 @@ vm-browserify@^1.0.1: resolved "https://registry.npmmirror.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== +vm2@^3.10.0: + version "3.10.5" + resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.10.5.tgz#cc79e75bc344805bc9796a28dc91baa388dc944f" + integrity sha512-3P/2QDccVFBcujfCOeP8vVNuGfuBJHEuvGR8eMmI10p/iwLL2UwF5PDaNaoOS2pRGQEDmJRyeEcc8kmm2Z59RA== + dependencies: + acorn "^8.15.0" + acorn-walk "^8.3.4" + vscode-languageserver-types@^3.17.1: version "3.17.5" resolved "https://registry.npmmirror.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz#3273676f0cf2eab40b3f44d085acbb7f08a39d8a" integrity sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - w3c-keyname@^2.2.4: version "2.2.8" resolved "https://registry.npmmirror.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5" integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ== -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -w3c-xmlserializer@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" - integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== - dependencies: - xml-name-validator "^4.0.0" - -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.npmmirror.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== +w3c-xmlserializer@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" + integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== dependencies: - makeerror "1.0.12" + xml-name-validator "^5.0.0" -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== +watchpack@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102" + integrity sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -26003,7 +28015,7 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -wcwidth@^1.0.0, wcwidth@^1.0.1: +wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== @@ -26019,35 +28031,35 @@ web-encoding@^1.1.5: optionalDependencies: "@zxing/text-encoding" "0.9.0" +web-namespaces@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" + integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== + +web-streams-polyfill@4.0.0-beta.3: + version "4.0.0-beta.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38" + integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug== + web-streams-polyfill@^3.0.3: version "3.3.2" resolved "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz#32e26522e05128203a7de59519be3c648004343b" integrity sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ== -web-tree-sitter@=0.20.3: - version "0.20.3" - resolved "https://registry.npmmirror.com/web-tree-sitter/-/web-tree-sitter-0.20.3.tgz#3dd17b283ad63b1d8c07c5ea814f0fefb2b1f776" - integrity sha512-zKGJW9r23y3BcJusbgvnOH2OYAW40MXAOi9bi3Gcc7T4Gms9WWgXF8m6adsJWpGJEhgOzCrfiz1IzKowJWrtYw== +web-tree-sitter@=0.24.5: + version "0.24.5" + resolved "https://registry.yarnpkg.com/web-tree-sitter/-/web-tree-sitter-0.24.5.tgz#16cea449da63012f23ca7b83bd32817dd0520400" + integrity sha512-+J/2VSHN8J47gQUAvF8KDadrfz6uFYVjxoxbKWDoXVsH2u7yLdarCnIURnrMA6uSRkgX3SdmqM5BOoQjPdSh5w== webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -webidl-conversions@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== +webidl-conversions@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-8.0.1.tgz#0657e571fe6f06fcb15ca50ed1fdbcb495cd1686" + integrity sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ== webpack-dev-middleware@^7.1.0: version "7.2.1" @@ -26061,6 +28073,18 @@ webpack-dev-middleware@^7.1.0: range-parser "^1.2.1" schema-utils "^4.0.0" +webpack-dev-middleware@^7.4.2: + version "7.4.5" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz#d4e8720aa29cb03bc158084a94edb4594e3b7ac0" + integrity sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA== + dependencies: + colorette "^2.0.10" + memfs "^4.43.1" + mime-types "^3.0.1" + on-finished "^2.4.1" + range-parser "^1.2.1" + schema-utils "^4.0.0" + webpack-dev-server@^5.0.0: version "5.0.4" resolved "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz#cb6ea47ff796b9251ec49a94f24a425e12e3c9b8" @@ -26097,11 +28121,6 @@ webpack-dev-server@^5.0.0: webpack-dev-middleware "^7.1.0" ws "^8.16.0" -webpack-node-externals@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz#1a3407c158d547a9feb4229a9e3385b7b60c9917" - integrity sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ== - webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" @@ -26110,40 +28129,41 @@ webpack-sources@^1.4.3: source-list-map "^2.0.0" source-map "~0.6.1" -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.70.0: - version "5.90.0" - resolved "https://registry.npmmirror.com/webpack/-/webpack-5.90.0.tgz#313bfe16080d8b2fee6e29b6c986c0714ad4290e" - integrity sha512-bdmyXRCXeeNIePv6R6tGPyy20aUobw4Zy8r0LUS2EWO+U+Ke/gYDgsCh7bl5rB6jPpr4r0SZa6dPxBxLooDT3w== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.5" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.21.10" +webpack-sources@^3.3.4: + version "3.4.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.4.0.tgz#67cdfdff349ff1e3e7ca5c1ed6a2802b84cf6cf5" + integrity sha512-gHwIe1cgBvvfLeu1Yz/dcFpmHfKDVxxyqI+kzqmuxZED81z2ChxpyqPaWcNqigPywhaEke7AjSGga+kxY55gjQ== + +webpack@~5.105.0: + version "5.105.4" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.4.tgz#1b77fcd55a985ac7ca9de80a746caffa38220169" + integrity sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw== + dependencies: + "@types/eslint-scope" "^3.7.7" + "@types/estree" "^1.0.8" + "@types/json-schema" "^7.0.15" + "@webassemblyjs/ast" "^1.14.1" + "@webassemblyjs/wasm-edit" "^1.14.1" + "@webassemblyjs/wasm-parser" "^1.14.1" + acorn "^8.16.0" + acorn-import-phases "^1.0.3" + browserslist "^4.28.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" - es-module-lexer "^1.2.1" + enhanced-resolve "^5.20.0" + es-module-lexer "^2.0.0" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" + graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" + loader-runner "^4.3.1" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.10" - watchpack "^2.4.0" - webpack-sources "^3.2.3" + schema-utils "^4.3.3" + tapable "^2.3.0" + terser-webpack-plugin "^5.3.17" + watchpack "^2.5.1" + webpack-sources "^3.3.4" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" @@ -26159,37 +28179,19 @@ websocket-extensions@>=0.1.1: resolved "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-encoding@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" - integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== - dependencies: - iconv-lite "0.6.3" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-mimetype@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" - integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== +whatwg-mimetype@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz#d8232895dbd527ceaee74efd4162008fb8a8cf48" + integrity sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw== -whatwg-url@^11.0.0: - version "11.0.0" - resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" - integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== +whatwg-url@^16.0.0: + version "16.0.1" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-16.0.1.tgz#047f7f4bd36ef76b7198c172d1b1cebc66f764dd" + integrity sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw== dependencies: - tr46 "^3.0.0" - webidl-conversions "^7.0.0" + "@exodus/bytes" "^1.11.0" + tr46 "^6.0.0" + webidl-conversions "^8.0.1" whatwg-url@^5.0.0: version "5.0.0" @@ -26199,15 +28201,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -26219,23 +28212,35 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" is-generator-function "^1.0.10" - is-regex "^1.1.4" + is-regex "^1.2.1" is-weakref "^1.0.2" isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" which-collection@^1.0.1: version "1.0.1" @@ -26247,7 +28252,17 @@ which-collection@^1.0.1: is-weakmap "^2.0.1" is-weakset "^2.0.1" -which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.2, which-typed-array@^1.1.9: +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.2: version "1.1.13" resolved "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== @@ -26258,6 +28273,19 @@ which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.2, gopd "^1.0.1" has-tostringtag "^1.0.0" +which-typed-array@^1.1.16, which-typed-array@^1.1.19: + version "1.1.20" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.20.tgz#3fdb7adfafe0ea69157b1509f3a1cd892bd1d122" + integrity sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + which@^1.2.14, which@^1.3.1: version "1.3.1" resolved "https://registry.npmmirror.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -26265,26 +28293,26 @@ which@^1.2.14, which@^1.3.1: dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -which@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" - integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== +which@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" + integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== dependencies: - isexe "^2.0.0" + isexe "^3.1.1" -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.npmmirror.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== +win-release@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209" + integrity sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw== dependencies: - string-width "^1.0.2 || 2 || 3 || 4" + semver "^5.0.1" winston-transport@^4.5.0: version "4.6.0" @@ -26372,67 +28400,26 @@ wrappy@1: resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" - integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - -write-file-atomic@^2.4.2: - version "2.4.3" - resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" +ws@*, ws@^8.18.0, ws@^8.18.2, ws@^8.8.0: + version "8.20.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.20.0.tgz#4cd9532358eba60bc863aad1623dfb045a4d4af8" + integrity sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA== -write-json-file@^3.2.0: - version "3.2.0" - resolved "https://registry.npmmirror.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" - integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== - 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" +ws@8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== -write-pkg@4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" - integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== - dependencies: - sort-keys "^2.0.0" - type-fest "^0.4.1" - write-json-file "^3.2.0" +ws@^8.11.0: + version "8.16.0" + resolved "https://registry.npmmirror.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== -ws@8.17.0, ws@^8.16.0: +ws@^8.16.0: version "8.17.0" resolved "https://registry.npmmirror.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea" integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^8.11.0, ws@^8.12.0, ws@^8.13.0, ws@^8.15.0: - version "8.16.0" - resolved "https://registry.npmmirror.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" - integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== - xcase@^2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/xcase/-/xcase-2.0.1.tgz#c7fa72caa0f440db78fd5673432038ac984450b9" @@ -26445,32 +28432,10 @@ xml-but-prettier@^1.0.1: dependencies: repeat-string "^1.5.2" -xml-crypto@^3.0.1: - version "3.2.0" - resolved "https://registry.npmmirror.com/xml-crypto/-/xml-crypto-3.2.0.tgz#a9debab572c8e895cff5fb351a8d8be3f6e1962e" - integrity sha512-qVurBUOQrmvlgmZqIVBqmb06TD2a/PpEUfFPgD7BuBfjmoH4zgkqaWSIJrnymlCvM2GGt9x+XtJFA+ttoAufqg== - dependencies: - "@xmldom/xmldom" "^0.8.8" - xpath "0.0.32" - -xml-encryption@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/xml-encryption/-/xml-encryption-3.0.2.tgz#d3cb67d97cdd9673313a42cc0d7fa43ff0886c21" - integrity sha512-VxYXPvsWB01/aqVLd6ZMPWZ+qaj0aIdF+cStrVJMcFj3iymwZeI0ABzB3VqMYv48DkSpRhnrXqTUkR34j+UDyg== - dependencies: - "@xmldom/xmldom" "^0.8.5" - escape-html "^1.0.3" - xpath "0.0.32" - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xml-name-validator@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" - integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== +xml-name-validator@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" + integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== xml2js@^0.5.0: version "0.5.0" @@ -26485,11 +28450,6 @@ xml@=1.0.1: resolved "https://registry.npmmirror.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" integrity sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw== -xmlbuilder@^15.1.1: - version "15.1.1" - resolved "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" - integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== - xmlbuilder@~11.0.0: version "11.0.1" resolved "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" @@ -26500,50 +28460,30 @@ xmlchars@^2.2.0: resolved "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xpath@0.0.27: - version "0.0.27" - resolved "https://registry.npmmirror.com/xpath/-/xpath-0.0.27.tgz#dd3421fbdcc5646ac32c48531b4d7e9d0c2cfa92" - integrity sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ== - -xpath@0.0.32: - version "0.0.32" - resolved "https://registry.npmmirror.com/xpath/-/xpath-0.0.32.tgz#1b73d3351af736e17ec078d6da4b8175405c48af" - integrity sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw== - -xtend@^4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.2: version "4.0.2" - resolved "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -xterm-addon-attach@^0.9.0: - version "0.9.0" - resolved "https://registry.npmmirror.com/xterm-addon-attach/-/xterm-addon-attach-0.9.0.tgz#dd18057f147a402de1df852c1de4c8f3b63b37be" - integrity sha512-NykWWOsobVZPPK3P9eFkItrnBK9Lw0f94uey5zhqIVB1bhswdVBfl+uziEzSOhe2h0rT9wD0wOeAYsdSXeavPw== - -xterm-addon-fit@^0.8.0: - version "0.8.0" - resolved "https://registry.npmmirror.com/xterm-addon-fit/-/xterm-addon-fit-0.8.0.tgz#48ca99015385141918f955ca7819e85f3691d35f" - integrity sha512-yj3Np7XlvxxhYF/EJ7p3KHaMt6OdwQ+HDu573Vx1lRXsVxOcnVJs51RgjZOouIZOczTsskaS+CpXspK81/DLqw== - -xterm@^5.2.1, xterm@^5.3.0: - version "5.3.0" - resolved "https://registry.npmmirror.com/xterm/-/xterm-5.3.0.tgz#867daf9cc826f3d45b5377320aabd996cb0fce46" - integrity sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yallist@4.0.0, yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yallist@^3.0.2: version "3.1.1" resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yallist@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" + integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== yaml-js@^0.3.1: version "0.3.1" @@ -26560,27 +28500,22 @@ yaml@^2.0.0, yaml@^2.2.1, yaml@^2.2.2: resolved "https://registry.npmmirror.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== -yaml@^2.3.4: - version "2.4.5" - resolved "https://registry.npmmirror.com/yaml/-/yaml-2.4.5.tgz#60630b206dd6d84df97003d33fc1ddf6296cca5e" - integrity sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg== +yaml@^2.3.0, yaml@^2.6.1: + version "2.8.3" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.3.tgz#a0d6bd2efb3dd03c59370223701834e60409bd7d" + integrity sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg== -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@21.1.1, yargs-parser@^21.1.1: +yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs@16.2.0, yargs@^16.2.0: +yargs@^16.0.0, yargs@^16.2.0: version "16.2.0" resolved "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== @@ -26593,7 +28528,7 @@ yargs@16.2.0, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.1.1, yargs@^17.3.1, yargs@^17.6.2, yargs@^17.7.2: +yargs@^17.1.1, yargs@^17.3.1, yargs@^17.7.2: version "17.7.2" resolved "https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -26614,16 +28549,24 @@ yauzl@^3.0.0: buffer-crc32 "~0.2.3" pend "~1.2.0" -yawn-yaml@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/yawn-yaml/-/yawn-yaml-2.2.0.tgz#aa9673725f7c277a8b97e8d12496d2333d701890" - integrity sha512-2SJvllxsNXwvbf6s8m7TNDtdn2zakLQpmrwpxIdCInLyEx+/WsZwSTScBOVk3zBbuFPeh7hc+yvUVtyKOgBeKQ== +yauzl@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-3.3.0.tgz#5be5e287b9a8112941c177734a34bf61a3e11bb4" + integrity sha512-PtGEvEP30p7sbIBJKUBjUnqgTVOyMURc4dLo9iNyAJnNIEz9pm88cCXF21w94Kg3k6RXkeZh5DHOGS0qEONvNQ== + dependencies: + buffer-crc32 "~0.2.3" + pend "~1.2.0" + +yawn-yaml@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/yawn-yaml/-/yawn-yaml-2.3.0.tgz#79b2cdd58b7abe243c9b0418997795e5754b7135" + integrity sha512-hYS8kT4I2ftJyLw6LE/JG8rg+0NKdDmI+c2ncnJ9ZmUTsU0ggo3Zf8yjmhXxKlWINS/ZYkh3MvMIsQlIDtRL4A== dependencies: js-yaml "^4.1.0" lodash "^4.17.21" yaml-js "^0.3.1" -ylru@^1.2.0: +ylru@^1.3.2: version "1.4.0" resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.4.0.tgz#0cf0aa57e9c24f8a2cbde0cc1ca2c9592ac4e0f6" integrity sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA== @@ -26651,16 +28594,6 @@ yocto-queue@^0.1.0: resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -yup@^1.0.0: - version "1.4.0" - resolved "https://registry.npmmirror.com/yup/-/yup-1.4.0.tgz#898dcd660f9fb97c41f181839d3d65c3ee15a43e" - integrity sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg== - dependencies: - property-expr "^2.0.5" - tiny-case "^1.0.3" - toposort "^2.0.2" - type-fest "^2.19.0" - zen-observable@^0.10.0: version "0.10.0" resolved "https://registry.npmmirror.com/zen-observable/-/zen-observable-0.10.0.tgz#ee10eba75272897dbee5f152ab26bb5e0107f0c8" @@ -26671,25 +28604,65 @@ zenscroll@^4.0.2: resolved "https://registry.npmmirror.com/zenscroll/-/zenscroll-4.0.2.tgz#e8d5774d1c0738a47bcfa8729f3712e2deddeb25" integrity sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg== -zip-stream@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/zip-stream/-/zip-stream-5.0.1.tgz#cf3293bba121cad98be2ec7f05991d81d9f18134" - integrity sha512-UfZ0oa0C8LI58wJ+moL46BDIMgCQbnsb+2PoiJYtonhBsMh2bq1eRBVkvjfVsqbEHd9/EgKPUuL9saSSsec8OA== +zip-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-6.0.1.tgz#e141b930ed60ccaf5d7fa9c8260e0d1748a2bbfb" + integrity sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA== dependencies: - archiver-utils "^4.0.1" - compress-commons "^5.0.1" - readable-stream "^3.6.0" + archiver-utils "^5.0.0" + compress-commons "^6.0.2" + readable-stream "^4.0.0" zod-to-json-schema@^3.20.4, zod-to-json-schema@^3.21.4: version "3.22.4" resolved "https://registry.npmmirror.com/zod-to-json-schema/-/zod-to-json-schema-3.22.4.tgz#f8cc691f6043e9084375e85fb1f76ebafe253d70" integrity sha512-2Ed5dJ+n/O3cU383xSY28cuVi0BCQhF8nYqWU5paEpl7fVdqdAmiLdqLyfblbNdfOFwFfi/mqU4O1pwc60iBhQ== +zod-to-json-schema@^3.25.1: + version "3.25.2" + resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz#3fa799a7badd554541472fb65843fdc460b2e5aa" + integrity sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA== + +zod-validation-error@^3.4.0: + version "3.5.4" + resolved "https://registry.yarnpkg.com/zod-validation-error/-/zod-validation-error-3.5.4.tgz#9072f829e4b45b9e27317c3002408c0c4cdd2bb4" + integrity sha512-+hEiRIiPobgyuFlEojnqjJnhFvg4r/i3cqgcm67eehZf/WBaK3g6cD02YU9mtdVxZjv8CzCA9n/Rhrs3yAAvAw== + +zod-validation-error@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/zod-validation-error/-/zod-validation-error-4.0.2.tgz#bc605eba49ce0fcd598c127fee1c236be3f22918" + integrity sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ== + +zod-validation-error@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/zod-validation-error/-/zod-validation-error-5.0.0.tgz#96db948070b7bfcb13bfec5134113e580f9eee38" + integrity sha512-hmk+pkyKq7Q71PiWVSDUc3VfpzpvcRHZ3QPw9yEMVvmtCekaMeOHnbr3WbxfrgEnQTv6haGP4cmv0Ojmihzsxw== + +zod@^3.19.1, zod@^3.20.0, zod@^3.25.76: + version "3.25.76" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" + integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== + zod@^3.22.4: version "3.22.4" resolved "https://registry.npmmirror.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== +"zod@^3.25.76 || ^4.0.0", zod@^4.0.0: + version "4.3.6" + resolved "https://registry.yarnpkg.com/zod/-/zod-4.3.6.tgz#89c56e0aa7d2b05107d894412227087885ab112a" + integrity sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg== + +zstd-codec@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/zstd-codec/-/zstd-codec-0.1.5.tgz#c180193e4603ef74ddf704bcc835397d30a60e42" + integrity sha512-v3fyjpK8S/dpY/X5WxqTK3IoCnp/ZOLxn144GZVlNUjtwAchzrVo03h+oMATFhCIiJ5KTr4V3vDQQYz4RU684g== + +zustand@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.7.2.tgz#7b44c4f4a5bfd7a8296a3957b13e1c346f42514d" + integrity sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA== + zwitch@^2.0.0: version "2.0.4" resolved "https://registry.npmmirror.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" From abd89276f0a9eb3c269c694132da0f5d4d91099a Mon Sep 17 00:00:00 2001 From: Pankaj Walke Date: Thu, 30 Apr 2026 00:34:54 +0000 Subject: [PATCH 2/4] fix: resolve all lint errors and update workflows - Fix deprecated React default imports across all plugins and packages - Add eslintrc.js for packages/app and packages/backend - Add .eslintignore for argo-workflows generated API code - Add jest devDependency to terraform-backend plugin - Fix guard-for-in, prefer-const, no-shadow, no-use-before-define - Fix jsx-a11y accessibility issues (keyboard handlers, roles) - Fix eqeqeq, no-console, prefer-template violations - Update playwright config: longer timeouts, disable webpack overlay - Update GitHub workflow actions to v6 Signed-off-by: Pankaj Walke --- .eslintignore | 3 + e2e/plugins.spec.ts | 15 +- packages/app/.eslintrc.js | 1 + packages/app/package.json | 25 +- packages/app/src/App.tsx | 2 +- packages/app/src/components/Root/Root.tsx | 2 +- .../src/components/api/ApiExplorerPage.tsx | 30 +- .../src/components/catalog/CatalogPage.tsx | 14 +- .../components/catalog/CustomCatalogPage.tsx | 6 +- .../app/src/components/catalog/EntityPage.tsx | 24 +- packages/app/src/components/home/Homepage.tsx | 30 +- .../kubernetes/KroNavigationHelper.tsx | 8 +- .../kubernetes/KroResourceFilter.tsx | 18 +- .../kubernetes/KubernetesContentWithKro.tsx | 6 +- .../app/src/components/logos/LogoFull.tsx | 2 +- .../app/src/components/logos/LogoIcon.tsx | 2 +- .../app/src/components/search/SearchPage.tsx | 22 +- .../app/src/components/shared/HeroHeader.tsx | 6 +- packages/app/src/index.tsx | 5 +- packages/app/src/theme.ts | 6 +- packages/backend/.eslintrc.js | 1 + packages/backend/package.json | 7 +- packages/backend/src/index.ts | 1 + .../backend/src/modules/actions/sanitize.ts | 22 +- .../kro-resource-group-processor.ts | 3 +- packages/backend/src/plugins/kro-audit.ts | 2 +- .../backend/src/plugins/kro-permissions.ts | 20 +- .../src/plugins/kro-resource-group-service.ts | 2 +- packages/backend/src/plugins/mock-argocd.ts | 1 + .../backend/src/plugins/mock-kubernetes.ts | 2 + packages/backend/src/plugins/mock-proxy.ts | 1 + .../backend/src/plugins/mock-terraform.ts | 1 + playwright.config.ts | 7 +- plugins/apache-spark/dev/index.tsx | 2 +- plugins/apache-spark/package.json | 15 +- plugins/apache-spark/src/alpha.tsx | 2 +- plugins/apache-spark/src/api/index.test.ts | 1 + .../ApacheSparkLogs/ApacheSparkLogs.test.tsx | 2 +- .../ApacheSparkLogs/ApacheSparkLogs.tsx | 2 +- .../ApacheSparkOverviewTable.tsx | 8 +- .../DetailedDrawer/DetailedDrawer.tsx | 10 +- .../DetailedDrawer/DrawerOverview.tsx | 4 +- .../src/components/Overview/Overview.tsx | 2 +- plugins/apache-spark/src/plugin.test.ts | 1 + plugins/argo-workflows/.eslintignore | 1 + plugins/argo-workflows/dev/index.tsx | 2 +- plugins/argo-workflows/package.json | 14 +- plugins/argo-workflows/src/alpha.tsx | 2 +- .../src/api/generated/api/apis.ts | 9 + .../api/archivedWorkflowServiceApi.ts | 127 +- .../api/generated/api/artifactServiceApi.ts | 79 +- .../api/clusterWorkflowTemplateServiceApi.ts | 99 +- .../generated/api/cronWorkflowServiceApi.ts | 121 +- .../src/api/generated/api/eventServiceApi.ts | 37 +- .../generated/api/eventSourceServiceApi.ts | 115 +- .../src/api/generated/api/infoServiceApi.ts | 73 +- .../src/api/generated/api/sensorServiceApi.ts | 113 +- .../api/generated/api/workflowServiceApi.ts | 265 +- .../api/workflowTemplateServiceApi.ts | 93 +- .../eventsourceCreateEventSourceRequest.ts | 1 - .../model/eventsourceEventSourceWatchEvent.ts | 1 - .../generated/model/eventsourceLogEntry.ts | 1 - .../eventsourceUpdateEventSourceRequest.ts | 1 - .../api/generated/model/googleProtobufAny.ts | 1 - .../model/grpcGatewayRuntimeError.ts | 1 - .../model/grpcGatewayRuntimeStreamError.ts | 1 - ...ArgoprojEventsV1alpha1AMQPConsumeConfig.ts | 1 - ...ioArgoprojEventsV1alpha1AMQPEventSource.ts | 1 - ...EventsV1alpha1AMQPExchangeDeclareConfig.ts | 1 - ...goprojEventsV1alpha1AMQPQueueBindConfig.ts | 1 - ...rojEventsV1alpha1AMQPQueueDeclareConfig.ts | 1 - ...oArgoprojEventsV1alpha1AWSLambdaTrigger.ts | 1 - .../model/ioArgoprojEventsV1alpha1Amount.ts | 1 - ...goprojEventsV1alpha1ArgoWorkflowTrigger.ts | 1 - ...oArgoprojEventsV1alpha1ArtifactLocation.ts | 1 - ...projEventsV1alpha1AzureEventHubsTrigger.ts | 1 - ...EventsV1alpha1AzureEventsHubEventSource.ts | 1 - .../model/ioArgoprojEventsV1alpha1Backoff.ts | 1 - .../ioArgoprojEventsV1alpha1BasicAuth.ts | 1 - .../ioArgoprojEventsV1alpha1BitbucketAuth.ts | 1 - ...rgoprojEventsV1alpha1BitbucketBasicAuth.ts | 1 - ...oprojEventsV1alpha1BitbucketEventSource.ts | 1 - ...goprojEventsV1alpha1BitbucketRepository.ts | 1 - ...ventsV1alpha1BitbucketServerEventSource.ts | 1 - ...EventsV1alpha1BitbucketServerRepository.ts | 1 - ...goprojEventsV1alpha1CalendarEventSource.ts | 1 - ...oprojEventsV1alpha1CatchupConfiguration.ts | 1 - .../ioArgoprojEventsV1alpha1Condition.ts | 1 - ...projEventsV1alpha1ConditionsResetByTime.ts | 1 - ...ojEventsV1alpha1ConditionsResetCriteria.ts | 1 - ...oprojEventsV1alpha1ConfigMapPersistence.ts | 1 - .../ioArgoprojEventsV1alpha1CustomTrigger.ts | 1 - .../ioArgoprojEventsV1alpha1DataFilter.ts | 1 - ...rgoprojEventsV1alpha1EmitterEventSource.ts | 1 - .../ioArgoprojEventsV1alpha1EventContext.ts | 1 - ...ioArgoprojEventsV1alpha1EventDependency.ts | 1 - ...projEventsV1alpha1EventDependencyFilter.ts | 1 - ...ventsV1alpha1EventDependencyTransformer.ts | 1 - ...oArgoprojEventsV1alpha1EventPersistence.ts | 1 - .../ioArgoprojEventsV1alpha1EventSource.ts | 1 - ...ArgoprojEventsV1alpha1EventSourceFilter.ts | 1 - ...ioArgoprojEventsV1alpha1EventSourceList.ts | 1 - ...ioArgoprojEventsV1alpha1EventSourceSpec.ts | 1 - ...ArgoprojEventsV1alpha1EventSourceStatus.ts | 1 - .../ioArgoprojEventsV1alpha1ExprFilter.ts | 1 - .../ioArgoprojEventsV1alpha1FileArtifact.ts | 1 - ...ioArgoprojEventsV1alpha1FileEventSource.ts | 1 - ...rgoprojEventsV1alpha1GenericEventSource.ts | 1 - .../ioArgoprojEventsV1alpha1GitArtifact.ts | 1 - .../model/ioArgoprojEventsV1alpha1GitCreds.ts | 1 - ...ioArgoprojEventsV1alpha1GitRemoteConfig.ts | 1 - .../ioArgoprojEventsV1alpha1GithubAppCreds.ts | 1 - ...ArgoprojEventsV1alpha1GithubEventSource.ts | 1 - ...ArgoprojEventsV1alpha1GitlabEventSource.ts | 1 - ...ioArgoprojEventsV1alpha1HDFSEventSource.ts | 1 - .../ioArgoprojEventsV1alpha1HTTPTrigger.ts | 1 - .../ioArgoprojEventsV1alpha1Int64OrString.ts | 1 - ...ArgoprojEventsV1alpha1K8SResourcePolicy.ts | 1 - ...rgoprojEventsV1alpha1KafkaConsumerGroup.ts | 1 - ...oArgoprojEventsV1alpha1KafkaEventSource.ts | 1 - .../ioArgoprojEventsV1alpha1KafkaTrigger.ts | 1 - .../ioArgoprojEventsV1alpha1LogTrigger.ts | 1 - ...ioArgoprojEventsV1alpha1MQTTEventSource.ts | 1 - .../model/ioArgoprojEventsV1alpha1Metadata.ts | 1 - .../model/ioArgoprojEventsV1alpha1NATSAuth.ts | 1 - ...oArgoprojEventsV1alpha1NATSEventsSource.ts | 1 - .../ioArgoprojEventsV1alpha1NATSTrigger.ts | 1 - .../ioArgoprojEventsV1alpha1NSQEventSource.ts | 1 - ...oArgoprojEventsV1alpha1OpenWhiskTrigger.ts | 1 - ...ArgoprojEventsV1alpha1OwnedRepositories.ts | 1 - .../ioArgoprojEventsV1alpha1PayloadField.ts | 1 - ...ArgoprojEventsV1alpha1PubSubEventSource.ts | 1 - ...ArgoprojEventsV1alpha1PulsarEventSource.ts | 1 - .../ioArgoprojEventsV1alpha1PulsarTrigger.ts | 1 - .../ioArgoprojEventsV1alpha1RateLimit.ts | 1 - ...oArgoprojEventsV1alpha1RedisEventSource.ts | 1 - ...rojEventsV1alpha1RedisStreamEventSource.ts | 1 - .../model/ioArgoprojEventsV1alpha1Resource.ts | 1 - ...goprojEventsV1alpha1ResourceEventSource.ts | 1 - .../ioArgoprojEventsV1alpha1ResourceFilter.ts | 1 - .../ioArgoprojEventsV1alpha1S3Artifact.ts | 1 - .../model/ioArgoprojEventsV1alpha1S3Bucket.ts | 1 - .../model/ioArgoprojEventsV1alpha1S3Filter.ts | 1 - .../ioArgoprojEventsV1alpha1SASLConfig.ts | 1 - .../ioArgoprojEventsV1alpha1SNSEventSource.ts | 1 - .../ioArgoprojEventsV1alpha1SQSEventSource.ts | 1 - .../ioArgoprojEventsV1alpha1SecureHeader.ts | 1 - .../model/ioArgoprojEventsV1alpha1Selector.ts | 1 - .../model/ioArgoprojEventsV1alpha1Sensor.ts | 1 - .../ioArgoprojEventsV1alpha1SensorList.ts | 1 - .../ioArgoprojEventsV1alpha1SensorSpec.ts | 1 - .../ioArgoprojEventsV1alpha1SensorStatus.ts | 1 - .../model/ioArgoprojEventsV1alpha1Service.ts | 1 - ...oArgoprojEventsV1alpha1SlackEventSource.ts | 1 - .../ioArgoprojEventsV1alpha1SlackTrigger.ts | 1 - ...rgoprojEventsV1alpha1StandardK8STrigger.ts | 1 - .../model/ioArgoprojEventsV1alpha1Status.ts | 1 - .../ioArgoprojEventsV1alpha1StatusPolicy.ts | 1 - ...rojEventsV1alpha1StorageGridEventSource.ts | 1 - ...ArgoprojEventsV1alpha1StorageGridFilter.ts | 1 - ...ArgoprojEventsV1alpha1StripeEventSource.ts | 1 - .../ioArgoprojEventsV1alpha1TLSConfig.ts | 1 - .../model/ioArgoprojEventsV1alpha1Template.ts | 1 - .../ioArgoprojEventsV1alpha1TimeFilter.ts | 1 - .../model/ioArgoprojEventsV1alpha1Trigger.ts | 1 - ...oArgoprojEventsV1alpha1TriggerParameter.ts | 1 - ...rojEventsV1alpha1TriggerParameterSource.ts | 1 - .../ioArgoprojEventsV1alpha1TriggerPolicy.ts | 1 - ...ioArgoprojEventsV1alpha1TriggerTemplate.ts | 1 - .../ioArgoprojEventsV1alpha1URLArtifact.ts | 1 - ...ioArgoprojEventsV1alpha1ValueFromSource.ts | 1 - ...ioArgoprojEventsV1alpha1WatchPathConfig.ts | 1 - .../ioArgoprojEventsV1alpha1WebhookContext.ts | 1 - ...rgoprojEventsV1alpha1WebhookEventSource.ts | 1 - ...ArgoprojWorkflowV1alpha1ArchiveStrategy.ts | 1 - .../ioArgoprojWorkflowV1alpha1Arguments.ts | 1 - .../ioArgoprojWorkflowV1alpha1ArtGCStatus.ts | 1 - .../ioArgoprojWorkflowV1alpha1Artifact.ts | 1 - .../ioArgoprojWorkflowV1alpha1ArtifactGC.ts | 1 - ...oArgoprojWorkflowV1alpha1ArtifactGCSpec.ts | 1 - ...rgoprojWorkflowV1alpha1ArtifactGCStatus.ts | 1 - ...rgoprojWorkflowV1alpha1ArtifactLocation.ts | 1 - ...rgoprojWorkflowV1alpha1ArtifactNodeSpec.ts | 1 - ...ioArgoprojWorkflowV1alpha1ArtifactPaths.ts | 1 - ...oprojWorkflowV1alpha1ArtifactRepository.ts | 1 - ...ojWorkflowV1alpha1ArtifactRepositoryRef.ts | 1 - ...flowV1alpha1ArtifactRepositoryRefStatus.ts | 1 - ...oArgoprojWorkflowV1alpha1ArtifactResult.ts | 1 - ...orkflowV1alpha1ArtifactResultNodeStatus.ts | 1 - ...projWorkflowV1alpha1ArtifactoryArtifact.ts | 1 - ...owV1alpha1ArtifactoryArtifactRepository.ts | 1 - ...ioArgoprojWorkflowV1alpha1AzureArtifact.ts | 1 - ...WorkflowV1alpha1AzureArtifactRepository.ts | 1 - .../ioArgoprojWorkflowV1alpha1Backoff.ts | 1 - .../ioArgoprojWorkflowV1alpha1BasicAuth.ts | 1 - .../model/ioArgoprojWorkflowV1alpha1Cache.ts | 1 - ...oArgoprojWorkflowV1alpha1ClientCertAuth.ts | 1 - ...WorkflowV1alpha1ClusterWorkflowTemplate.ts | 1 - ...ha1ClusterWorkflowTemplateCreateRequest.ts | 1 - ...lpha1ClusterWorkflowTemplateLintRequest.ts | 1 - ...flowV1alpha1ClusterWorkflowTemplateList.ts | 1 - ...ha1ClusterWorkflowTemplateUpdateRequest.ts | 1 - ...projWorkflowV1alpha1CollectEventRequest.ts | 1 - .../model/ioArgoprojWorkflowV1alpha1Column.ts | 1 - .../ioArgoprojWorkflowV1alpha1Condition.ts | 1 - ...ioArgoprojWorkflowV1alpha1ContainerNode.ts | 1 - ...rkflowV1alpha1ContainerSetRetryStrategy.ts | 1 - ...rojWorkflowV1alpha1ContainerSetTemplate.ts | 1 - .../ioArgoprojWorkflowV1alpha1ContinueOn.ts | 1 - .../ioArgoprojWorkflowV1alpha1Counter.ts | 1 - ...rkflowV1alpha1CreateCronWorkflowRequest.ts | 1 - ...ojWorkflowV1alpha1CreateS3BucketOptions.ts | 1 - .../ioArgoprojWorkflowV1alpha1CronWorkflow.ts | 1 - ...rgoprojWorkflowV1alpha1CronWorkflowList.ts | 1 - ...rkflowV1alpha1CronWorkflowResumeRequest.ts | 1 - ...rgoprojWorkflowV1alpha1CronWorkflowSpec.ts | 1 - ...oprojWorkflowV1alpha1CronWorkflowStatus.ts | 1 - ...kflowV1alpha1CronWorkflowSuspendRequest.ts | 1 - .../ioArgoprojWorkflowV1alpha1DAGTask.ts | 1 - .../ioArgoprojWorkflowV1alpha1DAGTemplate.ts | 1 - .../model/ioArgoprojWorkflowV1alpha1Data.ts | 1 - .../ioArgoprojWorkflowV1alpha1DataSource.ts | 1 - .../model/ioArgoprojWorkflowV1alpha1Event.ts | 1 - ...oArgoprojWorkflowV1alpha1ExecutorConfig.ts | 1 - .../ioArgoprojWorkflowV1alpha1GCSArtifact.ts | 1 - ...ojWorkflowV1alpha1GCSArtifactRepository.ts | 1 - .../model/ioArgoprojWorkflowV1alpha1Gauge.ts | 1 - ...projWorkflowV1alpha1GetUserInfoResponse.ts | 1 - .../ioArgoprojWorkflowV1alpha1GitArtifact.ts | 1 - .../ioArgoprojWorkflowV1alpha1HDFSArtifact.ts | 1 - ...jWorkflowV1alpha1HDFSArtifactRepository.ts | 1 - .../model/ioArgoprojWorkflowV1alpha1HTTP.ts | 1 - .../ioArgoprojWorkflowV1alpha1HTTPArtifact.ts | 1 - .../ioArgoprojWorkflowV1alpha1HTTPAuth.ts | 1 - ...oArgoprojWorkflowV1alpha1HTTPBodySource.ts | 1 - .../ioArgoprojWorkflowV1alpha1HTTPHeader.ts | 1 - ...rgoprojWorkflowV1alpha1HTTPHeaderSource.ts | 1 - .../model/ioArgoprojWorkflowV1alpha1Header.ts | 1 - .../ioArgoprojWorkflowV1alpha1Histogram.ts | 1 - .../ioArgoprojWorkflowV1alpha1InfoResponse.ts | 1 - .../model/ioArgoprojWorkflowV1alpha1Inputs.ts | 1 - .../ioArgoprojWorkflowV1alpha1LabelKeys.ts | 1 - ...oArgoprojWorkflowV1alpha1LabelValueFrom.ts | 1 - .../ioArgoprojWorkflowV1alpha1LabelValues.ts | 1 - ...ioArgoprojWorkflowV1alpha1LifecycleHook.ts | 1 - .../model/ioArgoprojWorkflowV1alpha1Link.ts | 1 - ...WorkflowV1alpha1LintCronWorkflowRequest.ts | 1 - .../ioArgoprojWorkflowV1alpha1LogEntry.ts | 1 - .../ioArgoprojWorkflowV1alpha1ManifestFrom.ts | 1 - ...goprojWorkflowV1alpha1MemoizationStatus.ts | 1 - .../ioArgoprojWorkflowV1alpha1Memoize.ts | 1 - .../ioArgoprojWorkflowV1alpha1Metadata.ts | 1 - .../ioArgoprojWorkflowV1alpha1MetricLabel.ts | 1 - .../ioArgoprojWorkflowV1alpha1Metrics.ts | 1 - .../model/ioArgoprojWorkflowV1alpha1Mutex.ts | 1 - .../ioArgoprojWorkflowV1alpha1MutexHolding.ts | 1 - .../ioArgoprojWorkflowV1alpha1MutexStatus.ts | 1 - .../ioArgoprojWorkflowV1alpha1NodeResult.ts | 1 - .../ioArgoprojWorkflowV1alpha1NodeStatus.ts | 1 - ...rkflowV1alpha1NodeSynchronizationStatus.ts | 1 - .../ioArgoprojWorkflowV1alpha1OAuth2Auth.ts | 1 - ...projWorkflowV1alpha1OAuth2EndpointParam.ts | 1 - .../ioArgoprojWorkflowV1alpha1OSSArtifact.ts | 1 - ...ojWorkflowV1alpha1OSSArtifactRepository.ts | 1 - ...rgoprojWorkflowV1alpha1OSSLifecycleRule.ts | 1 - .../ioArgoprojWorkflowV1alpha1Outputs.ts | 1 - .../ioArgoprojWorkflowV1alpha1Parameter.ts | 1 - .../model/ioArgoprojWorkflowV1alpha1PodGC.ts | 1 - .../ioArgoprojWorkflowV1alpha1Prometheus.ts | 1 - .../ioArgoprojWorkflowV1alpha1RawArtifact.ts | 1 - ...rgoprojWorkflowV1alpha1ResourceTemplate.ts | 1 - ...V1alpha1ResubmitArchivedWorkflowRequest.ts | 1 - ...ioArgoprojWorkflowV1alpha1RetryAffinity.ts | 1 - ...lowV1alpha1RetryArchivedWorkflowRequest.ts | 1 - ...ioArgoprojWorkflowV1alpha1RetryStrategy.ts | 1 - .../ioArgoprojWorkflowV1alpha1S3Artifact.ts | 1 - ...rojWorkflowV1alpha1S3ArtifactRepository.ts | 1 - ...projWorkflowV1alpha1S3EncryptionOptions.ts | 1 - ...oArgoprojWorkflowV1alpha1ScriptTemplate.ts | 1 - ...rgoprojWorkflowV1alpha1SemaphoreHolding.ts | 1 - .../ioArgoprojWorkflowV1alpha1SemaphoreRef.ts | 1 - ...ArgoprojWorkflowV1alpha1SemaphoreStatus.ts | 1 - .../ioArgoprojWorkflowV1alpha1Sequence.ts | 1 - .../model/ioArgoprojWorkflowV1alpha1Submit.ts | 1 - .../ioArgoprojWorkflowV1alpha1SubmitOpts.ts | 1 - ...ArgoprojWorkflowV1alpha1SuspendTemplate.ts | 1 - ...ArgoprojWorkflowV1alpha1Synchronization.ts | 1 - ...ojWorkflowV1alpha1SynchronizationStatus.ts | 1 - .../ioArgoprojWorkflowV1alpha1TTLStrategy.ts | 1 - .../ioArgoprojWorkflowV1alpha1TarStrategy.ts | 1 - .../ioArgoprojWorkflowV1alpha1Template.ts | 1 - .../ioArgoprojWorkflowV1alpha1TemplateRef.ts | 1 - ...oprojWorkflowV1alpha1TransformationStep.ts | 1 - ...rkflowV1alpha1UpdateCronWorkflowRequest.ts | 1 - ...ioArgoprojWorkflowV1alpha1UserContainer.ts | 1 - .../ioArgoprojWorkflowV1alpha1ValueFrom.ts | 1 - .../ioArgoprojWorkflowV1alpha1Version.ts | 1 - ...ioArgoprojWorkflowV1alpha1VolumeClaimGC.ts | 1 - .../ioArgoprojWorkflowV1alpha1Workflow.ts | 1 - ...ojWorkflowV1alpha1WorkflowCreateRequest.ts | 1 - ...rojWorkflowV1alpha1WorkflowEventBinding.ts | 1 - ...orkflowV1alpha1WorkflowEventBindingList.ts | 1 - ...orkflowV1alpha1WorkflowEventBindingSpec.ts | 1 - ...WorkflowV1alpha1WorkflowLevelArtifactGC.ts | 1 - ...projWorkflowV1alpha1WorkflowLintRequest.ts | 1 - .../ioArgoprojWorkflowV1alpha1WorkflowList.ts | 1 - ...rgoprojWorkflowV1alpha1WorkflowMetadata.ts | 1 - ...WorkflowV1alpha1WorkflowResubmitRequest.ts | 1 - ...ojWorkflowV1alpha1WorkflowResumeRequest.ts | 1 - ...rojWorkflowV1alpha1WorkflowRetryRequest.ts | 1 - ...oprojWorkflowV1alpha1WorkflowSetRequest.ts | 1 - .../ioArgoprojWorkflowV1alpha1WorkflowSpec.ts | 1 - ...oArgoprojWorkflowV1alpha1WorkflowStatus.ts | 1 - .../ioArgoprojWorkflowV1alpha1WorkflowStep.ts | 1 - ...projWorkflowV1alpha1WorkflowStopRequest.ts | 1 - ...ojWorkflowV1alpha1WorkflowSubmitRequest.ts | 1 - ...jWorkflowV1alpha1WorkflowSuspendRequest.ts | 1 - ...projWorkflowV1alpha1WorkflowTaskSetSpec.ts | 1 - ...ojWorkflowV1alpha1WorkflowTaskSetStatus.ts | 1 - ...rgoprojWorkflowV1alpha1WorkflowTemplate.ts | 1 - ...owV1alpha1WorkflowTemplateCreateRequest.ts | 1 - ...flowV1alpha1WorkflowTemplateLintRequest.ts | 1 - ...rojWorkflowV1alpha1WorkflowTemplateList.ts | 1 - ...projWorkflowV1alpha1WorkflowTemplateRef.ts | 1 - ...owV1alpha1WorkflowTemplateUpdateRequest.ts | 1 - ...orkflowV1alpha1WorkflowTerminateRequest.ts | 1 - ...oprojWorkflowV1alpha1WorkflowWatchEvent.ts | 1 - ...iCoreV1AWSElasticBlockStoreVolumeSource.ts | 1 - .../generated/model/ioK8sApiCoreV1Affinity.ts | 1 - .../ioK8sApiCoreV1AzureDiskVolumeSource.ts | 1 - .../ioK8sApiCoreV1AzureFileVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1CSIVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1Capabilities.ts | 1 - .../model/ioK8sApiCoreV1CephFSVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1CinderVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1ConfigMapEnvSource.ts | 1 - .../ioK8sApiCoreV1ConfigMapKeySelector.ts | 1 - .../ioK8sApiCoreV1ConfigMapProjection.ts | 1 - .../ioK8sApiCoreV1ConfigMapVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1Container.ts | 11 +- .../model/ioK8sApiCoreV1ContainerPort.ts | 7 +- .../ioK8sApiCoreV1DownwardAPIProjection.ts | 1 - .../ioK8sApiCoreV1DownwardAPIVolumeFile.ts | 1 - .../ioK8sApiCoreV1DownwardAPIVolumeSource.ts | 1 - .../ioK8sApiCoreV1EmptyDirVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1EnvFromSource.ts | 1 - .../generated/model/ioK8sApiCoreV1EnvVar.ts | 1 - .../model/ioK8sApiCoreV1EnvVarSource.ts | 1 - .../ioK8sApiCoreV1EphemeralVolumeSource.ts | 1 - .../generated/model/ioK8sApiCoreV1Event.ts | 1 - .../model/ioK8sApiCoreV1EventSeries.ts | 1 - .../model/ioK8sApiCoreV1EventSource.ts | 1 - .../model/ioK8sApiCoreV1ExecAction.ts | 1 - .../model/ioK8sApiCoreV1FCVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1FlexVolumeSource.ts | 1 - .../ioK8sApiCoreV1FlockerVolumeSource.ts | 1 - ...sApiCoreV1GCEPersistentDiskVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1GRPCAction.ts | 1 - .../ioK8sApiCoreV1GitRepoVolumeSource.ts | 1 - .../ioK8sApiCoreV1GlusterfsVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1HTTPGetAction.ts | 5 +- .../model/ioK8sApiCoreV1HTTPHeader.ts | 1 - .../model/ioK8sApiCoreV1HostAlias.ts | 1 - .../ioK8sApiCoreV1HostPathVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1ISCSIVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1KeyToPath.ts | 1 - .../model/ioK8sApiCoreV1Lifecycle.ts | 1 - .../model/ioK8sApiCoreV1LifecycleHandler.ts | 1 - .../ioK8sApiCoreV1LocalObjectReference.ts | 1 - .../model/ioK8sApiCoreV1NFSVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1NodeAffinity.ts | 1 - .../model/ioK8sApiCoreV1NodeSelector.ts | 1 - .../ioK8sApiCoreV1NodeSelectorRequirement.ts | 13 +- .../model/ioK8sApiCoreV1NodeSelectorTerm.ts | 1 - .../ioK8sApiCoreV1ObjectFieldSelector.ts | 1 - .../model/ioK8sApiCoreV1ObjectReference.ts | 1 - .../ioK8sApiCoreV1PersistentVolumeClaim.ts | 1 - ...ApiCoreV1PersistentVolumeClaimCondition.ts | 5 +- ...ioK8sApiCoreV1PersistentVolumeClaimSpec.ts | 1 - ...K8sApiCoreV1PersistentVolumeClaimStatus.ts | 7 +- ...sApiCoreV1PersistentVolumeClaimTemplate.ts | 1 - ...CoreV1PersistentVolumeClaimVolumeSource.ts | 1 - ...iCoreV1PhotonPersistentDiskVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1PodAffinity.ts | 1 - .../model/ioK8sApiCoreV1PodAffinityTerm.ts | 1 - .../model/ioK8sApiCoreV1PodAntiAffinity.ts | 1 - .../model/ioK8sApiCoreV1PodDNSConfig.ts | 1 - .../model/ioK8sApiCoreV1PodDNSConfigOption.ts | 1 - .../model/ioK8sApiCoreV1PodSecurityContext.ts | 1 - .../ioK8sApiCoreV1PortworxVolumeSource.ts | 1 - .../ioK8sApiCoreV1PreferredSchedulingTerm.ts | 1 - .../generated/model/ioK8sApiCoreV1Probe.ts | 1 - .../ioK8sApiCoreV1ProjectedVolumeSource.ts | 1 - .../ioK8sApiCoreV1QuobyteVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1RBDVolumeSource.ts | 1 - .../ioK8sApiCoreV1ResourceFieldSelector.ts | 1 - .../ioK8sApiCoreV1ResourceRequirements.ts | 1 - .../model/ioK8sApiCoreV1SELinuxOptions.ts | 1 - .../ioK8sApiCoreV1ScaleIOVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1SeccompProfile.ts | 7 +- .../model/ioK8sApiCoreV1SecretEnvSource.ts | 1 - .../model/ioK8sApiCoreV1SecretKeySelector.ts | 1 - .../model/ioK8sApiCoreV1SecretProjection.ts | 1 - .../model/ioK8sApiCoreV1SecretVolumeSource.ts | 1 - .../model/ioK8sApiCoreV1SecurityContext.ts | 1 - ...sApiCoreV1ServiceAccountTokenProjection.ts | 1 - .../model/ioK8sApiCoreV1ServicePort.ts | 7 +- .../ioK8sApiCoreV1StorageOSVolumeSource.ts | 1 - .../generated/model/ioK8sApiCoreV1Sysctl.ts | 1 - .../model/ioK8sApiCoreV1TCPSocketAction.ts | 1 - .../model/ioK8sApiCoreV1Toleration.ts | 11 +- ...ioK8sApiCoreV1TypedLocalObjectReference.ts | 1 - .../generated/model/ioK8sApiCoreV1Volume.ts | 1 - .../model/ioK8sApiCoreV1VolumeDevice.ts | 1 - .../model/ioK8sApiCoreV1VolumeMount.ts | 1 - .../model/ioK8sApiCoreV1VolumeProjection.ts | 1 - ...ApiCoreV1VsphereVirtualDiskVolumeSource.ts | 1 - .../ioK8sApiCoreV1WeightedPodAffinityTerm.ts | 1 - ...sApiCoreV1WindowsSecurityContextOptions.ts | 1 - ...ioK8sApiPolicyV1PodDisruptionBudgetSpec.ts | 1 - ...sApimachineryPkgApisMetaV1CreateOptions.ts | 1 - ...hineryPkgApisMetaV1GroupVersionResource.ts | 1 - ...sApimachineryPkgApisMetaV1LabelSelector.ts | 1 - ...ryPkgApisMetaV1LabelSelectorRequirement.ts | 1 - .../ioK8sApimachineryPkgApisMetaV1ListMeta.ts | 1 - ...achineryPkgApisMetaV1ManagedFieldsEntry.ts | 1 - ...oK8sApimachineryPkgApisMetaV1ObjectMeta.ts | 1 - ...ApimachineryPkgApisMetaV1OwnerReference.ts | 1 - ...K8sApimachineryPkgApisMetaV1StatusCause.ts | 1 - .../src/api/generated/model/models.ts | 66 +- .../model/sensorCreateSensorRequest.ts | 1 - .../src/api/generated/model/sensorLogEntry.ts | 1 - .../generated/model/sensorSensorWatchEvent.ts | 1 - .../model/sensorUpdateSensorRequest.ts | 1 - ...esultOfEventsourceEventSourceWatchEvent.ts | 1 - .../streamResultOfEventsourceLogEntry.ts | 1 - ...ultOfIoArgoprojWorkflowV1alpha1LogEntry.ts | 1 - ...oprojWorkflowV1alpha1WorkflowWatchEvent.ts | 1 - .../streamResultOfIoK8sApiCoreV1Event.ts | 1 - .../model/streamResultOfSensorLogEntry.ts | 1 - .../streamResultOfSensorSensorWatchEvent.ts | 1 - .../src/components/Overview/Overview.tsx | 2 +- plugins/cnoe-ui/dev/index.tsx | 2 +- plugins/cnoe-ui/package.json | 11 +- plugins/cnoe-ui/src/alpha.tsx | 2 +- plugins/cnoe-ui/src/components/Homepage.tsx | 6 +- .../cnoe-ui/src/components/logos/LogoBig.tsx | 2 +- .../cnoe-ui/src/components/logos/LogoFull.tsx | 2 +- .../cnoe-ui/src/components/logos/LogoIcon.tsx | 2 +- .../package.json | 2 + plugins/terraform-backend/package.json | 4 + .../terraform-backend/src/service/router.ts | 10 +- plugins/terraform/dev/index.tsx | 2 +- plugins/terraform/package.json | 15 +- plugins/terraform/src/alpha.tsx | 2 +- .../MainPageComponent.test.tsx | 1 - .../MainPageComponent/MainPageComponent.tsx | 1 - .../MainPageFetchComponent.test.tsx | 6 +- .../MainPageFetchComponent.tsx | 193 +- .../RootComponent/RootComponent.tsx | 1 - yarn.lock | 2974 ++++++++++++++++- 461 files changed, 3860 insertions(+), 1387 deletions(-) create mode 100644 packages/app/.eslintrc.js create mode 100644 packages/backend/.eslintrc.js create mode 100644 plugins/argo-workflows/.eslintignore diff --git a/.eslintignore b/.eslintignore index e5b1994..91b2e6f 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1 +1,4 @@ playwright.config.ts +dist +dist-types +node_modules diff --git a/e2e/plugins.spec.ts b/e2e/plugins.spec.ts index 14a28ff..2a092d2 100644 --- a/e2e/plugins.spec.ts +++ b/e2e/plugins.spec.ts @@ -2,11 +2,22 @@ import { test, expect } from '@playwright/test'; test.describe('CNOE Backstage Plugin Tests', () => { test.beforeEach(async ({ page }) => { + // Dismiss webpack dev server overlay that intercepts clicks + await page.addInitScript(() => { + window.addEventListener('load', () => { + const overlay = document.getElementById('webpack-dev-server-client-overlay'); + if (overlay) overlay.remove(); + }); + }); await page.goto('/'); + // Remove overlay if present + await page.evaluate(() => { + document.getElementById('webpack-dev-server-client-overlay')?.remove(); + }); const enterBtn = page.getByRole('button', { name: 'Enter' }); if (await enterBtn.isVisible({ timeout: 10000 }).catch(() => false)) { - await enterBtn.click(); - await page.waitForURL('**/home', { timeout: 15000 }); + await enterBtn.click({ force: true }); + await page.waitForURL('**/home', { timeout: 30000 }); } }); diff --git a/packages/app/.eslintrc.js b/packages/app/.eslintrc.js new file mode 100644 index 0000000..e2a53a6 --- /dev/null +++ b/packages/app/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/app/package.json b/packages/app/package.json index 443f98b..d03260c 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -14,12 +14,20 @@ "lint": "backstage-cli package lint" }, "dependencies": { + "@backstage-community/plugin-github-actions": "^0.22.0", + "@backstage-community/plugin-tech-radar": "^1.17.0", + "@backstage/app-defaults": "^1.7.6", + "@backstage/catalog-model": "^1.7.7", + "@backstage/cli": "^0.34.6", + "@backstage/core-app-api": "^1.19.6", + "@backstage/core-compat-api": "^0.5.9", "@backstage/core-components": "^0.18.8", "@backstage/core-plugin-api": "^1.12.4", "@backstage/frontend-defaults": "^0.5.0", "@backstage/frontend-plugin-api": "^0.15.1", - "@backstage/plugin-app-react": "^0.2.1", + "@backstage/integration-react": "^1.2.16", "@backstage/plugin-api-docs": "^0.13.5", + "@backstage/plugin-app-react": "^0.2.1", "@backstage/plugin-catalog": "^2.0.1", "@backstage/plugin-catalog-common": "^1.1.8", "@backstage/plugin-catalog-graph": "^0.6.0", @@ -38,20 +46,15 @@ "@backstage/plugin-techdocs-react": "^1.3.9", "@backstage/plugin-user-settings": "^0.9.1", "@backstage/theme": "^0.7.2", - "@backstage/integration-react": "^1.2.16", - "@backstage/catalog-model": "^1.7.7", - "@backstage/core-compat-api": "^0.5.9", - "@backstage/core-app-api": "^1.19.6", - "@backstage/app-defaults": "^1.7.6", + "@backstage/ui": "^0.13.2", "@internal/plugin-apache-spark": "^0.1.0", "@internal/plugin-argo-workflows": "^0.1.0", "@internal/plugin-terraform": "^0.1.0", - "@terasky/backstage-plugin-kro-resources-frontend": "^0.2.1", - "@roadiehq/backstage-plugin-argo-cd": "^2.12.5", - "@backstage-community/plugin-github-actions": "^0.22.0", - "@backstage-community/plugin-tech-radar": "^1.17.0", - "@backstage/ui": "^0.13.2", "@mui/icons-material": "^5.0.0", + "@mui/material": "^9.0.0", + "@roadiehq/backstage-plugin-argo-cd": "^2.12.5", + "@terasky/backstage-plugin-kro-resources-frontend": "^0.2.1", + "msw": "^2.14.2", "react": "^18.0.2", "react-dom": "^18.0.2", "react-router-dom": "^6.3.0" diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx index 4d0e47a..abb34f2 100644 --- a/packages/app/src/App.tsx +++ b/packages/app/src/App.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + import { Navigate, Route } from 'react-router-dom'; import { apiDocsPlugin } from '@backstage/plugin-api-docs'; import { diff --git a/packages/app/src/components/Root/Root.tsx b/packages/app/src/components/Root/Root.tsx index 7af37cc..1861053 100644 --- a/packages/app/src/components/Root/Root.tsx +++ b/packages/app/src/components/Root/Root.tsx @@ -1,4 +1,4 @@ -import React, { PropsWithChildren } from 'react'; +import { type PropsWithChildren } from 'react'; import HomeIcon from '@mui/icons-material/Home'; import ExtensionIcon from '@mui/icons-material/Extension'; import MapIcon from '@mui/icons-material/MyLocation'; diff --git a/packages/app/src/components/api/ApiExplorerPage.tsx b/packages/app/src/components/api/ApiExplorerPage.tsx index c839b51..7e9c591 100644 --- a/packages/app/src/components/api/ApiExplorerPage.tsx +++ b/packages/app/src/components/api/ApiExplorerPage.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useState, useRef, useEffect, type CSSProperties } from 'react'; import { Content, Page } from '@backstage/core-components'; import { EntityListProvider, @@ -11,14 +11,14 @@ import { import { CatalogTable } from '@backstage/plugin-catalog'; import FilterListIcon from '@mui/icons-material/FilterList'; -const contentWrapperStyle: React.CSSProperties = { +const contentWrapperStyle: CSSProperties = { width: '100%', padding: '0 0.3vw 24px', }; const waveSvg = `url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='1368' height='400' fill='none'%3e%3cmask id='a' width='1368' height='401' x='0' y='0' maskUnits='userSpaceOnUse'%3e%3cpath fill='url(%23paint0_linear)' d='M437 116C223 116 112 0 112 0h1256v400c-82 0-225-21-282-109-112-175-436-175-649-175z'/%3e%3cpath fill='url(%23paint1_linear)' d='M1368 400V282C891-29 788 40 711 161 608 324 121 372 0 361v39h1368z'/%3e%3cpath fill='url(%23paint2_linear)' d='M1368 244v156H0V94c92-24 198-46 375 0l135 41c176 51 195 109 858 109z'/%3e%3cpath fill='url(%23paint3_linear)' d='M1252 400h116c-14-7-35-14-116-16-663-14-837-128-1013-258l-85-61C98 28 46 8 0 0v400h1252z'/%3e%3c/mask%3e%3cg mask='url(%23a)'%3e%3cpath fill='white' d='M-172-98h1671v601H-172z'/%3e%3c/g%3e%3cdefs%3e%3clinearGradient id='paint0_linear' x1='602' x2='1093.5' y1='-960.5' y2='272' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint1_linear' x1='482' x2='480' y1='1058.5' y2='70.5' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint2_linear' x1='424' x2='446.1' y1='-587.5' y2='274.6' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint3_linear' x1='587' x2='349' y1='-1120.5' y2='341' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e")`; -const headerCardStyle: React.CSSProperties = { +const headerCardStyle: CSSProperties = { background: `linear-gradient(135deg, #003D7A 0%, #00568C 50%, #1A8DFF 100%)`, backgroundImage: `${waveSvg}, linear-gradient(135deg, #003D7A 0%, #00568C 50%, #1A8DFF 100%)`, backgroundSize: 'cover, cover', @@ -32,21 +32,21 @@ const headerCardStyle: React.CSSProperties = { overflow: 'hidden', }; -const titleStyle: React.CSSProperties = { +const titleStyle: CSSProperties = { margin: 0, fontSize: '2rem', fontWeight: 700, letterSpacing: '-0.5px', }; -const subtitleStyle: React.CSSProperties = { +const subtitleStyle: CSSProperties = { margin: '8px 0 0', fontSize: '1rem', fontWeight: 400, opacity: 0.85, }; -const toolbarCardStyle: React.CSSProperties = { +const toolbarCardStyle: CSSProperties = { background: 'rgba(255,255,255,0.03)', borderRadius: 16, boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', @@ -57,7 +57,7 @@ const toolbarCardStyle: React.CSSProperties = { marginBottom: 24, }; -const tableCardStyle: React.CSSProperties = { +const tableCardStyle: CSSProperties = { background: 'var(--backstage-color-background-paper, #fff)', borderRadius: 16, boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', @@ -65,7 +65,7 @@ const tableCardStyle: React.CSSProperties = { overflow: 'hidden', }; -const filterBtnBase: React.CSSProperties = { +const filterBtnBase: CSSProperties = { display: 'flex', alignItems: 'center', gap: 6, @@ -81,14 +81,14 @@ const filterBtnBase: React.CSSProperties = { position: 'relative' as const, }; -const filterBtnActiveStyle: React.CSSProperties = { +const filterBtnActiveStyle: CSSProperties = { ...filterBtnBase, background: 'rgba(255,152,0,0.08)', borderColor: 'rgba(255,152,0,0.5)', color: '#FF9800', }; -const dropdownStyle: React.CSSProperties = { +const dropdownStyle: CSSProperties = { position: 'absolute', top: 'calc(100% + 8px)', right: 0, @@ -104,13 +104,13 @@ const dropdownStyle: React.CSSProperties = { gap: 12, }; -const filterSectionStyle: React.CSSProperties = { +const filterSectionStyle: CSSProperties = { display: 'flex', flexDirection: 'column', gap: 4, }; -const filterLabelStyle: React.CSSProperties = { +const filterLabelStyle: CSSProperties = { fontSize: 11, fontWeight: 600, textTransform: 'uppercase', @@ -120,10 +120,10 @@ const filterLabelStyle: React.CSSProperties = { }; const FilterDropdown = () => { - const [open, setOpen] = React.useState(false); - const ref = React.useRef(null); + const [open, setOpen] = useState(false); + const ref = useRef(null); - React.useEffect(() => { + useEffect(() => { const handleClickOutside = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) { setOpen(false); diff --git a/packages/app/src/components/catalog/CatalogPage.tsx b/packages/app/src/components/catalog/CatalogPage.tsx index 2195b5a..2e51d73 100644 --- a/packages/app/src/components/catalog/CatalogPage.tsx +++ b/packages/app/src/components/catalog/CatalogPage.tsx @@ -1,4 +1,4 @@ -import React, { useState, useRef, useEffect } from 'react'; +import { useState, useRef, useEffect, type CSSProperties } from 'react'; import { EntityTypePicker, EntityOwnerPicker, @@ -9,7 +9,7 @@ import { import FilterListIcon from '@mui/icons-material/FilterList'; import CloseIcon from '@mui/icons-material/Close'; -const filterBtnBase: React.CSSProperties = { +const filterBtnBase: CSSProperties = { display: 'flex', alignItems: 'center', gap: 6, @@ -25,14 +25,14 @@ const filterBtnBase: React.CSSProperties = { position: 'relative' as const, }; -const filterBtnActiveStyle: React.CSSProperties = { +const filterBtnActiveStyle: CSSProperties = { ...filterBtnBase, background: 'rgba(255,152,0,0.08)', borderColor: 'rgba(255,152,0,0.5)', color: '#FF9800', }; -const dropdownStyle: React.CSSProperties = { +const dropdownStyle: CSSProperties = { position: 'absolute', top: 'calc(100% + 8px)', right: 0, @@ -48,13 +48,13 @@ const dropdownStyle: React.CSSProperties = { gap: 12, }; -const filterSectionStyle: React.CSSProperties = { +const filterSectionStyle: CSSProperties = { display: 'flex', flexDirection: 'column', gap: 4, }; -const filterLabelStyle: React.CSSProperties = { +const filterLabelStyle: CSSProperties = { fontSize: 11, fontWeight: 600, textTransform: 'uppercase', @@ -68,7 +68,7 @@ export const CatalogDropdownFilters = () => { const ref = useRef(null); useEffect(() => { - if (!open) return; + if (!open) return undefined; const handleClick = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false); }; diff --git a/packages/app/src/components/catalog/CustomCatalogPage.tsx b/packages/app/src/components/catalog/CustomCatalogPage.tsx index 2ef94e5..785c61a 100644 --- a/packages/app/src/components/catalog/CustomCatalogPage.tsx +++ b/packages/app/src/components/catalog/CustomCatalogPage.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import type { CSSProperties } from 'react'; import { Content, Page } from '@backstage/core-components'; import { CatalogIndexPage as StockCatalogIndexPage, @@ -12,7 +12,7 @@ import { import { HeroHeader, contentWrapperStyle } from '../shared/HeroHeader'; import { CatalogDropdownFilters } from './CatalogPage'; -const toolbarCardStyle: React.CSSProperties = { +const toolbarCardStyle: CSSProperties = { background: 'rgba(255,255,255,0.03)', borderRadius: 16, boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', @@ -23,7 +23,7 @@ const toolbarCardStyle: React.CSSProperties = { marginBottom: 24, }; -const tableCardStyle: React.CSSProperties = { +const tableCardStyle: CSSProperties = { background: 'var(--backstage-color-background-paper, #fff)', borderRadius: 16, boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index 77e773a..cde314e 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { cloneElement, type CSSProperties, type ReactElement } from 'react'; import Dashboard from '@mui/icons-material/Dashboard'; import RocketLaunch from '@mui/icons-material/RocketLaunch'; import Cloud from '@mui/icons-material/Cloud'; @@ -95,26 +95,26 @@ import { } from '@roadiehq/backstage-plugin-argo-cd'; // CSS grid layout helpers (replaces MUI Grid) -const grid12: React.CSSProperties = { +const grid12: CSSProperties = { display: 'grid', gridTemplateColumns: 'repeat(12, 1fr)', gap: '24px', alignItems: 'stretch', }; -const span = (n: number): React.CSSProperties => ({ gridColumn: `span ${n}` }); +const span = (n: number): CSSProperties => ({ gridColumn: `span ${n}` }); // Tab label helper — renders icon + text inline // EntityLayout.Route types title as string but renders ReactNode at runtime // eslint-disable-next-line @typescript-eslint/no-explicit-any -const tabLabel = (icon: React.ReactElement, text: string): any => ( +const tabLabel = (icon: ReactElement, text: string): any => ( - {React.cloneElement(icon, { style: { fontSize: 18 } })} + {cloneElement(icon, { style: { fontSize: 18 } })} {text} ); // Chip style helpers for EntityMetadataBar -const chipBase: React.CSSProperties = { +const chipBase: CSSProperties = { display: 'inline-flex', alignItems: 'center', gap: '4px', @@ -130,12 +130,12 @@ const EntityMetadataBar = () => { const type = (entity.spec?.type as string) || 'unknown'; const owner = (entity.spec?.owner as string) || 'unknown'; - const lifecycleColor = - lifecycle === 'production' - ? { background: '#e8f5e9', color: '#2e7d32' } - : lifecycle === 'experimental' - ? { background: '#fff8e1', color: '#f57f17' } - : { background: '#e3f2fd', color: '#1565c0' }; + let lifecycleColor = { background: '#e3f2fd', color: '#1565c0' }; + if (lifecycle === 'production') { + lifecycleColor = { background: '#e8f5e9', color: '#2e7d32' }; + } else if (lifecycle === 'experimental') { + lifecycleColor = { background: '#fff8e1', color: '#f57f17' }; + } return (
diff --git a/packages/app/src/components/home/Homepage.tsx b/packages/app/src/components/home/Homepage.tsx index b3df627..dc23f8f 100644 --- a/packages/app/src/components/home/Homepage.tsx +++ b/packages/app/src/components/home/Homepage.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useState, type CSSProperties } from 'react'; import { Content, Page } from '@backstage/core-components'; import { HomePageSearchBar } from '@backstage/plugin-search'; import { SearchContextProvider } from '@backstage/plugin-search-react'; @@ -39,7 +39,7 @@ const domainUrl = getDomainUrl(); const waveSvg = `url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='1368' height='400' fill='none'%3e%3cmask id='a' width='1368' height='401' x='0' y='0' maskUnits='userSpaceOnUse'%3e%3cpath fill='url(%23paint0_linear)' d='M437 116C223 116 112 0 112 0h1256v400c-82 0-225-21-282-109-112-175-436-175-649-175z'/%3e%3cpath fill='url(%23paint1_linear)' d='M1368 400V282C891-29 788 40 711 161 608 324 121 372 0 361v39h1368z'/%3e%3cpath fill='url(%23paint2_linear)' d='M1368 244v156H0V94c92-24 198-46 375 0l135 41c176 51 195 109 858 109z'/%3e%3cpath fill='url(%23paint3_linear)' d='M1252 400h116c-14-7-35-14-116-16-663-14-837-128-1013-258l-85-61C98 28 46 8 0 0v400h1252z'/%3e%3c/mask%3e%3cg mask='url(%23a)'%3e%3cpath fill='white' d='M-172-98h1671v601H-172z'/%3e%3c/g%3e%3cdefs%3e%3clinearGradient id='paint0_linear' x1='602' x2='1093.5' y1='-960.5' y2='272' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint1_linear' x1='482' x2='480' y1='1058.5' y2='70.5' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint2_linear' x1='424' x2='446.1' y1='-587.5' y2='274.6' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint3_linear' x1='587' x2='349' y1='-1120.5' y2='341' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e")`; -const heroStyle: React.CSSProperties = { +const heroStyle: CSSProperties = { width: 'calc(100% - 56px)', margin: '24px auto 0', padding: '40px 24px 32px', @@ -55,7 +55,7 @@ const heroStyle: React.CSSProperties = { minHeight: 135, }; -const heroTitleStyle: React.CSSProperties = { +const heroTitleStyle: CSSProperties = { margin: 0, fontSize: '2.25rem', fontWeight: 700, @@ -63,14 +63,14 @@ const heroTitleStyle: React.CSSProperties = { lineHeight: 1.2, }; -const heroSubtitleStyle: React.CSSProperties = { +const heroSubtitleStyle: CSSProperties = { margin: '12px 0 0', fontSize: '1.1rem', fontWeight: 400, opacity: 0.85, }; -const searchWrapperStyle: React.CSSProperties = { +const searchWrapperStyle: CSSProperties = { maxWidth: 700, width: '100%', margin: '-28px auto 0', @@ -79,14 +79,14 @@ const searchWrapperStyle: React.CSSProperties = { zIndex: 1, }; -const searchCardStyle: React.CSSProperties = { +const searchCardStyle: CSSProperties = { background: 'var(--backstage-color-background-paper, #fff)', borderRadius: 16, boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', padding: '10px 8px', }; -const searchBarInnerStyle: React.CSSProperties = { +const searchBarInnerStyle: CSSProperties = { display: 'flex', width: '100%', border: 'none', @@ -95,7 +95,7 @@ const searchBarInnerStyle: React.CSSProperties = { borderRadius: 12, }; -const columnsStyle: React.CSSProperties = { +const columnsStyle: CSSProperties = { display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 24, @@ -106,7 +106,7 @@ const columnsStyle: React.CSSProperties = { alignItems: 'start', }; -const cardStyle: React.CSSProperties = { +const cardStyle: CSSProperties = { background: 'var(--backstage-color-background-paper, #f8f9fb)', borderRadius: 16, boxShadow: '0 4px 20px rgba(0,0,0,0.08), 0 1.5px 6px rgba(0,0,0,0.04), inset 0 1px 0 rgba(255,255,255,0.6)', @@ -114,7 +114,7 @@ const cardStyle: React.CSSProperties = { overflow: 'hidden', }; -const cardHeaderStyle: React.CSSProperties = { +const cardHeaderStyle: CSSProperties = { display: 'flex', alignItems: 'center', gap: 8, @@ -124,7 +124,7 @@ const cardHeaderStyle: React.CSSProperties = { color: 'inherit', }; -const quickLinksGridStyle: React.CSSProperties = { +const quickLinksGridStyle: CSSProperties = { display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(120px, 1fr))', gap: 14, @@ -133,7 +133,7 @@ const quickLinksGridStyle: React.CSSProperties = { overflowY: 'auto', }; -const toolCardBase: React.CSSProperties = { +const toolCardBase: CSSProperties = { display: 'flex', flexDirection: 'column', alignItems: 'center', @@ -149,7 +149,7 @@ const toolCardBase: React.CSSProperties = { border: '1px solid transparent', }; -const toolCardLabelStyle: React.CSSProperties = { +const toolCardLabelStyle: CSSProperties = { fontSize: 13, fontWeight: 500, textAlign: 'center', @@ -169,9 +169,9 @@ interface ToolCardProps { } const ToolCard = ({ url, label, iconSrc, iconAlt, isCatalog }: ToolCardProps) => { - const [hovered, setHovered] = React.useState(false); + const [hovered, setHovered] = useState(false); - const style: React.CSSProperties = { + const style: CSSProperties = { ...toolCardBase, ...(hovered ? { diff --git a/packages/app/src/components/kubernetes/KroNavigationHelper.tsx b/packages/app/src/components/kubernetes/KroNavigationHelper.tsx index cf66017..0bc7975 100644 --- a/packages/app/src/components/kubernetes/KroNavigationHelper.tsx +++ b/packages/app/src/components/kubernetes/KroNavigationHelper.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import type { CSSProperties, FC } from 'react'; import { useEntity } from '@backstage/plugin-catalog-react'; import { useRouteRef } from '@backstage/core-plugin-api'; import { entityRouteRef } from '@backstage/plugin-catalog-react'; @@ -12,7 +12,7 @@ interface RelatedResource { isKroResource: boolean; } -const chipStyle: React.CSSProperties = { +const chipStyle: CSSProperties = { display: 'inline-block', padding: '2px 10px', borderRadius: '16px', @@ -21,7 +21,7 @@ const chipStyle: React.CSSProperties = { border: '1px solid', }; -const btnStyle: React.CSSProperties = { +const btnStyle: CSSProperties = { padding: '4px 12px', borderRadius: '4px', border: '1px solid rgba(144,202,249,0.5)', @@ -35,7 +35,7 @@ const btnStyle: React.CSSProperties = { * Navigation helper component that provides seamless navigation * between Kubernetes and Kro views. */ -export const KroNavigationHelper: React.FC = () => { +export const KroNavigationHelper: FC = () => { const { entity } = useEntity(); const catalogEntityRoute = useRouteRef(entityRouteRef); diff --git a/packages/app/src/components/kubernetes/KroResourceFilter.tsx b/packages/app/src/components/kubernetes/KroResourceFilter.tsx index 1556fd7..6bf14bb 100644 --- a/packages/app/src/components/kubernetes/KroResourceFilter.tsx +++ b/packages/app/src/components/kubernetes/KroResourceFilter.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import type { CSSProperties, FC, ChangeEvent } from 'react'; interface KroResourceFilterProps { selectedResourceTypes: string[]; @@ -9,7 +9,7 @@ interface KroResourceFilterProps { const styles = { container: { padding: 8, - } as React.CSSProperties, + } as CSSProperties, select: { minWidth: 200, padding: '8px 12px', @@ -17,13 +17,13 @@ const styles = { border: '1px solid rgba(0,0,0,0.23)', fontSize: '0.875rem', backgroundColor: 'var(--backstage-color-background-paper, #fff)', - } as React.CSSProperties, + } as CSSProperties, chipContainer: { display: 'flex', flexWrap: 'wrap' as const, gap: 4, marginTop: 8, - } as React.CSSProperties, + } as CSSProperties, chip: { display: 'inline-flex', alignItems: 'center', @@ -33,12 +33,12 @@ const styles = { fontSize: '0.75rem', border: '1px solid rgba(0,0,0,0.23)', backgroundColor: 'transparent', - } as React.CSSProperties, + } as CSSProperties, kroChip: { backgroundColor: 'var(--backstage-color-primary-light, #90caf9)', color: '#fff', borderColor: 'transparent', - } as React.CSSProperties, + } as CSSProperties, deleteButton: { background: 'none', border: 'none', @@ -47,14 +47,14 @@ const styles = { fontSize: '0.875rem', lineHeight: 1, color: 'inherit', - } as React.CSSProperties, + } as CSSProperties, }; /** * Enhanced resource filter that includes Kro ResourceGroups * alongside standard Kubernetes resources */ -export const KroResourceFilter: React.FC = ({ +export const KroResourceFilter: FC = ({ selectedResourceTypes, onResourceTypeChange, availableResourceTypes, @@ -71,7 +71,7 @@ export const KroResourceFilter: React.FC = ({ return resourceType.includes('kro.run') || resourceType.includes('ResourceGroup'); }; - const handleSelectChange = (event: React.ChangeEvent) => { + const handleSelectChange = (event: ChangeEvent) => { const value = event.target.value; if (value && !selectedResourceTypes.includes(value)) { onResourceTypeChange([...selectedResourceTypes, value]); diff --git a/packages/app/src/components/kubernetes/KubernetesContentWithKro.tsx b/packages/app/src/components/kubernetes/KubernetesContentWithKro.tsx index 44eabb9..5494419 100644 --- a/packages/app/src/components/kubernetes/KubernetesContentWithKro.tsx +++ b/packages/app/src/components/kubernetes/KubernetesContentWithKro.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import type { CSSProperties } from 'react'; import { EntityKubernetesContent } from '@backstage/plugin-kubernetes'; import { useEntity } from '@backstage/plugin-catalog-react'; import { @@ -8,13 +8,13 @@ import { IfKroOverviewAvailable, } from '@terasky/backstage-plugin-kro-resources-frontend'; -const stack: React.CSSProperties = { +const stack: CSSProperties = { display: 'flex', flexDirection: 'column', gap: '24px', }; -const chip: React.CSSProperties = { +const chip: CSSProperties = { display: 'inline-block', padding: '2px 10px', borderRadius: '16px', diff --git a/packages/app/src/components/logos/LogoFull.tsx b/packages/app/src/components/logos/LogoFull.tsx index 694853d..bedc256 100644 --- a/packages/app/src/components/logos/LogoFull.tsx +++ b/packages/app/src/components/logos/LogoFull.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + import { useTheme } from '@mui/material/styles'; export const LogoFull = () => { diff --git a/packages/app/src/components/logos/LogoIcon.tsx b/packages/app/src/components/logos/LogoIcon.tsx index 7d3974a..e10e49a 100644 --- a/packages/app/src/components/logos/LogoIcon.tsx +++ b/packages/app/src/components/logos/LogoIcon.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + import { useTheme } from '@mui/material/styles'; /** Collapsed sidebar icon — just the boat, no "CNOE" text */ diff --git a/packages/app/src/components/search/SearchPage.tsx b/packages/app/src/components/search/SearchPage.tsx index f890137..f56b811 100644 --- a/packages/app/src/components/search/SearchPage.tsx +++ b/packages/app/src/components/search/SearchPage.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useState, useRef, useEffect, type CSSProperties } from 'react'; import { CatalogSearchResultListItem } from '@backstage/plugin-catalog'; import { catalogApiRef, @@ -24,7 +24,7 @@ import { HeroHeader, contentWrapperStyle } from '../shared/HeroHeader'; import FilterListIcon from '@mui/icons-material/FilterList'; import CloseIcon from '@mui/icons-material/Close'; -const toolbarCardStyle: React.CSSProperties = { +const toolbarCardStyle: CSSProperties = { background: 'rgba(255,255,255,0.03)', borderRadius: 16, boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', @@ -35,7 +35,7 @@ const toolbarCardStyle: React.CSSProperties = { marginBottom: 24, }; -const tableCardStyle: React.CSSProperties = { +const tableCardStyle: CSSProperties = { background: 'var(--backstage-color-background-paper, #fff)', borderRadius: 16, boxShadow: '0 4px 24px rgba(0,0,0,0.10), 0 1.5px 6px rgba(0,0,0,0.06)', @@ -44,7 +44,7 @@ const tableCardStyle: React.CSSProperties = { padding: '20px 24px', }; -const filterBtnBase: React.CSSProperties = { +const filterBtnBase: CSSProperties = { display: 'flex', alignItems: 'center', gap: 6, @@ -60,13 +60,13 @@ const filterBtnBase: React.CSSProperties = { position: 'relative' as const, }; -const filterBtnActiveStyle: React.CSSProperties = { +const filterBtnActiveStyle: CSSProperties = { ...filterBtnBase, background: 'rgba(255,152,0,0.08)', borderColor: 'rgba(255,152,0,0.5)', }; -const dropdownStyle: React.CSSProperties = { +const dropdownStyle: CSSProperties = { position: 'absolute', top: 'calc(100% + 8px)', right: 0, @@ -82,13 +82,13 @@ const dropdownStyle: React.CSSProperties = { gap: 12, }; -const filterSectionStyle: React.CSSProperties = { +const filterSectionStyle: CSSProperties = { display: 'flex', flexDirection: 'column', gap: 4, }; -const filterLabelStyle: React.CSSProperties = { +const filterLabelStyle: CSSProperties = { fontSize: 11, fontWeight: 600, textTransform: 'uppercase', @@ -98,12 +98,12 @@ const filterLabelStyle: React.CSSProperties = { }; const SearchFilterDropdown = () => { - const [open, setOpen] = React.useState(false); - const ref = React.useRef(null); + const [open, setOpen] = useState(false); + const ref = useRef(null); const { types } = useSearch(); const catalogApi = useApi(catalogApiRef); - React.useEffect(() => { + useEffect(() => { const handleClickOutside = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false); }; diff --git a/packages/app/src/components/shared/HeroHeader.tsx b/packages/app/src/components/shared/HeroHeader.tsx index 438cad8..cf0b5ef 100644 --- a/packages/app/src/components/shared/HeroHeader.tsx +++ b/packages/app/src/components/shared/HeroHeader.tsx @@ -1,8 +1,8 @@ -import React from 'react'; +import type { CSSProperties } from 'react'; const waveSvg = `url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='1368' height='400' fill='none'%3e%3cmask id='a' width='1368' height='401' x='0' y='0' maskUnits='userSpaceOnUse'%3e%3cpath fill='url(%23paint0_linear)' d='M437 116C223 116 112 0 112 0h1256v400c-82 0-225-21-282-109-112-175-436-175-649-175z'/%3e%3cpath fill='url(%23paint1_linear)' d='M1368 400V282C891-29 788 40 711 161 608 324 121 372 0 361v39h1368z'/%3e%3cpath fill='url(%23paint2_linear)' d='M1368 244v156H0V94c92-24 198-46 375 0l135 41c176 51 195 109 858 109z'/%3e%3cpath fill='url(%23paint3_linear)' d='M1252 400h116c-14-7-35-14-116-16-663-14-837-128-1013-258l-85-61C98 28 46 8 0 0v400h1252z'/%3e%3c/mask%3e%3cg mask='url(%23a)'%3e%3cpath fill='white' d='M-172-98h1671v601H-172z'/%3e%3c/g%3e%3cdefs%3e%3clinearGradient id='paint0_linear' x1='602' x2='1093.5' y1='-960.5' y2='272' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint1_linear' x1='482' x2='480' y1='1058.5' y2='70.5' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint2_linear' x1='424' x2='446.1' y1='-587.5' y2='274.6' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient id='paint3_linear' x1='587' x2='349' y1='-1120.5' y2='341' gradientUnits='userSpaceOnUse'%3e%3cstop stop-color='white'/%3e%3cstop offset='1' stop-color='white' stop-opacity='0'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e")`; -const headerCardStyle: React.CSSProperties = { +const headerCardStyle: CSSProperties = { background: `linear-gradient(135deg, #003D7A 0%, #00568C 50%, #1A8DFF 100%)`, backgroundImage: `${waveSvg}, linear-gradient(135deg, #003D7A 0%, #00568C 50%, #1A8DFF 100%)`, backgroundSize: 'cover, cover', @@ -23,7 +23,7 @@ export const HeroHeader = ({ title, subtitle }: { title: string; subtitle: strin
); -export const contentWrapperStyle: React.CSSProperties = { +export const contentWrapperStyle: CSSProperties = { width: '100%', padding: '0 0.3vw 24px', }; diff --git a/packages/app/src/index.tsx b/packages/app/src/index.tsx index bc914b4..c2fd3d8 100644 --- a/packages/app/src/index.tsx +++ b/packages/app/src/index.tsx @@ -1,6 +1,6 @@ import '@backstage/ui/css/styles.css'; import '@backstage/cli/asset-types'; -import React from 'react'; + import ReactDOM from 'react-dom/client'; import App from './App'; @@ -402,7 +402,7 @@ const detectDarkMode = () => { const bg = window.getComputedStyle(document.body).backgroundColor; const match = bg.match(/\d+/g); if (match) { - const brightness = (parseInt(match[0]) + parseInt(match[1]) + parseInt(match[2])) / 3; + const brightness = (parseInt(match[0], 10) + parseInt(match[1], 10) + parseInt(match[2], 10)) / 3; document.documentElement.classList.toggle('backstage-dark', brightness < 128); } }; @@ -420,6 +420,7 @@ async function startApp() { ) { const { worker } = await import('./mocks/browser'); await worker.start({ onUnhandledRequest: 'bypass' }); + // eslint-disable-next-line no-console -- intentional startup log for MSW console.log('[MSW] Mock service worker started'); } diff --git a/packages/app/src/theme.ts b/packages/app/src/theme.ts index c9043ef..656928a 100644 --- a/packages/app/src/theme.ts +++ b/packages/app/src/theme.ts @@ -1,4 +1,4 @@ -import React from 'react'; +import { createElement } from 'react'; import { createUnifiedTheme, UnifiedThemeProvider, @@ -469,7 +469,7 @@ export const cnoeVibrantLightAppTheme: AppTheme = { title: 'CNOE Light', variant: 'light', Provider: ({ children }) => - React.createElement(UnifiedThemeProvider, { theme: lightTheme, children }), + createElement(UnifiedThemeProvider, { theme: lightTheme, children }), }; export const cnoeVibrantDarkAppTheme: AppTheme = { @@ -477,5 +477,5 @@ export const cnoeVibrantDarkAppTheme: AppTheme = { title: 'CNOE Dark', variant: 'dark', Provider: ({ children }) => - React.createElement(UnifiedThemeProvider, { theme: darkTheme, children }), + createElement(UnifiedThemeProvider, { theme: darkTheme, children }), }; diff --git a/packages/backend/.eslintrc.js b/packages/backend/.eslintrc.js new file mode 100644 index 0000000..e2a53a6 --- /dev/null +++ b/packages/backend/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/backend/package.json b/packages/backend/package.json index 00bd3bb..35312f0 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -21,15 +21,15 @@ "@backstage/config": "^1.3.6", "@backstage/errors": "^1.2.7", "@backstage/integration": "^2.0.0", - "@backstage/types": "^1.2.2", "@backstage/plugin-app-backend": "^0.5.12", "@backstage/plugin-auth-backend": "^0.27.3", "@backstage/plugin-auth-backend-module-guest-provider": "^0.2.17", "@backstage/plugin-auth-backend-module-oidc-provider": "^0.4.14", "@backstage/plugin-auth-node": "^0.6.14", "@backstage/plugin-catalog-backend": "^3.5.0", - "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "^0.2.18", "@backstage/plugin-catalog-backend-module-gitlab": "^0.8.0", + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "^0.2.18", + "@backstage/plugin-catalog-node": "^2.2.0", "@backstage/plugin-kubernetes-backend": "^0.21.2", "@backstage/plugin-permission-backend": "^0.7.10", "@backstage/plugin-permission-backend-module-allow-all-policy": "^0.2.17", @@ -43,6 +43,7 @@ "@backstage/plugin-search-backend-module-catalog": "^0.3.13", "@backstage/plugin-search-backend-module-techdocs": "^0.4.12", "@backstage/plugin-techdocs-backend": "^2.1.6", + "@backstage/types": "^1.2.2", "@internal/backstage-plugin-terraform-backend": "^0.1.0", "@kubernetes/client-node": "~0.20.0", "@roadiehq/backstage-plugin-argo-cd-backend": "^4.7.1", @@ -61,8 +62,8 @@ "yaml": "^2.3.0" }, "devDependencies": { - "@backstage/cli": "^0.36.0", "@backstage/backend-test-utils": "^1.11.1", + "@backstage/cli": "^0.36.0", "@types/express": "^4.17.6", "@types/fs-extra": "^11.0.4" }, diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 2ecad28..9a118a9 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -6,6 +6,7 @@ const backend = createBackend(); // Detect if running inside a Kubernetes cluster const isInCluster = require('fs').existsSync('/var/run/secrets/kubernetes.io/serviceaccount/token'); + const k8sEnabled = process.env.K8S_CLUSTER_URL || isInCluster; // Core plugins diff --git a/packages/backend/src/modules/actions/sanitize.ts b/packages/backend/src/modules/actions/sanitize.ts index d8c9df5..ae886e1 100644 --- a/packages/backend/src/modules/actions/sanitize.ts +++ b/packages/backend/src/modules/actions/sanitize.ts @@ -47,16 +47,18 @@ function removeEmptyObjects(obj: any): any { } const newObj: any = Array.isArray(obj) ? [] : {}; for (const key in obj) { - const value = obj[key]; - const newValue = removeEmptyObjects(value); - if ( - !( - newValue === null || - newValue === undefined || - (typeof newValue === 'object' && Object.keys(newValue).length === 0) - ) - ) { - newObj[key] = newValue; + if (Object.hasOwn(obj, key)) { + const value = obj[key]; + const newValue = removeEmptyObjects(value); + if ( + !( + newValue === null || + newValue === undefined || + (typeof newValue === 'object' && Object.keys(newValue).length === 0) + ) + ) { + newObj[key] = newValue; + } } } return newObj; diff --git a/packages/backend/src/plugins/catalog-processors/kro-resource-group-processor.ts b/packages/backend/src/plugins/catalog-processors/kro-resource-group-processor.ts index b0846b7..a14420d 100644 --- a/packages/backend/src/plugins/catalog-processors/kro-resource-group-processor.ts +++ b/packages/backend/src/plugins/catalog-processors/kro-resource-group-processor.ts @@ -286,9 +286,8 @@ export class KroResourceGroupProcessor implements CatalogProcessor { return 'Ready'; } else if (readyCondition.reason === 'Failed' || readyCondition.status === 'False') { return 'Failed'; - } else { - return 'Pending'; } + return 'Pending'; } return 'Unknown'; diff --git a/packages/backend/src/plugins/kro-audit.ts b/packages/backend/src/plugins/kro-audit.ts index 384c66d..2d2b97f 100644 --- a/packages/backend/src/plugins/kro-audit.ts +++ b/packages/backend/src/plugins/kro-audit.ts @@ -219,7 +219,7 @@ export const kroAuditModule = createBackendModule({ // Create audit logger instance // Initialize audit logger - new KroAuditLogger(logger); + const _auditLogger = new KroAuditLogger(logger); // Register audit logger as a service (in a real implementation) // This would be made available to other parts of the application diff --git a/packages/backend/src/plugins/kro-permissions.ts b/packages/backend/src/plugins/kro-permissions.ts index b2509da..60d57a6 100644 --- a/packages/backend/src/plugins/kro-permissions.ts +++ b/packages/backend/src/plugins/kro-permissions.ts @@ -224,9 +224,8 @@ export class KroRBACValidator { return ['platform-engineers', 'kro-readers']; } else if (username.includes('dev')) { return ['developers', 'kro-readers']; - } else { - return ['kro-readers']; } + return ['kro-readers']; } } @@ -301,15 +300,14 @@ export class KroPermissionPolicy implements PermissionPolicy { component: 'kro-permissions' }); return { result: AuthorizeResult.ALLOW }; - } else { - this.logger.warn(`Permission denied for ${request.permission.name}`, { - user: user.identity.userEntityRef, - permission: request.permission.name, - reason: validation.reason, - component: 'kro-permissions' - }); - return { result: AuthorizeResult.DENY }; } + this.logger.warn(`Permission denied for ${request.permission.name}`, { + user: user.identity.userEntityRef, + permission: request.permission.name, + reason: validation.reason, + component: 'kro-permissions' + }); + return { result: AuthorizeResult.DENY }; } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); @@ -348,7 +346,7 @@ export const kroPermissionsModule = createBackendModule({ // Create and register permission policy // Initialize kro policy - new KroPermissionPolicy(rbacValidator, logger); + const _kroPolicy = new KroPermissionPolicy(rbacValidator, logger); // Note: In a real implementation, you would register this policy with the permission system // This is a simplified example showing the structure diff --git a/packages/backend/src/plugins/kro-resource-group-service.ts b/packages/backend/src/plugins/kro-resource-group-service.ts index 2ba6821..4df8580 100644 --- a/packages/backend/src/plugins/kro-resource-group-service.ts +++ b/packages/backend/src/plugins/kro-resource-group-service.ts @@ -134,7 +134,7 @@ export class KroResourceGroupService { 'create', permissionResult.reason ); - throw new Error('Permission denied: ' + permissionResult.reason); + throw new Error(`Permission denied: ${permissionResult.reason}`); } } diff --git a/packages/backend/src/plugins/mock-argocd.ts b/packages/backend/src/plugins/mock-argocd.ts index 49adccc..5099fbc 100644 --- a/packages/backend/src/plugins/mock-argocd.ts +++ b/packages/backend/src/plugins/mock-argocd.ts @@ -7,6 +7,7 @@ import * as path from 'path'; import * as fs from 'fs'; function loadFixture(name: string): any { + // eslint-disable-next-line no-restricted-syntax const filePath = path.resolve(__dirname, '../mocks/fixtures', name); return JSON.parse(fs.readFileSync(filePath, 'utf8')); } diff --git a/packages/backend/src/plugins/mock-kubernetes.ts b/packages/backend/src/plugins/mock-kubernetes.ts index a0a8e73..ffa1878 100644 --- a/packages/backend/src/plugins/mock-kubernetes.ts +++ b/packages/backend/src/plugins/mock-kubernetes.ts @@ -7,11 +7,13 @@ import * as path from 'path'; import * as fs from 'fs'; function loadFixture(name: string): any { + // eslint-disable-next-line no-restricted-syntax const filePath = path.resolve(__dirname, '../mocks/fixtures', name); return JSON.parse(fs.readFileSync(filePath, 'utf8')); } function loadFixtureText(name: string): string { + // eslint-disable-next-line no-restricted-syntax const filePath = path.resolve(__dirname, '../mocks/fixtures', name); return fs.readFileSync(filePath, 'utf8'); } diff --git a/packages/backend/src/plugins/mock-proxy.ts b/packages/backend/src/plugins/mock-proxy.ts index ab7cd5b..0e697c4 100644 --- a/packages/backend/src/plugins/mock-proxy.ts +++ b/packages/backend/src/plugins/mock-proxy.ts @@ -7,6 +7,7 @@ import * as path from 'path'; import * as fs from 'fs'; function loadFixture(name: string): any { + // eslint-disable-next-line no-restricted-syntax const filePath = path.resolve(__dirname, '../mocks/fixtures', name); return JSON.parse(fs.readFileSync(filePath, 'utf8')); } diff --git a/packages/backend/src/plugins/mock-terraform.ts b/packages/backend/src/plugins/mock-terraform.ts index 1527591..0f28477 100644 --- a/packages/backend/src/plugins/mock-terraform.ts +++ b/packages/backend/src/plugins/mock-terraform.ts @@ -7,6 +7,7 @@ import * as path from 'path'; import * as fs from 'fs'; function loadFixture(name: string): any { + // eslint-disable-next-line no-restricted-syntax const filePath = path.resolve(__dirname, '../mocks/fixtures', name); return JSON.parse(fs.readFileSync(filePath, 'utf8')); } diff --git a/playwright.config.ts b/playwright.config.ts index 99f8536..587ff5d 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -2,17 +2,18 @@ import { defineConfig } from '@playwright/test'; export default defineConfig({ testDir: './e2e', - timeout: 60000, + timeout: 90000, retries: 1, use: { baseURL: 'http://localhost:3000', headless: true, screenshot: 'only-on-failure', + actionTimeout: 30000, }, webServer: { - command: 'MOCK_MODE=true yarn dev', + command: 'WDS_SOCKET_PORT=0 DISABLE_ESLINT_PLUGIN=true MOCK_MODE=true yarn dev', port: 3000, - timeout: 120000, + timeout: 180000, reuseExistingServer: true, }, }); diff --git a/plugins/apache-spark/dev/index.tsx b/plugins/apache-spark/dev/index.tsx index 5f2b474..d39a30d 100644 --- a/plugins/apache-spark/dev/index.tsx +++ b/plugins/apache-spark/dev/index.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + import { createDevApp } from '@backstage/dev-utils'; import { apacheSparkPlugin, ApacheSparkPage } from '../src/plugin'; diff --git a/plugins/apache-spark/package.json b/plugins/apache-spark/package.json index 9250fea..b235c62 100644 --- a/plugins/apache-spark/package.json +++ b/plugins/apache-spark/package.json @@ -10,8 +10,12 @@ }, "typesVersions": { "*": { - "alpha": ["src/alpha.tsx"], - "package.json": ["package.json"] + "alpha": [ + "src/alpha.tsx" + ], + "package.json": [ + "package.json" + ] } }, "license": "Apache-2.0", @@ -35,11 +39,15 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { + "@backstage/catalog-model": "^1.7.7", "@backstage/core-components": "^0.18.8", "@backstage/core-plugin-api": "^1.12.4", "@backstage/frontend-plugin-api": "^0.15.1", + "@backstage/plugin-catalog-react": "^2.1.4", + "@backstage/plugin-kubernetes": "^0.12.17", "@backstage/theme": "^0.7.2", - "react-use": "^17.2.4" + "react-use": "^17.2.4", + "yaml": "^2.3.0" }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0" @@ -52,6 +60,7 @@ "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", + "cross-fetch": "^4.1.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/apache-spark/src/alpha.tsx b/plugins/apache-spark/src/alpha.tsx index 7f90772..f1b4ca9 100644 --- a/plugins/apache-spark/src/alpha.tsx +++ b/plugins/apache-spark/src/alpha.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + import { createFrontendPlugin, PageBlueprint } from '@backstage/frontend-plugin-api'; /** diff --git a/plugins/apache-spark/src/api/index.test.ts b/plugins/apache-spark/src/api/index.test.ts index 20f775b..9362417 100644 --- a/plugins/apache-spark/src/api/index.test.ts +++ b/plugins/apache-spark/src/api/index.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable jest/no-commented-out-tests */ // import { ApacheSparkClient } from './index'; // import { ApacheSpark } from './model'; // diff --git a/plugins/apache-spark/src/components/ApacheSparkLogs/ApacheSparkLogs.test.tsx b/plugins/apache-spark/src/components/ApacheSparkLogs/ApacheSparkLogs.test.tsx index 01d3ade..4f6a3d9 100644 --- a/plugins/apache-spark/src/components/ApacheSparkLogs/ApacheSparkLogs.test.tsx +++ b/plugins/apache-spark/src/components/ApacheSparkLogs/ApacheSparkLogs.test.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + import { render, screen } from '@testing-library/react'; import { useApi } from '@backstage/core-plugin-api'; import { useEntity } from '@backstage/plugin-catalog-react'; diff --git a/plugins/apache-spark/src/components/ApacheSparkLogs/ApacheSparkLogs.tsx b/plugins/apache-spark/src/components/ApacheSparkLogs/ApacheSparkLogs.tsx index ed04242..b000281 100644 --- a/plugins/apache-spark/src/components/ApacheSparkLogs/ApacheSparkLogs.tsx +++ b/plugins/apache-spark/src/components/ApacheSparkLogs/ApacheSparkLogs.tsx @@ -10,7 +10,7 @@ import { SelectItem, } from '@backstage/core-components'; import { ResponseErrorPanel } from '@backstage/core-components'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { useEntity } from '@backstage/plugin-catalog-react'; import { getAnnotationValues } from '../utils'; diff --git a/plugins/apache-spark/src/components/ApacheSparkOverviewTable/ApacheSparkOverviewTable.tsx b/plugins/apache-spark/src/components/ApacheSparkOverviewTable/ApacheSparkOverviewTable.tsx index f1bb5c6..a92765b 100644 --- a/plugins/apache-spark/src/components/ApacheSparkOverviewTable/ApacheSparkOverviewTable.tsx +++ b/plugins/apache-spark/src/components/ApacheSparkOverviewTable/ApacheSparkOverviewTable.tsx @@ -10,7 +10,7 @@ import { } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; import { apacheSparkApiRef } from '../../api'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState, type CSSProperties } from 'react'; import useAsync from 'react-use/lib/useAsync'; import { ApacheSpark, ApacheSparkList } from '../../api/model'; import { DrawerContent } from '../DetailedDrawer/DetailedDrawer'; @@ -18,13 +18,13 @@ import { getAnnotationValues } from '../utils'; import { useEntity } from '@backstage/plugin-catalog-react'; // Slide-over panel styles (replaces MUI Drawer) -const overlayStyle: React.CSSProperties = { +const overlayStyle: CSSProperties = { position: 'fixed', inset: 0, background: 'rgba(0,0,0,0.3)', zIndex: 1200, }; -const panelStyle: React.CSSProperties = { +const panelStyle: CSSProperties = { position: 'fixed', top: 0, right: 0, @@ -141,7 +141,7 @@ export const ApacheSparkOverviewTable = () => { /> {isOpen && ( <> -
toggleDrawer(false)} /> +
toggleDrawer(false)} onKeyDown={(e) => { if (e.key === 'Escape') toggleDrawer(false); }} />
diff --git a/plugins/apache-spark/src/components/DetailedDrawer/DetailedDrawer.tsx b/plugins/apache-spark/src/components/DetailedDrawer/DetailedDrawer.tsx index c613646..79c7fe2 100644 --- a/plugins/apache-spark/src/components/DetailedDrawer/DetailedDrawer.tsx +++ b/plugins/apache-spark/src/components/DetailedDrawer/DetailedDrawer.tsx @@ -1,5 +1,5 @@ import { ApacheSpark } from '../../api/model'; -import React from 'react'; +import type { CSSProperties } from 'react'; import { stringify } from 'yaml'; import { CopyTextButton, TabbedLayout } from '@backstage/core-components'; import { @@ -8,25 +8,25 @@ import { } from '../ApacheSparkLogs/ApacheSparkLogs'; import { DrawerOverview } from './DrawerOverview'; -const headerStyle: React.CSSProperties = { +const headerStyle: CSSProperties = { display: 'flex', justifyContent: 'space-between', alignItems: 'center', }; -const contentStyle: React.CSSProperties = { +const contentStyle: CSSProperties = { height: '80%', backgroundColor: '#EEEEEE', overflow: 'scroll', display: 'flex', flexDirection: 'row', }; -const logsStyle: React.CSSProperties = { +const logsStyle: CSSProperties = { height: 500, display: 'flex', flexDirection: 'column', flexShrink: 0, }; -const logs2Style: React.CSSProperties = { +const logs2Style: CSSProperties = { height: 600, display: 'flex', flexDirection: 'column', diff --git a/plugins/apache-spark/src/components/DetailedDrawer/DrawerOverview.tsx b/plugins/apache-spark/src/components/DetailedDrawer/DrawerOverview.tsx index 586dd43..936b118 100644 --- a/plugins/apache-spark/src/components/DetailedDrawer/DrawerOverview.tsx +++ b/plugins/apache-spark/src/components/DetailedDrawer/DrawerOverview.tsx @@ -8,9 +8,9 @@ import { StatusRunning, StructuredMetadataTable, } from '@backstage/core-components'; -import React from 'react'; +import type { CSSProperties } from 'react'; -const contentStyle: React.CSSProperties = { +const contentStyle: CSSProperties = { justifyContent: 'space-between', display: 'flex', flexDirection: 'column', diff --git a/plugins/apache-spark/src/components/Overview/Overview.tsx b/plugins/apache-spark/src/components/Overview/Overview.tsx index 92d87f2..9f3ff58 100644 --- a/plugins/apache-spark/src/components/Overview/Overview.tsx +++ b/plugins/apache-spark/src/components/Overview/Overview.tsx @@ -1,6 +1,6 @@ import { Content, Header, HeaderLabel, Page } from '@backstage/core-components'; import { ApacheSparkOverviewTable } from '../ApacheSparkOverviewTable/ApacheSparkOverviewTable'; -import React from 'react'; + export const ApacheSparkOverviewPage = () => ( diff --git a/plugins/apache-spark/src/plugin.test.ts b/plugins/apache-spark/src/plugin.test.ts index adf309a..28feacd 100644 --- a/plugins/apache-spark/src/plugin.test.ts +++ b/plugins/apache-spark/src/plugin.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable jest/no-commented-out-tests */ // import { apacheSparkPlugin } from './plugin'; // // describe('apache-spark', () => { diff --git a/plugins/argo-workflows/.eslintignore b/plugins/argo-workflows/.eslintignore new file mode 100644 index 0000000..cc70e11 --- /dev/null +++ b/plugins/argo-workflows/.eslintignore @@ -0,0 +1 @@ +src/api/generated diff --git a/plugins/argo-workflows/dev/index.tsx b/plugins/argo-workflows/dev/index.tsx index 712176c..147fcf9 100644 --- a/plugins/argo-workflows/dev/index.tsx +++ b/plugins/argo-workflows/dev/index.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + import { createDevApp } from '@backstage/dev-utils'; import { argoWorkflowsPlugin, ArgoWorkflowsPage } from '../src/plugin'; diff --git a/plugins/argo-workflows/package.json b/plugins/argo-workflows/package.json index 0beb727..bbd7b3e 100644 --- a/plugins/argo-workflows/package.json +++ b/plugins/argo-workflows/package.json @@ -10,8 +10,12 @@ }, "typesVersions": { "*": { - "alpha": ["src/alpha.tsx"], - "package.json": ["package.json"] + "alpha": [ + "src/alpha.tsx" + ], + "package.json": [ + "package.json" + ] } }, "license": "Apache-2.0", @@ -35,11 +39,15 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { + "@backstage/catalog-model": "^1.7.7", "@backstage/core-components": "^0.18.8", "@backstage/core-plugin-api": "^1.12.4", "@backstage/frontend-plugin-api": "^0.15.1", + "@backstage/plugin-catalog-react": "^2.1.1", + "@backstage/plugin-kubernetes": "^0.12.17", "@backstage/theme": "^0.7.2", - "react-use": "^17.2.4" + "react-use": "^17.2.4", + "request": "^2.88.2" }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0" diff --git a/plugins/argo-workflows/src/alpha.tsx b/plugins/argo-workflows/src/alpha.tsx index 702aa14..f9cbbef 100644 --- a/plugins/argo-workflows/src/alpha.tsx +++ b/plugins/argo-workflows/src/alpha.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + import { createFrontendPlugin, PageBlueprint } from '@backstage/frontend-plugin-api'; /** diff --git a/plugins/argo-workflows/src/api/generated/api/apis.ts b/plugins/argo-workflows/src/api/generated/api/apis.ts index 547c881..603afb5 100644 --- a/plugins/argo-workflows/src/api/generated/api/apis.ts +++ b/plugins/argo-workflows/src/api/generated/api/apis.ts @@ -1,22 +1,31 @@ // @ts-nocheck export * from './archivedWorkflowServiceApi'; import { ArchivedWorkflowServiceApi } from './archivedWorkflowServiceApi'; + export * from './artifactServiceApi'; import { ArtifactServiceApi } from './artifactServiceApi'; + export * from './clusterWorkflowTemplateServiceApi'; import { ClusterWorkflowTemplateServiceApi } from './clusterWorkflowTemplateServiceApi'; + export * from './cronWorkflowServiceApi'; import { CronWorkflowServiceApi } from './cronWorkflowServiceApi'; + export * from './eventServiceApi'; import { EventServiceApi } from './eventServiceApi'; + export * from './eventSourceServiceApi'; import { EventSourceServiceApi } from './eventSourceServiceApi'; + export * from './infoServiceApi'; import { InfoServiceApi } from './infoServiceApi'; + export * from './sensorServiceApi'; import { SensorServiceApi } from './sensorServiceApi'; + export * from './workflowServiceApi'; import { WorkflowServiceApi } from './workflowServiceApi'; + export * from './workflowTemplateServiceApi'; import { WorkflowTemplateServiceApi } from './workflowTemplateServiceApi'; import * as http from 'http'; diff --git a/plugins/argo-workflows/src/api/generated/api/archivedWorkflowServiceApi.ts b/plugins/argo-workflows/src/api/generated/api/archivedWorkflowServiceApi.ts index 6062004..ad7a36b 100644 --- a/plugins/argo-workflows/src/api/generated/api/archivedWorkflowServiceApi.ts +++ b/plugins/argo-workflows/src/api/generated/api/archivedWorkflowServiceApi.ts @@ -16,7 +16,6 @@ import localVarRequest from 'request'; import http from 'http'; /* tslint:disable:no-unused-locals */ -import { GrpcGatewayRuntimeError } from '../model/grpcGatewayRuntimeError'; import { IoArgoprojWorkflowV1alpha1LabelKeys } from '../model/ioArgoprojWorkflowV1alpha1LabelKeys'; import { IoArgoprojWorkflowV1alpha1LabelValues } from '../model/ioArgoprojWorkflowV1alpha1LabelValues'; import { IoArgoprojWorkflowV1alpha1ResubmitArchivedWorkflowRequest } from '../model/ioArgoprojWorkflowV1alpha1ResubmitArchivedWorkflowRequest'; @@ -25,11 +24,11 @@ import { IoArgoprojWorkflowV1alpha1Workflow } from '../model/ioArgoprojWorkflowV import { IoArgoprojWorkflowV1alpha1WorkflowList } from '../model/ioArgoprojWorkflowV1alpha1WorkflowList'; import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models'; -import { HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth } from '../model/models'; +import { ApiKeyAuth } from '../model/models'; -import { HttpError, RequestFile } from './apis'; +import { HttpError } from './apis'; -let defaultBasePath = 'http://localhost:2746'; +const defaultBasePath = 'http://localhost:2746'; // =============================================== // This file is autogenerated - Please do not edit @@ -45,7 +44,7 @@ export class ArchivedWorkflowServiceApi { protected _useQuerystring : boolean = false; protected authentications = { - 'default': new VoidAuth(), + 'default': new VoidAuth() as Authentication, 'BearerToken': new ApiKeyAuth('header', 'Authorization'), } @@ -104,8 +103,8 @@ export class ArchivedWorkflowServiceApi { public async archivedWorkflowServiceDeleteArchivedWorkflow (uid: string, namespace?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: object; }> { const localVarPath = this.basePath + '/api/v1/archived-workflows/{uid}' .replace('{' + 'uid' + '}', encodeURIComponent(String(uid))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -113,7 +112,7 @@ export class ArchivedWorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'uid' is not null or undefined if (uid === null || uid === undefined) { @@ -121,14 +120,14 @@ export class ArchivedWorkflowServiceApi { } if (namespace !== undefined) { - localVarQueryParameters['namespace'] = ObjectSerializer.serialize(namespace, "string"); + localVarQueryParameters.namespace = ObjectSerializer.serialize(namespace, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'DELETE', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -151,7 +150,7 @@ export class ArchivedWorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -181,8 +180,8 @@ export class ArchivedWorkflowServiceApi { public async archivedWorkflowServiceGetArchivedWorkflow (uid: string, namespace?: string, name?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1Workflow; }> { const localVarPath = this.basePath + '/api/v1/archived-workflows/{uid}' .replace('{' + 'uid' + '}', encodeURIComponent(String(uid))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -190,7 +189,7 @@ export class ArchivedWorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'uid' is not null or undefined if (uid === null || uid === undefined) { @@ -198,18 +197,18 @@ export class ArchivedWorkflowServiceApi { } if (namespace !== undefined) { - localVarQueryParameters['namespace'] = ObjectSerializer.serialize(namespace, "string"); + localVarQueryParameters.namespace = ObjectSerializer.serialize(namespace, "string"); } if (name !== undefined) { - localVarQueryParameters['name'] = ObjectSerializer.serialize(name, "string"); + localVarQueryParameters.name = ObjectSerializer.serialize(name, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -232,7 +231,7 @@ export class ArchivedWorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -258,9 +257,9 @@ export class ArchivedWorkflowServiceApi { * @param namespace */ public async archivedWorkflowServiceListArchivedWorkflowLabelKeys (namespace?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1LabelKeys; }> { - const localVarPath = this.basePath + '/api/v1/archived-workflows-label-keys'; - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarPath = `${this.basePath }/api/v1/archived-workflows-label-keys`; + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -268,17 +267,17 @@ export class ArchivedWorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; if (namespace !== undefined) { - localVarQueryParameters['namespace'] = ObjectSerializer.serialize(namespace, "string"); + localVarQueryParameters.namespace = ObjectSerializer.serialize(namespace, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -301,7 +300,7 @@ export class ArchivedWorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -336,9 +335,9 @@ export class ArchivedWorkflowServiceApi { * @param namespace */ public async archivedWorkflowServiceListArchivedWorkflowLabelValues (listOptionsLabelSelector?: string, listOptionsFieldSelector?: string, listOptionsWatch?: boolean, listOptionsAllowWatchBookmarks?: boolean, listOptionsResourceVersion?: string, listOptionsResourceVersionMatch?: string, listOptionsTimeoutSeconds?: string, listOptionsLimit?: string, listOptionsContinue?: string, namespace?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1LabelValues; }> { - const localVarPath = this.basePath + '/api/v1/archived-workflows-label-values'; - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarPath = `${this.basePath }/api/v1/archived-workflows-label-values`; + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -346,7 +345,7 @@ export class ArchivedWorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; if (listOptionsLabelSelector !== undefined) { localVarQueryParameters['listOptions.labelSelector'] = ObjectSerializer.serialize(listOptionsLabelSelector, "string"); @@ -385,14 +384,14 @@ export class ArchivedWorkflowServiceApi { } if (namespace !== undefined) { - localVarQueryParameters['namespace'] = ObjectSerializer.serialize(namespace, "string"); + localVarQueryParameters.namespace = ObjectSerializer.serialize(namespace, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -415,7 +414,7 @@ export class ArchivedWorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -451,9 +450,9 @@ export class ArchivedWorkflowServiceApi { * @param namespace */ public async archivedWorkflowServiceListArchivedWorkflows (listOptionsLabelSelector?: string, listOptionsFieldSelector?: string, listOptionsWatch?: boolean, listOptionsAllowWatchBookmarks?: boolean, listOptionsResourceVersion?: string, listOptionsResourceVersionMatch?: string, listOptionsTimeoutSeconds?: string, listOptionsLimit?: string, listOptionsContinue?: string, namePrefix?: string, namespace?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1WorkflowList; }> { - const localVarPath = this.basePath + '/api/v1/archived-workflows'; - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarPath = `${this.basePath }/api/v1/archived-workflows`; + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -461,7 +460,7 @@ export class ArchivedWorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; if (listOptionsLabelSelector !== undefined) { localVarQueryParameters['listOptions.labelSelector'] = ObjectSerializer.serialize(listOptionsLabelSelector, "string"); @@ -500,18 +499,18 @@ export class ArchivedWorkflowServiceApi { } if (namePrefix !== undefined) { - localVarQueryParameters['namePrefix'] = ObjectSerializer.serialize(namePrefix, "string"); + localVarQueryParameters.namePrefix = ObjectSerializer.serialize(namePrefix, "string"); } if (namespace !== undefined) { - localVarQueryParameters['namespace'] = ObjectSerializer.serialize(namespace, "string"); + localVarQueryParameters.namespace = ObjectSerializer.serialize(namespace, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -534,7 +533,7 @@ export class ArchivedWorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -563,8 +562,8 @@ export class ArchivedWorkflowServiceApi { public async archivedWorkflowServiceResubmitArchivedWorkflow (uid: string, body: IoArgoprojWorkflowV1alpha1ResubmitArchivedWorkflowRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1Workflow; }> { const localVarPath = this.basePath + '/api/v1/archived-workflows/{uid}/resubmit' .replace('{' + 'uid' + '}', encodeURIComponent(String(uid))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -572,7 +571,7 @@ export class ArchivedWorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'uid' is not null or undefined if (uid === null || uid === undefined) { @@ -584,11 +583,11 @@ export class ArchivedWorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling archivedWorkflowServiceResubmitArchivedWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -612,7 +611,7 @@ export class ArchivedWorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -641,8 +640,8 @@ export class ArchivedWorkflowServiceApi { public async archivedWorkflowServiceRetryArchivedWorkflow (uid: string, body: IoArgoprojWorkflowV1alpha1RetryArchivedWorkflowRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1Workflow; }> { const localVarPath = this.basePath + '/api/v1/archived-workflows/{uid}/retry' .replace('{' + 'uid' + '}', encodeURIComponent(String(uid))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -650,7 +649,7 @@ export class ArchivedWorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'uid' is not null or undefined if (uid === null || uid === undefined) { @@ -662,11 +661,11 @@ export class ArchivedWorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling archivedWorkflowServiceRetryArchivedWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -690,7 +689,7 @@ export class ArchivedWorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } diff --git a/plugins/argo-workflows/src/api/generated/api/artifactServiceApi.ts b/plugins/argo-workflows/src/api/generated/api/artifactServiceApi.ts index 542938d..1891454 100644 --- a/plugins/argo-workflows/src/api/generated/api/artifactServiceApi.ts +++ b/plugins/argo-workflows/src/api/generated/api/artifactServiceApi.ts @@ -16,14 +16,13 @@ import localVarRequest from 'request'; import http from 'http'; /* tslint:disable:no-unused-locals */ -import { GrpcGatewayRuntimeError } from '../model/grpcGatewayRuntimeError'; import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models'; -import { HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth } from '../model/models'; +import { ApiKeyAuth } from '../model/models'; -import { HttpError, RequestFile } from './apis'; +import { HttpError } from './apis'; -let defaultBasePath = 'http://localhost:2746'; +const defaultBasePath = 'http://localhost:2746'; // =============================================== // This file is autogenerated - Please do not edit @@ -39,7 +38,7 @@ export class ArtifactServiceApi { protected _useQuerystring : boolean = false; protected authentications = { - 'default': new VoidAuth(), + 'default': new VoidAuth() as Authentication, 'BearerToken': new ApiKeyAuth('header', 'Authorization'), } @@ -108,8 +107,8 @@ export class ArtifactServiceApi { .replace('{' + 'nodeId' + '}', encodeURIComponent(String(nodeId))) .replace('{' + 'artifactName' + '}', encodeURIComponent(String(artifactName))) .replace('{' + 'artifactDiscriminator' + '}', encodeURIComponent(String(artifactDiscriminator))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -117,7 +116,7 @@ export class ArtifactServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -149,11 +148,11 @@ export class ArtifactServiceApi { throw new Error('Required parameter artifactDiscriminator was null or undefined when calling artifactServiceGetArtifactFile.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -176,7 +175,7 @@ export class ArtifactServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -211,8 +210,8 @@ export class ArtifactServiceApi { .replace('{' + 'name' + '}', encodeURIComponent(String(name))) .replace('{' + 'nodeId' + '}', encodeURIComponent(String(nodeId))) .replace('{' + 'artifactName' + '}', encodeURIComponent(String(artifactName))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -220,7 +219,7 @@ export class ArtifactServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -242,11 +241,11 @@ export class ArtifactServiceApi { throw new Error('Required parameter artifactName was null or undefined when calling artifactServiceGetInputArtifact.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -269,7 +268,7 @@ export class ArtifactServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -302,8 +301,8 @@ export class ArtifactServiceApi { .replace('{' + 'uid' + '}', encodeURIComponent(String(uid))) .replace('{' + 'nodeId' + '}', encodeURIComponent(String(nodeId))) .replace('{' + 'artifactName' + '}', encodeURIComponent(String(artifactName))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -311,7 +310,7 @@ export class ArtifactServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'uid' is not null or undefined if (uid === null || uid === undefined) { @@ -328,11 +327,11 @@ export class ArtifactServiceApi { throw new Error('Required parameter artifactName was null or undefined when calling artifactServiceGetInputArtifactByUID.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -355,7 +354,7 @@ export class ArtifactServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -390,8 +389,8 @@ export class ArtifactServiceApi { .replace('{' + 'name' + '}', encodeURIComponent(String(name))) .replace('{' + 'nodeId' + '}', encodeURIComponent(String(nodeId))) .replace('{' + 'artifactName' + '}', encodeURIComponent(String(artifactName))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -399,7 +398,7 @@ export class ArtifactServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -421,11 +420,11 @@ export class ArtifactServiceApi { throw new Error('Required parameter artifactName was null or undefined when calling artifactServiceGetOutputArtifact.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -448,7 +447,7 @@ export class ArtifactServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -481,8 +480,8 @@ export class ArtifactServiceApi { .replace('{' + 'uid' + '}', encodeURIComponent(String(uid))) .replace('{' + 'nodeId' + '}', encodeURIComponent(String(nodeId))) .replace('{' + 'artifactName' + '}', encodeURIComponent(String(artifactName))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -490,7 +489,7 @@ export class ArtifactServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'uid' is not null or undefined if (uid === null || uid === undefined) { @@ -507,11 +506,11 @@ export class ArtifactServiceApi { throw new Error('Required parameter artifactName was null or undefined when calling artifactServiceGetOutputArtifactByUID.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -534,7 +533,7 @@ export class ArtifactServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } diff --git a/plugins/argo-workflows/src/api/generated/api/clusterWorkflowTemplateServiceApi.ts b/plugins/argo-workflows/src/api/generated/api/clusterWorkflowTemplateServiceApi.ts index 9fbb932..4d47a2e 100644 --- a/plugins/argo-workflows/src/api/generated/api/clusterWorkflowTemplateServiceApi.ts +++ b/plugins/argo-workflows/src/api/generated/api/clusterWorkflowTemplateServiceApi.ts @@ -16,7 +16,6 @@ import localVarRequest from 'request'; import http from 'http'; /* tslint:disable:no-unused-locals */ -import { GrpcGatewayRuntimeError } from '../model/grpcGatewayRuntimeError'; import { IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplate } from '../model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplate'; import { IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplateCreateRequest } from '../model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateCreateRequest'; import { IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplateLintRequest } from '../model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateLintRequest'; @@ -24,11 +23,11 @@ import { IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplateList } from '../model/ import { IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplateUpdateRequest } from '../model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateUpdateRequest'; import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models'; -import { HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth } from '../model/models'; +import { ApiKeyAuth } from '../model/models'; -import { HttpError, RequestFile } from './apis'; +import { HttpError } from './apis'; -let defaultBasePath = 'http://localhost:2746'; +const defaultBasePath = 'http://localhost:2746'; // =============================================== // This file is autogenerated - Please do not edit @@ -44,7 +43,7 @@ export class ClusterWorkflowTemplateServiceApi { protected _useQuerystring : boolean = false; protected authentications = { - 'default': new VoidAuth(), + 'default': new VoidAuth() as Authentication, 'BearerToken': new ApiKeyAuth('header', 'Authorization'), } @@ -100,9 +99,9 @@ export class ClusterWorkflowTemplateServiceApi { * @param body */ public async clusterWorkflowTemplateServiceCreateClusterWorkflowTemplate (body: IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplateCreateRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplate; }> { - const localVarPath = this.basePath + '/api/v1/cluster-workflow-templates'; - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarPath = `${this.basePath }/api/v1/cluster-workflow-templates`; + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -110,18 +109,18 @@ export class ClusterWorkflowTemplateServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'body' is not null or undefined if (body === null || body === undefined) { throw new Error('Required parameter body was null or undefined when calling clusterWorkflowTemplateServiceCreateClusterWorkflowTemplate.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'POST', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -145,7 +144,7 @@ export class ClusterWorkflowTemplateServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -179,8 +178,8 @@ export class ClusterWorkflowTemplateServiceApi { public async clusterWorkflowTemplateServiceDeleteClusterWorkflowTemplate (name: string, deleteOptionsGracePeriodSeconds?: string, deleteOptionsPreconditionsUid?: string, deleteOptionsPreconditionsResourceVersion?: string, deleteOptionsOrphanDependents?: boolean, deleteOptionsPropagationPolicy?: string, deleteOptionsDryRun?: Array, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: object; }> { const localVarPath = this.basePath + '/api/v1/cluster-workflow-templates/{name}' .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -188,7 +187,7 @@ export class ClusterWorkflowTemplateServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'name' is not null or undefined if (name === null || name === undefined) { @@ -219,11 +218,11 @@ export class ClusterWorkflowTemplateServiceApi { localVarQueryParameters['deleteOptions.dryRun'] = ObjectSerializer.serialize(deleteOptionsDryRun, "Array"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'DELETE', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -246,7 +245,7 @@ export class ClusterWorkflowTemplateServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -275,8 +274,8 @@ export class ClusterWorkflowTemplateServiceApi { public async clusterWorkflowTemplateServiceGetClusterWorkflowTemplate (name: string, getOptionsResourceVersion?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplate; }> { const localVarPath = this.basePath + '/api/v1/cluster-workflow-templates/{name}' .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -284,7 +283,7 @@ export class ClusterWorkflowTemplateServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'name' is not null or undefined if (name === null || name === undefined) { @@ -295,11 +294,11 @@ export class ClusterWorkflowTemplateServiceApi { localVarQueryParameters['getOptions.resourceVersion'] = ObjectSerializer.serialize(getOptionsResourceVersion, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -322,7 +321,7 @@ export class ClusterWorkflowTemplateServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -348,9 +347,9 @@ export class ClusterWorkflowTemplateServiceApi { * @param body */ public async clusterWorkflowTemplateServiceLintClusterWorkflowTemplate (body: IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplateLintRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplate; }> { - const localVarPath = this.basePath + '/api/v1/cluster-workflow-templates/lint'; - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarPath = `${this.basePath }/api/v1/cluster-workflow-templates/lint`; + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -358,18 +357,18 @@ export class ClusterWorkflowTemplateServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'body' is not null or undefined if (body === null || body === undefined) { throw new Error('Required parameter body was null or undefined when calling clusterWorkflowTemplateServiceLintClusterWorkflowTemplate.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'POST', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -393,7 +392,7 @@ export class ClusterWorkflowTemplateServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -427,9 +426,9 @@ export class ClusterWorkflowTemplateServiceApi { * @param listOptionsContinue The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\". This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications. */ public async clusterWorkflowTemplateServiceListClusterWorkflowTemplates (listOptionsLabelSelector?: string, listOptionsFieldSelector?: string, listOptionsWatch?: boolean, listOptionsAllowWatchBookmarks?: boolean, listOptionsResourceVersion?: string, listOptionsResourceVersionMatch?: string, listOptionsTimeoutSeconds?: string, listOptionsLimit?: string, listOptionsContinue?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplateList; }> { - const localVarPath = this.basePath + '/api/v1/cluster-workflow-templates'; - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarPath = `${this.basePath }/api/v1/cluster-workflow-templates`; + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -437,7 +436,7 @@ export class ClusterWorkflowTemplateServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; if (listOptionsLabelSelector !== undefined) { localVarQueryParameters['listOptions.labelSelector'] = ObjectSerializer.serialize(listOptionsLabelSelector, "string"); @@ -475,11 +474,11 @@ export class ClusterWorkflowTemplateServiceApi { localVarQueryParameters['listOptions.continue'] = ObjectSerializer.serialize(listOptionsContinue, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -502,7 +501,7 @@ export class ClusterWorkflowTemplateServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -531,8 +530,8 @@ export class ClusterWorkflowTemplateServiceApi { public async clusterWorkflowTemplateServiceUpdateClusterWorkflowTemplate (name: string, body: IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplateUpdateRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplate; }> { const localVarPath = this.basePath + '/api/v1/cluster-workflow-templates/{name}' .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -540,7 +539,7 @@ export class ClusterWorkflowTemplateServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'name' is not null or undefined if (name === null || name === undefined) { @@ -552,11 +551,11 @@ export class ClusterWorkflowTemplateServiceApi { throw new Error('Required parameter body was null or undefined when calling clusterWorkflowTemplateServiceUpdateClusterWorkflowTemplate.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -580,7 +579,7 @@ export class ClusterWorkflowTemplateServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } diff --git a/plugins/argo-workflows/src/api/generated/api/cronWorkflowServiceApi.ts b/plugins/argo-workflows/src/api/generated/api/cronWorkflowServiceApi.ts index 04a1337..ed7f00a 100644 --- a/plugins/argo-workflows/src/api/generated/api/cronWorkflowServiceApi.ts +++ b/plugins/argo-workflows/src/api/generated/api/cronWorkflowServiceApi.ts @@ -16,7 +16,6 @@ import localVarRequest from 'request'; import http from 'http'; /* tslint:disable:no-unused-locals */ -import { GrpcGatewayRuntimeError } from '../model/grpcGatewayRuntimeError'; import { IoArgoprojWorkflowV1alpha1CreateCronWorkflowRequest } from '../model/ioArgoprojWorkflowV1alpha1CreateCronWorkflowRequest'; import { IoArgoprojWorkflowV1alpha1CronWorkflow } from '../model/ioArgoprojWorkflowV1alpha1CronWorkflow'; import { IoArgoprojWorkflowV1alpha1CronWorkflowList } from '../model/ioArgoprojWorkflowV1alpha1CronWorkflowList'; @@ -26,11 +25,11 @@ import { IoArgoprojWorkflowV1alpha1LintCronWorkflowRequest } from '../model/ioAr import { IoArgoprojWorkflowV1alpha1UpdateCronWorkflowRequest } from '../model/ioArgoprojWorkflowV1alpha1UpdateCronWorkflowRequest'; import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models'; -import { HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth } from '../model/models'; +import { ApiKeyAuth } from '../model/models'; -import { HttpError, RequestFile } from './apis'; +import { HttpError } from './apis'; -let defaultBasePath = 'http://localhost:2746'; +const defaultBasePath = 'http://localhost:2746'; // =============================================== // This file is autogenerated - Please do not edit @@ -46,7 +45,7 @@ export class CronWorkflowServiceApi { protected _useQuerystring : boolean = false; protected authentications = { - 'default': new VoidAuth(), + 'default': new VoidAuth() as Authentication, 'BearerToken': new ApiKeyAuth('header', 'Authorization'), } @@ -105,8 +104,8 @@ export class CronWorkflowServiceApi { public async cronWorkflowServiceCreateCronWorkflow (namespace: string, body: IoArgoprojWorkflowV1alpha1CreateCronWorkflowRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1CronWorkflow; }> { const localVarPath = this.basePath + '/api/v1/cron-workflows/{namespace}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -114,7 +113,7 @@ export class CronWorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -126,11 +125,11 @@ export class CronWorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling cronWorkflowServiceCreateCronWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'POST', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -154,7 +153,7 @@ export class CronWorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -190,8 +189,8 @@ export class CronWorkflowServiceApi { const localVarPath = this.basePath + '/api/v1/cron-workflows/{namespace}/{name}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -199,7 +198,7 @@ export class CronWorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -235,11 +234,11 @@ export class CronWorkflowServiceApi { localVarQueryParameters['deleteOptions.dryRun'] = ObjectSerializer.serialize(deleteOptionsDryRun, "Array"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'DELETE', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -262,7 +261,7 @@ export class CronWorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -293,8 +292,8 @@ export class CronWorkflowServiceApi { const localVarPath = this.basePath + '/api/v1/cron-workflows/{namespace}/{name}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -302,7 +301,7 @@ export class CronWorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -318,11 +317,11 @@ export class CronWorkflowServiceApi { localVarQueryParameters['getOptions.resourceVersion'] = ObjectSerializer.serialize(getOptionsResourceVersion, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -345,7 +344,7 @@ export class CronWorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -374,8 +373,8 @@ export class CronWorkflowServiceApi { public async cronWorkflowServiceLintCronWorkflow (namespace: string, body: IoArgoprojWorkflowV1alpha1LintCronWorkflowRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1CronWorkflow; }> { const localVarPath = this.basePath + '/api/v1/cron-workflows/{namespace}/lint' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -383,7 +382,7 @@ export class CronWorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -395,11 +394,11 @@ export class CronWorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling cronWorkflowServiceLintCronWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'POST', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -423,7 +422,7 @@ export class CronWorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -460,8 +459,8 @@ export class CronWorkflowServiceApi { public async cronWorkflowServiceListCronWorkflows (namespace: string, listOptionsLabelSelector?: string, listOptionsFieldSelector?: string, listOptionsWatch?: boolean, listOptionsAllowWatchBookmarks?: boolean, listOptionsResourceVersion?: string, listOptionsResourceVersionMatch?: string, listOptionsTimeoutSeconds?: string, listOptionsLimit?: string, listOptionsContinue?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1CronWorkflowList; }> { const localVarPath = this.basePath + '/api/v1/cron-workflows/{namespace}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -469,7 +468,7 @@ export class CronWorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -512,11 +511,11 @@ export class CronWorkflowServiceApi { localVarQueryParameters['listOptions.continue'] = ObjectSerializer.serialize(listOptionsContinue, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -539,7 +538,7 @@ export class CronWorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -570,8 +569,8 @@ export class CronWorkflowServiceApi { const localVarPath = this.basePath + '/api/v1/cron-workflows/{namespace}/{name}/resume' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -579,7 +578,7 @@ export class CronWorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -596,11 +595,11 @@ export class CronWorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling cronWorkflowServiceResumeCronWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -624,7 +623,7 @@ export class CronWorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -655,8 +654,8 @@ export class CronWorkflowServiceApi { const localVarPath = this.basePath + '/api/v1/cron-workflows/{namespace}/{name}/suspend' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -664,7 +663,7 @@ export class CronWorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -681,11 +680,11 @@ export class CronWorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling cronWorkflowServiceSuspendCronWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -709,7 +708,7 @@ export class CronWorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -740,8 +739,8 @@ export class CronWorkflowServiceApi { const localVarPath = this.basePath + '/api/v1/cron-workflows/{namespace}/{name}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -749,7 +748,7 @@ export class CronWorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -766,11 +765,11 @@ export class CronWorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling cronWorkflowServiceUpdateCronWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -794,7 +793,7 @@ export class CronWorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } diff --git a/plugins/argo-workflows/src/api/generated/api/eventServiceApi.ts b/plugins/argo-workflows/src/api/generated/api/eventServiceApi.ts index 35f123c..67f7354 100644 --- a/plugins/argo-workflows/src/api/generated/api/eventServiceApi.ts +++ b/plugins/argo-workflows/src/api/generated/api/eventServiceApi.ts @@ -16,15 +16,14 @@ import localVarRequest from 'request'; import http from 'http'; /* tslint:disable:no-unused-locals */ -import { GrpcGatewayRuntimeError } from '../model/grpcGatewayRuntimeError'; import { IoArgoprojWorkflowV1alpha1WorkflowEventBindingList } from '../model/ioArgoprojWorkflowV1alpha1WorkflowEventBindingList'; import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models'; -import { HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth } from '../model/models'; +import { ApiKeyAuth } from '../model/models'; -import { HttpError, RequestFile } from './apis'; +import { HttpError } from './apis'; -let defaultBasePath = 'http://localhost:2746'; +const defaultBasePath = 'http://localhost:2746'; // =============================================== // This file is autogenerated - Please do not edit @@ -40,7 +39,7 @@ export class EventServiceApi { protected _useQuerystring : boolean = false; protected authentications = { - 'default': new VoidAuth(), + 'default': new VoidAuth() as Authentication, 'BearerToken': new ApiKeyAuth('header', 'Authorization'), } @@ -107,8 +106,8 @@ export class EventServiceApi { public async eventServiceListWorkflowEventBindings (namespace: string, listOptionsLabelSelector?: string, listOptionsFieldSelector?: string, listOptionsWatch?: boolean, listOptionsAllowWatchBookmarks?: boolean, listOptionsResourceVersion?: string, listOptionsResourceVersionMatch?: string, listOptionsTimeoutSeconds?: string, listOptionsLimit?: string, listOptionsContinue?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1WorkflowEventBindingList; }> { const localVarPath = this.basePath + '/api/v1/workflow-event-bindings/{namespace}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -116,7 +115,7 @@ export class EventServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -159,11 +158,11 @@ export class EventServiceApi { localVarQueryParameters['listOptions.continue'] = ObjectSerializer.serialize(listOptionsContinue, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -186,7 +185,7 @@ export class EventServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -217,8 +216,8 @@ export class EventServiceApi { const localVarPath = this.basePath + '/api/v1/events/{namespace}/{discriminator}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'discriminator' + '}', encodeURIComponent(String(discriminator))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -226,7 +225,7 @@ export class EventServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -243,11 +242,11 @@ export class EventServiceApi { throw new Error('Required parameter body was null or undefined when calling eventServiceReceiveEvent.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'POST', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -271,7 +270,7 @@ export class EventServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } diff --git a/plugins/argo-workflows/src/api/generated/api/eventSourceServiceApi.ts b/plugins/argo-workflows/src/api/generated/api/eventSourceServiceApi.ts index b0526eb..44b0ce0 100644 --- a/plugins/argo-workflows/src/api/generated/api/eventSourceServiceApi.ts +++ b/plugins/argo-workflows/src/api/generated/api/eventSourceServiceApi.ts @@ -18,18 +18,17 @@ import http from 'http'; /* tslint:disable:no-unused-locals */ import { EventsourceCreateEventSourceRequest } from '../model/eventsourceCreateEventSourceRequest'; import { EventsourceUpdateEventSourceRequest } from '../model/eventsourceUpdateEventSourceRequest'; -import { GrpcGatewayRuntimeError } from '../model/grpcGatewayRuntimeError'; import { IoArgoprojEventsV1alpha1EventSource } from '../model/ioArgoprojEventsV1alpha1EventSource'; import { IoArgoprojEventsV1alpha1EventSourceList } from '../model/ioArgoprojEventsV1alpha1EventSourceList'; import { StreamResultOfEventsourceEventSourceWatchEvent } from '../model/streamResultOfEventsourceEventSourceWatchEvent'; import { StreamResultOfEventsourceLogEntry } from '../model/streamResultOfEventsourceLogEntry'; import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models'; -import { HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth } from '../model/models'; +import { ApiKeyAuth } from '../model/models'; -import { HttpError, RequestFile } from './apis'; +import { HttpError } from './apis'; -let defaultBasePath = 'http://localhost:2746'; +const defaultBasePath = 'http://localhost:2746'; // =============================================== // This file is autogenerated - Please do not edit @@ -45,7 +44,7 @@ export class EventSourceServiceApi { protected _useQuerystring : boolean = false; protected authentications = { - 'default': new VoidAuth(), + 'default': new VoidAuth() as Authentication, 'BearerToken': new ApiKeyAuth('header', 'Authorization'), } @@ -104,8 +103,8 @@ export class EventSourceServiceApi { public async eventSourceServiceCreateEventSource (namespace: string, body: EventsourceCreateEventSourceRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojEventsV1alpha1EventSource; }> { const localVarPath = this.basePath + '/api/v1/event-sources/{namespace}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -113,7 +112,7 @@ export class EventSourceServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -125,11 +124,11 @@ export class EventSourceServiceApi { throw new Error('Required parameter body was null or undefined when calling eventSourceServiceCreateEventSource.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'POST', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -153,7 +152,7 @@ export class EventSourceServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -189,8 +188,8 @@ export class EventSourceServiceApi { const localVarPath = this.basePath + '/api/v1/event-sources/{namespace}/{name}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -198,7 +197,7 @@ export class EventSourceServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -234,11 +233,11 @@ export class EventSourceServiceApi { localVarQueryParameters['deleteOptions.dryRun'] = ObjectSerializer.serialize(deleteOptionsDryRun, "Array"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'DELETE', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -261,7 +260,7 @@ export class EventSourceServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -303,8 +302,8 @@ export class EventSourceServiceApi { public async eventSourceServiceEventSourcesLogs (namespace: string, name?: string, eventSourceType?: string, eventName?: string, grep?: string, podLogOptionsContainer?: string, podLogOptionsFollow?: boolean, podLogOptionsPrevious?: boolean, podLogOptionsSinceSeconds?: string, podLogOptionsSinceTimeSeconds?: string, podLogOptionsSinceTimeNanos?: number, podLogOptionsTimestamps?: boolean, podLogOptionsTailLines?: string, podLogOptionsLimitBytes?: string, podLogOptionsInsecureSkipTLSVerifyBackend?: boolean, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: StreamResultOfEventsourceLogEntry; }> { const localVarPath = this.basePath + '/api/v1/stream/event-sources/{namespace}/logs' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -312,7 +311,7 @@ export class EventSourceServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -320,19 +319,19 @@ export class EventSourceServiceApi { } if (name !== undefined) { - localVarQueryParameters['name'] = ObjectSerializer.serialize(name, "string"); + localVarQueryParameters.name = ObjectSerializer.serialize(name, "string"); } if (eventSourceType !== undefined) { - localVarQueryParameters['eventSourceType'] = ObjectSerializer.serialize(eventSourceType, "string"); + localVarQueryParameters.eventSourceType = ObjectSerializer.serialize(eventSourceType, "string"); } if (eventName !== undefined) { - localVarQueryParameters['eventName'] = ObjectSerializer.serialize(eventName, "string"); + localVarQueryParameters.eventName = ObjectSerializer.serialize(eventName, "string"); } if (grep !== undefined) { - localVarQueryParameters['grep'] = ObjectSerializer.serialize(grep, "string"); + localVarQueryParameters.grep = ObjectSerializer.serialize(grep, "string"); } if (podLogOptionsContainer !== undefined) { @@ -375,11 +374,11 @@ export class EventSourceServiceApi { localVarQueryParameters['podLogOptions.insecureSkipTLSVerifyBackend'] = ObjectSerializer.serialize(podLogOptionsInsecureSkipTLSVerifyBackend, "boolean"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -402,7 +401,7 @@ export class EventSourceServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -432,8 +431,8 @@ export class EventSourceServiceApi { const localVarPath = this.basePath + '/api/v1/event-sources/{namespace}/{name}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -441,7 +440,7 @@ export class EventSourceServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -453,11 +452,11 @@ export class EventSourceServiceApi { throw new Error('Required parameter name was null or undefined when calling eventSourceServiceGetEventSource.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -480,7 +479,7 @@ export class EventSourceServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -517,8 +516,8 @@ export class EventSourceServiceApi { public async eventSourceServiceListEventSources (namespace: string, listOptionsLabelSelector?: string, listOptionsFieldSelector?: string, listOptionsWatch?: boolean, listOptionsAllowWatchBookmarks?: boolean, listOptionsResourceVersion?: string, listOptionsResourceVersionMatch?: string, listOptionsTimeoutSeconds?: string, listOptionsLimit?: string, listOptionsContinue?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojEventsV1alpha1EventSourceList; }> { const localVarPath = this.basePath + '/api/v1/event-sources/{namespace}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -526,7 +525,7 @@ export class EventSourceServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -569,11 +568,11 @@ export class EventSourceServiceApi { localVarQueryParameters['listOptions.continue'] = ObjectSerializer.serialize(listOptionsContinue, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -596,7 +595,7 @@ export class EventSourceServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -627,8 +626,8 @@ export class EventSourceServiceApi { const localVarPath = this.basePath + '/api/v1/event-sources/{namespace}/{name}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -636,7 +635,7 @@ export class EventSourceServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -653,11 +652,11 @@ export class EventSourceServiceApi { throw new Error('Required parameter body was null or undefined when calling eventSourceServiceUpdateEventSource.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -681,7 +680,7 @@ export class EventSourceServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -718,8 +717,8 @@ export class EventSourceServiceApi { public async eventSourceServiceWatchEventSources (namespace: string, listOptionsLabelSelector?: string, listOptionsFieldSelector?: string, listOptionsWatch?: boolean, listOptionsAllowWatchBookmarks?: boolean, listOptionsResourceVersion?: string, listOptionsResourceVersionMatch?: string, listOptionsTimeoutSeconds?: string, listOptionsLimit?: string, listOptionsContinue?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: StreamResultOfEventsourceEventSourceWatchEvent; }> { const localVarPath = this.basePath + '/api/v1/stream/event-sources/{namespace}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -727,7 +726,7 @@ export class EventSourceServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -770,11 +769,11 @@ export class EventSourceServiceApi { localVarQueryParameters['listOptions.continue'] = ObjectSerializer.serialize(listOptionsContinue, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -797,7 +796,7 @@ export class EventSourceServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } diff --git a/plugins/argo-workflows/src/api/generated/api/infoServiceApi.ts b/plugins/argo-workflows/src/api/generated/api/infoServiceApi.ts index e9af56c..66e491a 100644 --- a/plugins/argo-workflows/src/api/generated/api/infoServiceApi.ts +++ b/plugins/argo-workflows/src/api/generated/api/infoServiceApi.ts @@ -16,18 +16,17 @@ import localVarRequest from 'request'; import http from 'http'; /* tslint:disable:no-unused-locals */ -import { GrpcGatewayRuntimeError } from '../model/grpcGatewayRuntimeError'; import { IoArgoprojWorkflowV1alpha1CollectEventRequest } from '../model/ioArgoprojWorkflowV1alpha1CollectEventRequest'; import { IoArgoprojWorkflowV1alpha1GetUserInfoResponse } from '../model/ioArgoprojWorkflowV1alpha1GetUserInfoResponse'; import { IoArgoprojWorkflowV1alpha1InfoResponse } from '../model/ioArgoprojWorkflowV1alpha1InfoResponse'; import { IoArgoprojWorkflowV1alpha1Version } from '../model/ioArgoprojWorkflowV1alpha1Version'; import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models'; -import { HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth } from '../model/models'; +import { ApiKeyAuth } from '../model/models'; -import { HttpError, RequestFile } from './apis'; +import { HttpError } from './apis'; -let defaultBasePath = 'http://localhost:2746'; +const defaultBasePath = 'http://localhost:2746'; // =============================================== // This file is autogenerated - Please do not edit @@ -43,7 +42,7 @@ export class InfoServiceApi { protected _useQuerystring : boolean = false; protected authentications = { - 'default': new VoidAuth(), + 'default': new VoidAuth() as Authentication, 'BearerToken': new ApiKeyAuth('header', 'Authorization'), } @@ -99,9 +98,9 @@ export class InfoServiceApi { * @param body */ public async infoServiceCollectEvent (body: IoArgoprojWorkflowV1alpha1CollectEventRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: object; }> { - const localVarPath = this.basePath + '/api/v1/tracking/event'; - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarPath = `${this.basePath }/api/v1/tracking/event`; + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -109,18 +108,18 @@ export class InfoServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'body' is not null or undefined if (body === null || body === undefined) { throw new Error('Required parameter body was null or undefined when calling infoServiceCollectEvent.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'POST', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -144,7 +143,7 @@ export class InfoServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -169,9 +168,9 @@ export class InfoServiceApi { * */ public async infoServiceGetInfo (options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1InfoResponse; }> { - const localVarPath = this.basePath + '/api/v1/info'; - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarPath = `${this.basePath }/api/v1/info`; + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -179,13 +178,13 @@ export class InfoServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -208,7 +207,7 @@ export class InfoServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -233,9 +232,9 @@ export class InfoServiceApi { * */ public async infoServiceGetUserInfo (options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1GetUserInfoResponse; }> { - const localVarPath = this.basePath + '/api/v1/userinfo'; - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarPath = `${this.basePath }/api/v1/userinfo`; + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -243,13 +242,13 @@ export class InfoServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -272,7 +271,7 @@ export class InfoServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -297,9 +296,9 @@ export class InfoServiceApi { * */ public async infoServiceGetVersion (options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1Version; }> { - const localVarPath = this.basePath + '/api/v1/version'; - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarPath = `${this.basePath }/api/v1/version`; + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -307,13 +306,13 @@ export class InfoServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -336,7 +335,7 @@ export class InfoServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } diff --git a/plugins/argo-workflows/src/api/generated/api/sensorServiceApi.ts b/plugins/argo-workflows/src/api/generated/api/sensorServiceApi.ts index 7e5f0ad..0d33142 100644 --- a/plugins/argo-workflows/src/api/generated/api/sensorServiceApi.ts +++ b/plugins/argo-workflows/src/api/generated/api/sensorServiceApi.ts @@ -16,7 +16,6 @@ import localVarRequest from 'request'; import http from 'http'; /* tslint:disable:no-unused-locals */ -import { GrpcGatewayRuntimeError } from '../model/grpcGatewayRuntimeError'; import { IoArgoprojEventsV1alpha1Sensor } from '../model/ioArgoprojEventsV1alpha1Sensor'; import { IoArgoprojEventsV1alpha1SensorList } from '../model/ioArgoprojEventsV1alpha1SensorList'; import { SensorCreateSensorRequest } from '../model/sensorCreateSensorRequest'; @@ -25,11 +24,11 @@ import { StreamResultOfSensorLogEntry } from '../model/streamResultOfSensorLogEn import { StreamResultOfSensorSensorWatchEvent } from '../model/streamResultOfSensorSensorWatchEvent'; import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models'; -import { HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth } from '../model/models'; +import { ApiKeyAuth } from '../model/models'; -import { HttpError, RequestFile } from './apis'; +import { HttpError } from './apis'; -let defaultBasePath = 'http://localhost:2746'; +const defaultBasePath = 'http://localhost:2746'; // =============================================== // This file is autogenerated - Please do not edit @@ -45,7 +44,7 @@ export class SensorServiceApi { protected _useQuerystring : boolean = false; protected authentications = { - 'default': new VoidAuth(), + 'default': new VoidAuth() as Authentication, 'BearerToken': new ApiKeyAuth('header', 'Authorization'), } @@ -104,8 +103,8 @@ export class SensorServiceApi { public async sensorServiceCreateSensor (namespace: string, body: SensorCreateSensorRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojEventsV1alpha1Sensor; }> { const localVarPath = this.basePath + '/api/v1/sensors/{namespace}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -113,7 +112,7 @@ export class SensorServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -125,11 +124,11 @@ export class SensorServiceApi { throw new Error('Required parameter body was null or undefined when calling sensorServiceCreateSensor.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'POST', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -153,7 +152,7 @@ export class SensorServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -189,8 +188,8 @@ export class SensorServiceApi { const localVarPath = this.basePath + '/api/v1/sensors/{namespace}/{name}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -198,7 +197,7 @@ export class SensorServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -234,11 +233,11 @@ export class SensorServiceApi { localVarQueryParameters['deleteOptions.dryRun'] = ObjectSerializer.serialize(deleteOptionsDryRun, "Array"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'DELETE', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -261,7 +260,7 @@ export class SensorServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -292,8 +291,8 @@ export class SensorServiceApi { const localVarPath = this.basePath + '/api/v1/sensors/{namespace}/{name}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -301,7 +300,7 @@ export class SensorServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -317,11 +316,11 @@ export class SensorServiceApi { localVarQueryParameters['getOptions.resourceVersion'] = ObjectSerializer.serialize(getOptionsResourceVersion, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -344,7 +343,7 @@ export class SensorServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -381,8 +380,8 @@ export class SensorServiceApi { public async sensorServiceListSensors (namespace: string, listOptionsLabelSelector?: string, listOptionsFieldSelector?: string, listOptionsWatch?: boolean, listOptionsAllowWatchBookmarks?: boolean, listOptionsResourceVersion?: string, listOptionsResourceVersionMatch?: string, listOptionsTimeoutSeconds?: string, listOptionsLimit?: string, listOptionsContinue?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojEventsV1alpha1SensorList; }> { const localVarPath = this.basePath + '/api/v1/sensors/{namespace}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -390,7 +389,7 @@ export class SensorServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -433,11 +432,11 @@ export class SensorServiceApi { localVarQueryParameters['listOptions.continue'] = ObjectSerializer.serialize(listOptionsContinue, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -460,7 +459,7 @@ export class SensorServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -501,8 +500,8 @@ export class SensorServiceApi { public async sensorServiceSensorsLogs (namespace: string, name?: string, triggerName?: string, grep?: string, podLogOptionsContainer?: string, podLogOptionsFollow?: boolean, podLogOptionsPrevious?: boolean, podLogOptionsSinceSeconds?: string, podLogOptionsSinceTimeSeconds?: string, podLogOptionsSinceTimeNanos?: number, podLogOptionsTimestamps?: boolean, podLogOptionsTailLines?: string, podLogOptionsLimitBytes?: string, podLogOptionsInsecureSkipTLSVerifyBackend?: boolean, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: StreamResultOfSensorLogEntry; }> { const localVarPath = this.basePath + '/api/v1/stream/sensors/{namespace}/logs' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -510,7 +509,7 @@ export class SensorServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -518,15 +517,15 @@ export class SensorServiceApi { } if (name !== undefined) { - localVarQueryParameters['name'] = ObjectSerializer.serialize(name, "string"); + localVarQueryParameters.name = ObjectSerializer.serialize(name, "string"); } if (triggerName !== undefined) { - localVarQueryParameters['triggerName'] = ObjectSerializer.serialize(triggerName, "string"); + localVarQueryParameters.triggerName = ObjectSerializer.serialize(triggerName, "string"); } if (grep !== undefined) { - localVarQueryParameters['grep'] = ObjectSerializer.serialize(grep, "string"); + localVarQueryParameters.grep = ObjectSerializer.serialize(grep, "string"); } if (podLogOptionsContainer !== undefined) { @@ -569,11 +568,11 @@ export class SensorServiceApi { localVarQueryParameters['podLogOptions.insecureSkipTLSVerifyBackend'] = ObjectSerializer.serialize(podLogOptionsInsecureSkipTLSVerifyBackend, "boolean"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -596,7 +595,7 @@ export class SensorServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -627,8 +626,8 @@ export class SensorServiceApi { const localVarPath = this.basePath + '/api/v1/sensors/{namespace}/{name}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -636,7 +635,7 @@ export class SensorServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -653,11 +652,11 @@ export class SensorServiceApi { throw new Error('Required parameter body was null or undefined when calling sensorServiceUpdateSensor.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -681,7 +680,7 @@ export class SensorServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -718,8 +717,8 @@ export class SensorServiceApi { public async sensorServiceWatchSensors (namespace: string, listOptionsLabelSelector?: string, listOptionsFieldSelector?: string, listOptionsWatch?: boolean, listOptionsAllowWatchBookmarks?: boolean, listOptionsResourceVersion?: string, listOptionsResourceVersionMatch?: string, listOptionsTimeoutSeconds?: string, listOptionsLimit?: string, listOptionsContinue?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: StreamResultOfSensorSensorWatchEvent; }> { const localVarPath = this.basePath + '/api/v1/stream/sensors/{namespace}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -727,7 +726,7 @@ export class SensorServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -770,11 +769,11 @@ export class SensorServiceApi { localVarQueryParameters['listOptions.continue'] = ObjectSerializer.serialize(listOptionsContinue, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -797,7 +796,7 @@ export class SensorServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } diff --git a/plugins/argo-workflows/src/api/generated/api/workflowServiceApi.ts b/plugins/argo-workflows/src/api/generated/api/workflowServiceApi.ts index 5df7148..51a28dc 100644 --- a/plugins/argo-workflows/src/api/generated/api/workflowServiceApi.ts +++ b/plugins/argo-workflows/src/api/generated/api/workflowServiceApi.ts @@ -16,7 +16,6 @@ import localVarRequest from 'request'; import http from 'http'; /* tslint:disable:no-unused-locals */ -import { GrpcGatewayRuntimeError } from '../model/grpcGatewayRuntimeError'; import { IoArgoprojWorkflowV1alpha1Workflow } from '../model/ioArgoprojWorkflowV1alpha1Workflow'; import { IoArgoprojWorkflowV1alpha1WorkflowCreateRequest } from '../model/ioArgoprojWorkflowV1alpha1WorkflowCreateRequest'; import { IoArgoprojWorkflowV1alpha1WorkflowLintRequest } from '../model/ioArgoprojWorkflowV1alpha1WorkflowLintRequest'; @@ -34,11 +33,11 @@ import { StreamResultOfIoArgoprojWorkflowV1alpha1WorkflowWatchEvent } from '../m import { StreamResultOfIoK8sApiCoreV1Event } from '../model/streamResultOfIoK8sApiCoreV1Event'; import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models'; -import { HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth } from '../model/models'; +import { ApiKeyAuth } from '../model/models'; -import { HttpError, RequestFile } from './apis'; +import { HttpError } from './apis'; -let defaultBasePath = 'http://localhost:2746'; +const defaultBasePath = 'http://localhost:2746'; // =============================================== // This file is autogenerated - Please do not edit @@ -54,7 +53,7 @@ export class WorkflowServiceApi { protected _useQuerystring : boolean = false; protected authentications = { - 'default': new VoidAuth(), + 'default': new VoidAuth() as Authentication, 'BearerToken': new ApiKeyAuth('header', 'Authorization'), } @@ -113,8 +112,8 @@ export class WorkflowServiceApi { public async workflowServiceCreateWorkflow (namespace: string, body: IoArgoprojWorkflowV1alpha1WorkflowCreateRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1Workflow; }> { const localVarPath = this.basePath + '/api/v1/workflows/{namespace}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -122,7 +121,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -134,11 +133,11 @@ export class WorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling workflowServiceCreateWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'POST', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -162,7 +161,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -199,8 +198,8 @@ export class WorkflowServiceApi { const localVarPath = this.basePath + '/api/v1/workflows/{namespace}/{name}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -208,7 +207,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -245,14 +244,14 @@ export class WorkflowServiceApi { } if (force !== undefined) { - localVarQueryParameters['force'] = ObjectSerializer.serialize(force, "boolean"); + localVarQueryParameters.force = ObjectSerializer.serialize(force, "boolean"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'DELETE', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -275,7 +274,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -307,8 +306,8 @@ export class WorkflowServiceApi { const localVarPath = this.basePath + '/api/v1/workflows/{namespace}/{name}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -316,7 +315,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -333,14 +332,14 @@ export class WorkflowServiceApi { } if (fields !== undefined) { - localVarQueryParameters['fields'] = ObjectSerializer.serialize(fields, "string"); + localVarQueryParameters.fields = ObjectSerializer.serialize(fields, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -363,7 +362,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -392,8 +391,8 @@ export class WorkflowServiceApi { public async workflowServiceLintWorkflow (namespace: string, body: IoArgoprojWorkflowV1alpha1WorkflowLintRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1Workflow; }> { const localVarPath = this.basePath + '/api/v1/workflows/{namespace}/lint' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -401,7 +400,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -413,11 +412,11 @@ export class WorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling workflowServiceLintWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'POST', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -441,7 +440,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -479,8 +478,8 @@ export class WorkflowServiceApi { public async workflowServiceListWorkflows (namespace: string, listOptionsLabelSelector?: string, listOptionsFieldSelector?: string, listOptionsWatch?: boolean, listOptionsAllowWatchBookmarks?: boolean, listOptionsResourceVersion?: string, listOptionsResourceVersionMatch?: string, listOptionsTimeoutSeconds?: string, listOptionsLimit?: string, listOptionsContinue?: string, fields?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1WorkflowList; }> { const localVarPath = this.basePath + '/api/v1/workflows/{namespace}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -488,7 +487,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -532,14 +531,14 @@ export class WorkflowServiceApi { } if (fields !== undefined) { - localVarQueryParameters['fields'] = ObjectSerializer.serialize(fields, "string"); + localVarQueryParameters.fields = ObjectSerializer.serialize(fields, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -562,7 +561,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -607,8 +606,8 @@ export class WorkflowServiceApi { .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))) .replace('{' + 'podName' + '}', encodeURIComponent(String(podName))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -616,7 +615,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -674,18 +673,18 @@ export class WorkflowServiceApi { } if (grep !== undefined) { - localVarQueryParameters['grep'] = ObjectSerializer.serialize(grep, "string"); + localVarQueryParameters.grep = ObjectSerializer.serialize(grep, "string"); } if (selector !== undefined) { - localVarQueryParameters['selector'] = ObjectSerializer.serialize(selector, "string"); + localVarQueryParameters.selector = ObjectSerializer.serialize(selector, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -708,7 +707,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -739,8 +738,8 @@ export class WorkflowServiceApi { const localVarPath = this.basePath + '/api/v1/workflows/{namespace}/{name}/resubmit' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -748,7 +747,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -765,11 +764,11 @@ export class WorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling workflowServiceResubmitWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -793,7 +792,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -824,8 +823,8 @@ export class WorkflowServiceApi { const localVarPath = this.basePath + '/api/v1/workflows/{namespace}/{name}/resume' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -833,7 +832,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -850,11 +849,11 @@ export class WorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling workflowServiceResumeWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -878,7 +877,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -909,8 +908,8 @@ export class WorkflowServiceApi { const localVarPath = this.basePath + '/api/v1/workflows/{namespace}/{name}/retry' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -918,7 +917,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -935,11 +934,11 @@ export class WorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling workflowServiceRetryWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -963,7 +962,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -994,8 +993,8 @@ export class WorkflowServiceApi { const localVarPath = this.basePath + '/api/v1/workflows/{namespace}/{name}/set' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -1003,7 +1002,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -1020,11 +1019,11 @@ export class WorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling workflowServiceSetWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -1048,7 +1047,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -1079,8 +1078,8 @@ export class WorkflowServiceApi { const localVarPath = this.basePath + '/api/v1/workflows/{namespace}/{name}/stop' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -1088,7 +1087,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -1105,11 +1104,11 @@ export class WorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling workflowServiceStopWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -1133,7 +1132,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -1162,8 +1161,8 @@ export class WorkflowServiceApi { public async workflowServiceSubmitWorkflow (namespace: string, body: IoArgoprojWorkflowV1alpha1WorkflowSubmitRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1Workflow; }> { const localVarPath = this.basePath + '/api/v1/workflows/{namespace}/submit' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -1171,7 +1170,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -1183,11 +1182,11 @@ export class WorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling workflowServiceSubmitWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'POST', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -1211,7 +1210,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -1242,8 +1241,8 @@ export class WorkflowServiceApi { const localVarPath = this.basePath + '/api/v1/workflows/{namespace}/{name}/suspend' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -1251,7 +1250,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -1268,11 +1267,11 @@ export class WorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling workflowServiceSuspendWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -1296,7 +1295,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -1327,8 +1326,8 @@ export class WorkflowServiceApi { const localVarPath = this.basePath + '/api/v1/workflows/{namespace}/{name}/terminate' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -1336,7 +1335,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -1353,11 +1352,11 @@ export class WorkflowServiceApi { throw new Error('Required parameter body was null or undefined when calling workflowServiceTerminateWorkflow.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -1381,7 +1380,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -1418,8 +1417,8 @@ export class WorkflowServiceApi { public async workflowServiceWatchEvents (namespace: string, listOptionsLabelSelector?: string, listOptionsFieldSelector?: string, listOptionsWatch?: boolean, listOptionsAllowWatchBookmarks?: boolean, listOptionsResourceVersion?: string, listOptionsResourceVersionMatch?: string, listOptionsTimeoutSeconds?: string, listOptionsLimit?: string, listOptionsContinue?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: StreamResultOfIoK8sApiCoreV1Event; }> { const localVarPath = this.basePath + '/api/v1/stream/events/{namespace}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -1427,7 +1426,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -1470,11 +1469,11 @@ export class WorkflowServiceApi { localVarQueryParameters['listOptions.continue'] = ObjectSerializer.serialize(listOptionsContinue, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -1497,7 +1496,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -1535,8 +1534,8 @@ export class WorkflowServiceApi { public async workflowServiceWatchWorkflows (namespace: string, listOptionsLabelSelector?: string, listOptionsFieldSelector?: string, listOptionsWatch?: boolean, listOptionsAllowWatchBookmarks?: boolean, listOptionsResourceVersion?: string, listOptionsResourceVersionMatch?: string, listOptionsTimeoutSeconds?: string, listOptionsLimit?: string, listOptionsContinue?: string, fields?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: StreamResultOfIoArgoprojWorkflowV1alpha1WorkflowWatchEvent; }> { const localVarPath = this.basePath + '/api/v1/workflow-events/{namespace}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -1544,7 +1543,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -1588,14 +1587,14 @@ export class WorkflowServiceApi { } if (fields !== undefined) { - localVarQueryParameters['fields'] = ObjectSerializer.serialize(fields, "string"); + localVarQueryParameters.fields = ObjectSerializer.serialize(fields, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -1618,7 +1617,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -1661,8 +1660,8 @@ export class WorkflowServiceApi { const localVarPath = this.basePath + '/api/v1/workflows/{namespace}/{name}/log' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -1670,7 +1669,7 @@ export class WorkflowServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -1683,7 +1682,7 @@ export class WorkflowServiceApi { } if (podName !== undefined) { - localVarQueryParameters['podName'] = ObjectSerializer.serialize(podName, "string"); + localVarQueryParameters.podName = ObjectSerializer.serialize(podName, "string"); } if (logOptionsContainer !== undefined) { @@ -1727,18 +1726,18 @@ export class WorkflowServiceApi { } if (grep !== undefined) { - localVarQueryParameters['grep'] = ObjectSerializer.serialize(grep, "string"); + localVarQueryParameters.grep = ObjectSerializer.serialize(grep, "string"); } if (selector !== undefined) { - localVarQueryParameters['selector'] = ObjectSerializer.serialize(selector, "string"); + localVarQueryParameters.selector = ObjectSerializer.serialize(selector, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -1761,7 +1760,7 @@ export class WorkflowServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } diff --git a/plugins/argo-workflows/src/api/generated/api/workflowTemplateServiceApi.ts b/plugins/argo-workflows/src/api/generated/api/workflowTemplateServiceApi.ts index db7c47b..2745f9f 100644 --- a/plugins/argo-workflows/src/api/generated/api/workflowTemplateServiceApi.ts +++ b/plugins/argo-workflows/src/api/generated/api/workflowTemplateServiceApi.ts @@ -16,7 +16,6 @@ import localVarRequest from 'request'; import http from 'http'; /* tslint:disable:no-unused-locals */ -import { GrpcGatewayRuntimeError } from '../model/grpcGatewayRuntimeError'; import { IoArgoprojWorkflowV1alpha1WorkflowTemplate } from '../model/ioArgoprojWorkflowV1alpha1WorkflowTemplate'; import { IoArgoprojWorkflowV1alpha1WorkflowTemplateCreateRequest } from '../model/ioArgoprojWorkflowV1alpha1WorkflowTemplateCreateRequest'; import { IoArgoprojWorkflowV1alpha1WorkflowTemplateLintRequest } from '../model/ioArgoprojWorkflowV1alpha1WorkflowTemplateLintRequest'; @@ -24,11 +23,11 @@ import { IoArgoprojWorkflowV1alpha1WorkflowTemplateList } from '../model/ioArgop import { IoArgoprojWorkflowV1alpha1WorkflowTemplateUpdateRequest } from '../model/ioArgoprojWorkflowV1alpha1WorkflowTemplateUpdateRequest'; import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models'; -import { HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth } from '../model/models'; +import { ApiKeyAuth } from '../model/models'; -import { HttpError, RequestFile } from './apis'; +import { HttpError } from './apis'; -let defaultBasePath = 'http://localhost:2746'; +const defaultBasePath = 'http://localhost:2746'; // =============================================== // This file is autogenerated - Please do not edit @@ -44,7 +43,7 @@ export class WorkflowTemplateServiceApi { protected _useQuerystring : boolean = false; protected authentications = { - 'default': new VoidAuth(), + 'default': new VoidAuth() as Authentication, 'BearerToken': new ApiKeyAuth('header', 'Authorization'), } @@ -103,8 +102,8 @@ export class WorkflowTemplateServiceApi { public async workflowTemplateServiceCreateWorkflowTemplate (namespace: string, body: IoArgoprojWorkflowV1alpha1WorkflowTemplateCreateRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1WorkflowTemplate; }> { const localVarPath = this.basePath + '/api/v1/workflow-templates/{namespace}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -112,7 +111,7 @@ export class WorkflowTemplateServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -124,11 +123,11 @@ export class WorkflowTemplateServiceApi { throw new Error('Required parameter body was null or undefined when calling workflowTemplateServiceCreateWorkflowTemplate.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'POST', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -152,7 +151,7 @@ export class WorkflowTemplateServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -188,8 +187,8 @@ export class WorkflowTemplateServiceApi { const localVarPath = this.basePath + '/api/v1/workflow-templates/{namespace}/{name}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -197,7 +196,7 @@ export class WorkflowTemplateServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -233,11 +232,11 @@ export class WorkflowTemplateServiceApi { localVarQueryParameters['deleteOptions.dryRun'] = ObjectSerializer.serialize(deleteOptionsDryRun, "Array"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'DELETE', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -260,7 +259,7 @@ export class WorkflowTemplateServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -291,8 +290,8 @@ export class WorkflowTemplateServiceApi { const localVarPath = this.basePath + '/api/v1/workflow-templates/{namespace}/{name}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -300,7 +299,7 @@ export class WorkflowTemplateServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -316,11 +315,11 @@ export class WorkflowTemplateServiceApi { localVarQueryParameters['getOptions.resourceVersion'] = ObjectSerializer.serialize(getOptionsResourceVersion, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -343,7 +342,7 @@ export class WorkflowTemplateServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -372,8 +371,8 @@ export class WorkflowTemplateServiceApi { public async workflowTemplateServiceLintWorkflowTemplate (namespace: string, body: IoArgoprojWorkflowV1alpha1WorkflowTemplateLintRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1WorkflowTemplate; }> { const localVarPath = this.basePath + '/api/v1/workflow-templates/{namespace}/lint' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -381,7 +380,7 @@ export class WorkflowTemplateServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -393,11 +392,11 @@ export class WorkflowTemplateServiceApi { throw new Error('Required parameter body was null or undefined when calling workflowTemplateServiceLintWorkflowTemplate.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'POST', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -421,7 +420,7 @@ export class WorkflowTemplateServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -458,8 +457,8 @@ export class WorkflowTemplateServiceApi { public async workflowTemplateServiceListWorkflowTemplates (namespace: string, listOptionsLabelSelector?: string, listOptionsFieldSelector?: string, listOptionsWatch?: boolean, listOptionsAllowWatchBookmarks?: boolean, listOptionsResourceVersion?: string, listOptionsResourceVersionMatch?: string, listOptionsTimeoutSeconds?: string, listOptionsLimit?: string, listOptionsContinue?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: IoArgoprojWorkflowV1alpha1WorkflowTemplateList; }> { const localVarPath = this.basePath + '/api/v1/workflow-templates/{namespace}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -467,7 +466,7 @@ export class WorkflowTemplateServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -510,11 +509,11 @@ export class WorkflowTemplateServiceApi { localVarQueryParameters['listOptions.continue'] = ObjectSerializer.serialize(listOptionsContinue, "string"); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'GET', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -537,7 +536,7 @@ export class WorkflowTemplateServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } @@ -568,8 +567,8 @@ export class WorkflowTemplateServiceApi { const localVarPath = this.basePath + '/api/v1/workflow-templates/{namespace}/{name}' .replace('{' + 'namespace' + '}', encodeURIComponent(String(namespace))) .replace('{' + 'name' + '}', encodeURIComponent(String(name))); - let localVarQueryParameters: any = {}; - let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const localVarQueryParameters: any = {}; + const localVarHeaderParams: any = (Object as any).assign({}, this._defaultHeaders); const produces = ['application/json']; // give precedence to 'application/json' if (produces.indexOf('application/json') >= 0) { @@ -577,7 +576,7 @@ export class WorkflowTemplateServiceApi { } else { localVarHeaderParams.Accept = produces.join(','); } - let localVarFormParams: any = {}; + const localVarFormParams: any = {}; // verify required parameter 'namespace' is not null or undefined if (namespace === null || namespace === undefined) { @@ -594,11 +593,11 @@ export class WorkflowTemplateServiceApi { throw new Error('Required parameter body was null or undefined when calling workflowTemplateServiceUpdateWorkflowTemplate.'); } - (Object).assign(localVarHeaderParams, options.headers); + (Object as any).assign(localVarHeaderParams, options.headers); - let localVarUseFormData = false; + const localVarUseFormData = false; - let localVarRequestOptions: localVarRequest.Options = { + const localVarRequestOptions: localVarRequest.Options = { method: 'PUT', qs: localVarQueryParameters, headers: localVarHeaderParams, @@ -622,7 +621,7 @@ export class WorkflowTemplateServiceApi { return interceptorPromise.then(() => { if (Object.keys(localVarFormParams).length) { if (localVarUseFormData) { - (localVarRequestOptions).formData = localVarFormParams; + (localVarRequestOptions as any).formData = localVarFormParams; } else { localVarRequestOptions.form = localVarFormParams; } diff --git a/plugins/argo-workflows/src/api/generated/model/eventsourceCreateEventSourceRequest.ts b/plugins/argo-workflows/src/api/generated/model/eventsourceCreateEventSourceRequest.ts index 504f2d2..a529d24 100644 --- a/plugins/argo-workflows/src/api/generated/model/eventsourceCreateEventSourceRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/eventsourceCreateEventSourceRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSource } from './ioArgoprojEventsV1alpha1EventSource'; export class EventsourceCreateEventSourceRequest { diff --git a/plugins/argo-workflows/src/api/generated/model/eventsourceEventSourceWatchEvent.ts b/plugins/argo-workflows/src/api/generated/model/eventsourceEventSourceWatchEvent.ts index 786c837..abb9b1a 100644 --- a/plugins/argo-workflows/src/api/generated/model/eventsourceEventSourceWatchEvent.ts +++ b/plugins/argo-workflows/src/api/generated/model/eventsourceEventSourceWatchEvent.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSource } from './ioArgoprojEventsV1alpha1EventSource'; export class EventsourceEventSourceWatchEvent { diff --git a/plugins/argo-workflows/src/api/generated/model/eventsourceLogEntry.ts b/plugins/argo-workflows/src/api/generated/model/eventsourceLogEntry.ts index 6ceda43..ab6c26b 100644 --- a/plugins/argo-workflows/src/api/generated/model/eventsourceLogEntry.ts +++ b/plugins/argo-workflows/src/api/generated/model/eventsourceLogEntry.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class EventsourceLogEntry { 'eventName'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/eventsourceUpdateEventSourceRequest.ts b/plugins/argo-workflows/src/api/generated/model/eventsourceUpdateEventSourceRequest.ts index f092d28..8ede219 100644 --- a/plugins/argo-workflows/src/api/generated/model/eventsourceUpdateEventSourceRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/eventsourceUpdateEventSourceRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSource } from './ioArgoprojEventsV1alpha1EventSource'; export class EventsourceUpdateEventSourceRequest { diff --git a/plugins/argo-workflows/src/api/generated/model/googleProtobufAny.ts b/plugins/argo-workflows/src/api/generated/model/googleProtobufAny.ts index e462073..8bc1662 100644 --- a/plugins/argo-workflows/src/api/generated/model/googleProtobufAny.ts +++ b/plugins/argo-workflows/src/api/generated/model/googleProtobufAny.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class GoogleProtobufAny { 'typeUrl'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/grpcGatewayRuntimeError.ts b/plugins/argo-workflows/src/api/generated/model/grpcGatewayRuntimeError.ts index 68c38b0..c278849 100644 --- a/plugins/argo-workflows/src/api/generated/model/grpcGatewayRuntimeError.ts +++ b/plugins/argo-workflows/src/api/generated/model/grpcGatewayRuntimeError.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { GoogleProtobufAny } from './googleProtobufAny'; export class GrpcGatewayRuntimeError { diff --git a/plugins/argo-workflows/src/api/generated/model/grpcGatewayRuntimeStreamError.ts b/plugins/argo-workflows/src/api/generated/model/grpcGatewayRuntimeStreamError.ts index 2db1d57..af9132a 100644 --- a/plugins/argo-workflows/src/api/generated/model/grpcGatewayRuntimeStreamError.ts +++ b/plugins/argo-workflows/src/api/generated/model/grpcGatewayRuntimeStreamError.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { GoogleProtobufAny } from './googleProtobufAny'; export class GrpcGatewayRuntimeStreamError { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPConsumeConfig.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPConsumeConfig.ts index 4254d70..8cb27ee 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPConsumeConfig.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPConsumeConfig.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1AMQPConsumeConfig { 'autoAck'?: boolean; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPEventSource.ts index cc4f56f..6bc61e1 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1AMQPConsumeConfig } from './ioArgoprojEventsV1alpha1AMQPConsumeConfig'; import { IoArgoprojEventsV1alpha1AMQPExchangeDeclareConfig } from './ioArgoprojEventsV1alpha1AMQPExchangeDeclareConfig'; import { IoArgoprojEventsV1alpha1AMQPQueueBindConfig } from './ioArgoprojEventsV1alpha1AMQPQueueBindConfig'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPExchangeDeclareConfig.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPExchangeDeclareConfig.ts index e20f2ba..769c285 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPExchangeDeclareConfig.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPExchangeDeclareConfig.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1AMQPExchangeDeclareConfig { 'autoDelete'?: boolean; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPQueueBindConfig.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPQueueBindConfig.ts index 7d89bd0..36e225c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPQueueBindConfig.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPQueueBindConfig.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1AMQPQueueBindConfig { 'noWait'?: boolean; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPQueueDeclareConfig.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPQueueDeclareConfig.ts index c8bb493..0306c69 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPQueueDeclareConfig.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AMQPQueueDeclareConfig.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1AMQPQueueDeclareConfig { 'arguments'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AWSLambdaTrigger.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AWSLambdaTrigger.ts index a666abc..2745274 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AWSLambdaTrigger.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AWSLambdaTrigger.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1TriggerParameter } from './ioArgoprojEventsV1alpha1TriggerParameter'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Amount.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Amount.ts index bf98086..4ed48e1 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Amount.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Amount.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Amount represent a numeric amount. diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ArgoWorkflowTrigger.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ArgoWorkflowTrigger.ts index 787c02b..8780df3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ArgoWorkflowTrigger.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ArgoWorkflowTrigger.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1ArtifactLocation } from './ioArgoprojEventsV1alpha1ArtifactLocation'; import { IoArgoprojEventsV1alpha1TriggerParameter } from './ioArgoprojEventsV1alpha1TriggerParameter'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ArtifactLocation.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ArtifactLocation.ts index 07f72d9..c5a4333 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ArtifactLocation.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ArtifactLocation.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1FileArtifact } from './ioArgoprojEventsV1alpha1FileArtifact'; import { IoArgoprojEventsV1alpha1GitArtifact } from './ioArgoprojEventsV1alpha1GitArtifact'; import { IoArgoprojEventsV1alpha1Resource } from './ioArgoprojEventsV1alpha1Resource'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AzureEventHubsTrigger.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AzureEventHubsTrigger.ts index f0c11ec..7f97c81 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AzureEventHubsTrigger.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AzureEventHubsTrigger.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1TriggerParameter } from './ioArgoprojEventsV1alpha1TriggerParameter'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AzureEventsHubEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AzureEventsHubEventSource.ts index cb2116b..463b861 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AzureEventsHubEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1AzureEventsHubEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Backoff.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Backoff.ts index 6612ae0..cf1bd6d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Backoff.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Backoff.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Amount } from './ioArgoprojEventsV1alpha1Amount'; import { IoArgoprojEventsV1alpha1Int64OrString } from './ioArgoprojEventsV1alpha1Int64OrString'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BasicAuth.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BasicAuth.ts index 577d5db..03afe96 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BasicAuth.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BasicAuth.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; export class IoArgoprojEventsV1alpha1BasicAuth { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketAuth.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketAuth.ts index 149fdc6..1ae2dcf 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketAuth.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketAuth.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1BitbucketBasicAuth } from './ioArgoprojEventsV1alpha1BitbucketBasicAuth'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketBasicAuth.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketBasicAuth.ts index 4130146..9db46e1 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketBasicAuth.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketBasicAuth.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; export class IoArgoprojEventsV1alpha1BitbucketBasicAuth { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketEventSource.ts index e0aadb1..9c60516 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1BitbucketAuth } from './ioArgoprojEventsV1alpha1BitbucketAuth'; import { IoArgoprojEventsV1alpha1BitbucketRepository } from './ioArgoprojEventsV1alpha1BitbucketRepository'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketRepository.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketRepository.ts index 6dfee78..1c83938 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketRepository.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketRepository.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1BitbucketRepository { 'owner'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketServerEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketServerEventSource.ts index 56ee727..3fdda0f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketServerEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketServerEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1BitbucketServerRepository } from './ioArgoprojEventsV1alpha1BitbucketServerRepository'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1WebhookContext } from './ioArgoprojEventsV1alpha1WebhookContext'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketServerRepository.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketServerRepository.ts index 9a5a8ed..8f410f3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketServerRepository.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1BitbucketServerRepository.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1BitbucketServerRepository { 'projectKey'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1CalendarEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1CalendarEventSource.ts index 452bef6..410c2ff 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1CalendarEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1CalendarEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventPersistence } from './ioArgoprojEventsV1alpha1EventPersistence'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1CatchupConfiguration.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1CatchupConfiguration.ts index b16590d..737ef81 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1CatchupConfiguration.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1CatchupConfiguration.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1CatchupConfiguration { 'enabled'?: boolean; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Condition.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Condition.ts index 034eb36..d53bad0 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Condition.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Condition.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1Condition { /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ConditionsResetByTime.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ConditionsResetByTime.ts index 6c4f011..f8cb3cd 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ConditionsResetByTime.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ConditionsResetByTime.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1ConditionsResetByTime { 'cron'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ConditionsResetCriteria.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ConditionsResetCriteria.ts index 1dda896..3e335f1 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ConditionsResetCriteria.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ConditionsResetCriteria.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1ConditionsResetByTime } from './ioArgoprojEventsV1alpha1ConditionsResetByTime'; export class IoArgoprojEventsV1alpha1ConditionsResetCriteria { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ConfigMapPersistence.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ConfigMapPersistence.ts index af51446..278caf2 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ConfigMapPersistence.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ConfigMapPersistence.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1ConfigMapPersistence { 'createIfNotExist'?: boolean; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1CustomTrigger.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1CustomTrigger.ts index 53792f2..8f29a9c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1CustomTrigger.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1CustomTrigger.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1TriggerParameter } from './ioArgoprojEventsV1alpha1TriggerParameter'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1DataFilter.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1DataFilter.ts index f18fea7..aa1a624 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1DataFilter.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1DataFilter.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1DataFilter { /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EmitterEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EmitterEventSource.ts index 18f9002..c3d5929 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EmitterEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EmitterEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Backoff } from './ioArgoprojEventsV1alpha1Backoff'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1TLSConfig } from './ioArgoprojEventsV1alpha1TLSConfig'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventContext.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventContext.ts index 39f87be..2f6adf7 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventContext.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventContext.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1EventContext { /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventDependency.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventDependency.ts index 26db62a..dcdf42d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventDependency.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventDependency.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventDependencyFilter } from './ioArgoprojEventsV1alpha1EventDependencyFilter'; import { IoArgoprojEventsV1alpha1EventDependencyTransformer } from './ioArgoprojEventsV1alpha1EventDependencyTransformer'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventDependencyFilter.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventDependencyFilter.ts index 26f4a9c..251124f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventDependencyFilter.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventDependencyFilter.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1DataFilter } from './ioArgoprojEventsV1alpha1DataFilter'; import { IoArgoprojEventsV1alpha1EventContext } from './ioArgoprojEventsV1alpha1EventContext'; import { IoArgoprojEventsV1alpha1ExprFilter } from './ioArgoprojEventsV1alpha1ExprFilter'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventDependencyTransformer.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventDependencyTransformer.ts index 7704c34..0257fe8 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventDependencyTransformer.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventDependencyTransformer.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1EventDependencyTransformer { 'jq'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventPersistence.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventPersistence.ts index a682caf..6a05213 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventPersistence.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventPersistence.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1CatchupConfiguration } from './ioArgoprojEventsV1alpha1CatchupConfiguration'; import { IoArgoprojEventsV1alpha1ConfigMapPersistence } from './ioArgoprojEventsV1alpha1ConfigMapPersistence'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSource.ts index 3920889..95f6118 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSourceSpec } from './ioArgoprojEventsV1alpha1EventSourceSpec'; import { IoArgoprojEventsV1alpha1EventSourceStatus } from './ioArgoprojEventsV1alpha1EventSourceStatus'; import { IoK8sApimachineryPkgApisMetaV1ObjectMeta } from './ioK8sApimachineryPkgApisMetaV1ObjectMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceFilter.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceFilter.ts index 2bc6788..530bbec 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceFilter.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceFilter.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1EventSourceFilter { 'expression'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceList.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceList.ts index 8f7d22e..188c060 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceList.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceList.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSource } from './ioArgoprojEventsV1alpha1EventSource'; import { IoK8sApimachineryPkgApisMetaV1ListMeta } from './ioK8sApimachineryPkgApisMetaV1ListMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceSpec.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceSpec.ts index c6f9a6e..fb0a82a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceSpec.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceSpec.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1AMQPEventSource } from './ioArgoprojEventsV1alpha1AMQPEventSource'; import { IoArgoprojEventsV1alpha1AzureEventsHubEventSource } from './ioArgoprojEventsV1alpha1AzureEventsHubEventSource'; import { IoArgoprojEventsV1alpha1BitbucketEventSource } from './ioArgoprojEventsV1alpha1BitbucketEventSource'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceStatus.ts index b74e7b9..d56b846 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1EventSourceStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Status } from './ioArgoprojEventsV1alpha1Status'; export class IoArgoprojEventsV1alpha1EventSourceStatus { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ExprFilter.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ExprFilter.ts index aeb6eef..fd85cea 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ExprFilter.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ExprFilter.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1PayloadField } from './ioArgoprojEventsV1alpha1PayloadField'; export class IoArgoprojEventsV1alpha1ExprFilter { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1FileArtifact.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1FileArtifact.ts index c2fcecf..bd98754 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1FileArtifact.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1FileArtifact.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1FileArtifact { 'path'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1FileEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1FileEventSource.ts index 14e0065..32b1b27 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1FileEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1FileEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1WatchPathConfig } from './ioArgoprojEventsV1alpha1WatchPathConfig'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GenericEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GenericEventSource.ts index f390a49..7996095 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GenericEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GenericEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitArtifact.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitArtifact.ts index 63fd6e8..e786d4b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitArtifact.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitArtifact.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1GitCreds } from './ioArgoprojEventsV1alpha1GitCreds'; import { IoArgoprojEventsV1alpha1GitRemoteConfig } from './ioArgoprojEventsV1alpha1GitRemoteConfig'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitCreds.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitCreds.ts index 4352f54..f6adda5 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitCreds.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitCreds.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; export class IoArgoprojEventsV1alpha1GitCreds { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitRemoteConfig.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitRemoteConfig.ts index f18dd11..448352f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitRemoteConfig.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitRemoteConfig.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1GitRemoteConfig { /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GithubAppCreds.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GithubAppCreds.ts index 8cea156..20ba460 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GithubAppCreds.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GithubAppCreds.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; export class IoArgoprojEventsV1alpha1GithubAppCreds { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GithubEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GithubEventSource.ts index 8ca39fe..b609517 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GithubEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GithubEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1GithubAppCreds } from './ioArgoprojEventsV1alpha1GithubAppCreds'; import { IoArgoprojEventsV1alpha1OwnedRepositories } from './ioArgoprojEventsV1alpha1OwnedRepositories'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitlabEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitlabEventSource.ts index 975ba86..836f600 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitlabEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1GitlabEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1WebhookContext } from './ioArgoprojEventsV1alpha1WebhookContext'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1HDFSEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1HDFSEventSource.ts index a4821a9..6edbd25 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1HDFSEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1HDFSEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1WatchPathConfig } from './ioArgoprojEventsV1alpha1WatchPathConfig'; import { IoK8sApiCoreV1ConfigMapKeySelector } from './ioK8sApiCoreV1ConfigMapKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1HTTPTrigger.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1HTTPTrigger.ts index 5fe0f89..c18186f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1HTTPTrigger.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1HTTPTrigger.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1BasicAuth } from './ioArgoprojEventsV1alpha1BasicAuth'; import { IoArgoprojEventsV1alpha1SecureHeader } from './ioArgoprojEventsV1alpha1SecureHeader'; import { IoArgoprojEventsV1alpha1TLSConfig } from './ioArgoprojEventsV1alpha1TLSConfig'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Int64OrString.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Int64OrString.ts index 4bd7909..c03fdb9 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Int64OrString.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Int64OrString.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1Int64OrString { 'int64Val'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1K8SResourcePolicy.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1K8SResourcePolicy.ts index 67fa627..4828fc6 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1K8SResourcePolicy.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1K8SResourcePolicy.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Backoff } from './ioArgoprojEventsV1alpha1Backoff'; export class IoArgoprojEventsV1alpha1K8SResourcePolicy { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1KafkaConsumerGroup.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1KafkaConsumerGroup.ts index 0c9f08e..7a17834 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1KafkaConsumerGroup.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1KafkaConsumerGroup.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1KafkaConsumerGroup { 'groupName'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1KafkaEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1KafkaEventSource.ts index 156fa05..f4b2b4c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1KafkaEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1KafkaEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Backoff } from './ioArgoprojEventsV1alpha1Backoff'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1KafkaConsumerGroup } from './ioArgoprojEventsV1alpha1KafkaConsumerGroup'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1KafkaTrigger.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1KafkaTrigger.ts index 1d59149..0428236 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1KafkaTrigger.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1KafkaTrigger.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1SASLConfig } from './ioArgoprojEventsV1alpha1SASLConfig'; import { IoArgoprojEventsV1alpha1TLSConfig } from './ioArgoprojEventsV1alpha1TLSConfig'; import { IoArgoprojEventsV1alpha1TriggerParameter } from './ioArgoprojEventsV1alpha1TriggerParameter'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1LogTrigger.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1LogTrigger.ts index 85f1584..155292e 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1LogTrigger.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1LogTrigger.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1LogTrigger { 'intervalSeconds'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1MQTTEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1MQTTEventSource.ts index c3255ab..94c62b3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1MQTTEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1MQTTEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Backoff } from './ioArgoprojEventsV1alpha1Backoff'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1TLSConfig } from './ioArgoprojEventsV1alpha1TLSConfig'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Metadata.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Metadata.ts index de88269..12a71e1 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Metadata.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Metadata.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1Metadata { 'annotations'?: { [key: string]: string; }; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NATSAuth.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NATSAuth.ts index c935a6a..0576fad 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NATSAuth.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NATSAuth.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1BasicAuth } from './ioArgoprojEventsV1alpha1BasicAuth'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NATSEventsSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NATSEventsSource.ts index d691f4a..a19a567 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NATSEventsSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NATSEventsSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Backoff } from './ioArgoprojEventsV1alpha1Backoff'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1NATSAuth } from './ioArgoprojEventsV1alpha1NATSAuth'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NATSTrigger.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NATSTrigger.ts index 0e6ca06..2ce4da3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NATSTrigger.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NATSTrigger.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1TLSConfig } from './ioArgoprojEventsV1alpha1TLSConfig'; import { IoArgoprojEventsV1alpha1TriggerParameter } from './ioArgoprojEventsV1alpha1TriggerParameter'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NSQEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NSQEventSource.ts index 263204d..b688ff0 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NSQEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1NSQEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Backoff } from './ioArgoprojEventsV1alpha1Backoff'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1TLSConfig } from './ioArgoprojEventsV1alpha1TLSConfig'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1OpenWhiskTrigger.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1OpenWhiskTrigger.ts index dfc726f..669ec43 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1OpenWhiskTrigger.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1OpenWhiskTrigger.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1TriggerParameter } from './ioArgoprojEventsV1alpha1TriggerParameter'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1OwnedRepositories.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1OwnedRepositories.ts index e5245df..7b960c7 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1OwnedRepositories.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1OwnedRepositories.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1OwnedRepositories { 'names'?: Array; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PayloadField.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PayloadField.ts index e86eab4..30bb23f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PayloadField.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PayloadField.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * PayloadField binds a value at path within the event payload against a name. diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PubSubEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PubSubEventSource.ts index bb45414..29526a0 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PubSubEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PubSubEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PulsarEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PulsarEventSource.ts index b4208ad..a6dd782 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PulsarEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PulsarEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Backoff } from './ioArgoprojEventsV1alpha1Backoff'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1TLSConfig } from './ioArgoprojEventsV1alpha1TLSConfig'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PulsarTrigger.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PulsarTrigger.ts index 0da44da..de16b40 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PulsarTrigger.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1PulsarTrigger.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Backoff } from './ioArgoprojEventsV1alpha1Backoff'; import { IoArgoprojEventsV1alpha1TLSConfig } from './ioArgoprojEventsV1alpha1TLSConfig'; import { IoArgoprojEventsV1alpha1TriggerParameter } from './ioArgoprojEventsV1alpha1TriggerParameter'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1RateLimit.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1RateLimit.ts index 9241352..1da02dc 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1RateLimit.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1RateLimit.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1RateLimit { 'requestsPerUnit'?: number; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1RedisEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1RedisEventSource.ts index 0f18125..51ebb03 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1RedisEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1RedisEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1TLSConfig } from './ioArgoprojEventsV1alpha1TLSConfig'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1RedisStreamEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1RedisStreamEventSource.ts index f02bbd7..52d797f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1RedisStreamEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1RedisStreamEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1TLSConfig } from './ioArgoprojEventsV1alpha1TLSConfig'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Resource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Resource.ts index e5c0f65..d0a1881 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Resource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Resource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Resource represent arbitrary structured data. diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ResourceEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ResourceEventSource.ts index 540f78c..91b343f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ResourceEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ResourceEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1ResourceFilter } from './ioArgoprojEventsV1alpha1ResourceFilter'; import { IoK8sApimachineryPkgApisMetaV1GroupVersionResource } from './ioK8sApimachineryPkgApisMetaV1GroupVersionResource'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ResourceFilter.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ResourceFilter.ts index ab02668..3af967e 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ResourceFilter.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ResourceFilter.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Selector } from './ioArgoprojEventsV1alpha1Selector'; export class IoArgoprojEventsV1alpha1ResourceFilter { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1S3Artifact.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1S3Artifact.ts index e774969..68ad109 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1S3Artifact.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1S3Artifact.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1S3Bucket } from './ioArgoprojEventsV1alpha1S3Bucket'; import { IoArgoprojEventsV1alpha1S3Filter } from './ioArgoprojEventsV1alpha1S3Filter'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1S3Bucket.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1S3Bucket.ts index c1562cf..16a2a4d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1S3Bucket.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1S3Bucket.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1S3Bucket { 'key'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1S3Filter.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1S3Filter.ts index b578ff0..e42368a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1S3Filter.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1S3Filter.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1S3Filter { 'prefix'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SASLConfig.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SASLConfig.ts index 3d64052..fae6ca3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SASLConfig.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SASLConfig.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; export class IoArgoprojEventsV1alpha1SASLConfig { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SNSEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SNSEventSource.ts index 9e17b90..4d2735d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SNSEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SNSEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1WebhookContext } from './ioArgoprojEventsV1alpha1WebhookContext'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SQSEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SQSEventSource.ts index 04899e5..0a0ebc3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SQSEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SQSEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SecureHeader.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SecureHeader.ts index 87448ab..bf5bbe5 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SecureHeader.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SecureHeader.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1ValueFromSource } from './ioArgoprojEventsV1alpha1ValueFromSource'; export class IoArgoprojEventsV1alpha1SecureHeader { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Selector.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Selector.ts index 2f02064..eabbc0f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Selector.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Selector.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Selector represents conditional operation to select K8s objects. diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Sensor.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Sensor.ts index 2cb90d3..d03711c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Sensor.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Sensor.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1SensorSpec } from './ioArgoprojEventsV1alpha1SensorSpec'; import { IoArgoprojEventsV1alpha1SensorStatus } from './ioArgoprojEventsV1alpha1SensorStatus'; import { IoK8sApimachineryPkgApisMetaV1ObjectMeta } from './ioK8sApimachineryPkgApisMetaV1ObjectMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SensorList.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SensorList.ts index b6d9bda..7107d72 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SensorList.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SensorList.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Sensor } from './ioArgoprojEventsV1alpha1Sensor'; import { IoK8sApimachineryPkgApisMetaV1ListMeta } from './ioK8sApimachineryPkgApisMetaV1ListMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SensorSpec.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SensorSpec.ts index 0c6807a..75182fb 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SensorSpec.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SensorSpec.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventDependency } from './ioArgoprojEventsV1alpha1EventDependency'; import { IoArgoprojEventsV1alpha1Template } from './ioArgoprojEventsV1alpha1Template'; import { IoArgoprojEventsV1alpha1Trigger } from './ioArgoprojEventsV1alpha1Trigger'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SensorStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SensorStatus.ts index 3a694a6..9aaf44b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SensorStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SensorStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Status } from './ioArgoprojEventsV1alpha1Status'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Service.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Service.ts index c45bf36..aea5b3a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Service.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Service.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ServicePort } from './ioK8sApiCoreV1ServicePort'; export class IoArgoprojEventsV1alpha1Service { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SlackEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SlackEventSource.ts index a84530c..18d9e8a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SlackEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SlackEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1WebhookContext } from './ioArgoprojEventsV1alpha1WebhookContext'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SlackTrigger.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SlackTrigger.ts index b8fbedb..81e4f3f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SlackTrigger.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1SlackTrigger.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1TriggerParameter } from './ioArgoprojEventsV1alpha1TriggerParameter'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StandardK8STrigger.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StandardK8STrigger.ts index 6d2846f..4faa1af 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StandardK8STrigger.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StandardK8STrigger.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1ArtifactLocation } from './ioArgoprojEventsV1alpha1ArtifactLocation'; import { IoArgoprojEventsV1alpha1TriggerParameter } from './ioArgoprojEventsV1alpha1TriggerParameter'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Status.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Status.ts index ffef172..be3869f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Status.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Status.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Condition } from './ioArgoprojEventsV1alpha1Condition'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StatusPolicy.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StatusPolicy.ts index 3483bcd..037fc4b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StatusPolicy.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StatusPolicy.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1StatusPolicy { 'allow'?: Array; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StorageGridEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StorageGridEventSource.ts index d82d1c4..a77c53d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StorageGridEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StorageGridEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1StorageGridFilter } from './ioArgoprojEventsV1alpha1StorageGridFilter'; import { IoArgoprojEventsV1alpha1WebhookContext } from './ioArgoprojEventsV1alpha1WebhookContext'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StorageGridFilter.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StorageGridFilter.ts index d6c7425..ce65aab 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StorageGridFilter.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StorageGridFilter.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1StorageGridFilter { 'prefix'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StripeEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StripeEventSource.ts index 4a68e1f..242ca5f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StripeEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1StripeEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1WebhookContext } from './ioArgoprojEventsV1alpha1WebhookContext'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TLSConfig.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TLSConfig.ts index 0c656e3..2ae2969 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TLSConfig.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TLSConfig.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Template.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Template.ts index b7ad143..03fec9f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Template.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Template.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Metadata } from './ioArgoprojEventsV1alpha1Metadata'; import { IoK8sApiCoreV1Affinity } from './ioK8sApiCoreV1Affinity'; import { IoK8sApiCoreV1Container } from './ioK8sApiCoreV1Container'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TimeFilter.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TimeFilter.ts index c53d41b..63c497f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TimeFilter.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TimeFilter.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * TimeFilter describes a window in time. It filters out events that occur outside the time limits. In other words, only events that occur after Start and before Stop will pass this filter. diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Trigger.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Trigger.ts index 8bab8d5..3cc5d5f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Trigger.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1Trigger.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Backoff } from './ioArgoprojEventsV1alpha1Backoff'; import { IoArgoprojEventsV1alpha1RateLimit } from './ioArgoprojEventsV1alpha1RateLimit'; import { IoArgoprojEventsV1alpha1TriggerParameter } from './ioArgoprojEventsV1alpha1TriggerParameter'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerParameter.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerParameter.ts index c682ae9..834006f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerParameter.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerParameter.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1TriggerParameterSource } from './ioArgoprojEventsV1alpha1TriggerParameterSource'; export class IoArgoprojEventsV1alpha1TriggerParameter { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerParameterSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerParameterSource.ts index 4cee827..0869bce 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerParameterSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerParameterSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1TriggerParameterSource { /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerPolicy.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerPolicy.ts index 337effc..5af4a69 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerPolicy.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerPolicy.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1K8SResourcePolicy } from './ioArgoprojEventsV1alpha1K8SResourcePolicy'; import { IoArgoprojEventsV1alpha1StatusPolicy } from './ioArgoprojEventsV1alpha1StatusPolicy'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerTemplate.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerTemplate.ts index 11c2449..6bc187c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerTemplate.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1TriggerTemplate.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1AWSLambdaTrigger } from './ioArgoprojEventsV1alpha1AWSLambdaTrigger'; import { IoArgoprojEventsV1alpha1ArgoWorkflowTrigger } from './ioArgoprojEventsV1alpha1ArgoWorkflowTrigger'; import { IoArgoprojEventsV1alpha1AzureEventHubsTrigger } from './ioArgoprojEventsV1alpha1AzureEventHubsTrigger'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1URLArtifact.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1URLArtifact.ts index 6f9a264..450668e 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1URLArtifact.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1URLArtifact.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * URLArtifact contains information about an artifact at an http endpoint. diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ValueFromSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ValueFromSource.ts index fa5d475..9eb5c9c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ValueFromSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1ValueFromSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ConfigMapKeySelector } from './ioK8sApiCoreV1ConfigMapKeySelector'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1WatchPathConfig.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1WatchPathConfig.ts index 30d2053..b4cd28f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1WatchPathConfig.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1WatchPathConfig.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojEventsV1alpha1WatchPathConfig { 'directory'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1WebhookContext.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1WebhookContext.ts index 3a25c91..811cc52 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1WebhookContext.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1WebhookContext.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; export class IoArgoprojEventsV1alpha1WebhookContext { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1WebhookEventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1WebhookEventSource.ts index 97476d7..b711111 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1WebhookEventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojEventsV1alpha1WebhookEventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1EventSourceFilter } from './ioArgoprojEventsV1alpha1EventSourceFilter'; import { IoArgoprojEventsV1alpha1WebhookContext } from './ioArgoprojEventsV1alpha1WebhookContext'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArchiveStrategy.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArchiveStrategy.ts index 6ea41a3..c5d4152 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArchiveStrategy.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArchiveStrategy.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1TarStrategy } from './ioArgoprojWorkflowV1alpha1TarStrategy'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Arguments.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Arguments.ts index 7f7f7bf..5257cef 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Arguments.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Arguments.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Artifact } from './ioArgoprojWorkflowV1alpha1Artifact'; import { IoArgoprojWorkflowV1alpha1Parameter } from './ioArgoprojWorkflowV1alpha1Parameter'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtGCStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtGCStatus.ts index 231558f..a7bcd9e 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtGCStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtGCStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * ArtGCStatus maintains state related to ArtifactGC diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Artifact.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Artifact.ts index 969801f..41c69cc 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Artifact.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Artifact.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ArchiveStrategy } from './ioArgoprojWorkflowV1alpha1ArchiveStrategy'; import { IoArgoprojWorkflowV1alpha1ArtifactGC } from './ioArgoprojWorkflowV1alpha1ArtifactGC'; import { IoArgoprojWorkflowV1alpha1ArtifactoryArtifact } from './ioArgoprojWorkflowV1alpha1ArtifactoryArtifact'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactGC.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactGC.ts index c1ba2c9..a14080d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactGC.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactGC.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Metadata } from './ioArgoprojWorkflowV1alpha1Metadata'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactGCSpec.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactGCSpec.ts index 8391eb3..9db1aef 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactGCSpec.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactGCSpec.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ArtifactNodeSpec } from './ioArgoprojWorkflowV1alpha1ArtifactNodeSpec'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactGCStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactGCStatus.ts index e318f6d..9585374 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactGCStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactGCStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ArtifactResultNodeStatus } from './ioArgoprojWorkflowV1alpha1ArtifactResultNodeStatus'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactLocation.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactLocation.ts index 843e17d..eb016e4 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactLocation.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactLocation.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ArtifactoryArtifact } from './ioArgoprojWorkflowV1alpha1ArtifactoryArtifact'; import { IoArgoprojWorkflowV1alpha1AzureArtifact } from './ioArgoprojWorkflowV1alpha1AzureArtifact'; import { IoArgoprojWorkflowV1alpha1GCSArtifact } from './ioArgoprojWorkflowV1alpha1GCSArtifact'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactNodeSpec.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactNodeSpec.ts index 8fbab08..507ecca 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactNodeSpec.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactNodeSpec.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Artifact } from './ioArgoprojWorkflowV1alpha1Artifact'; import { IoArgoprojWorkflowV1alpha1ArtifactLocation } from './ioArgoprojWorkflowV1alpha1ArtifactLocation'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactPaths.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactPaths.ts index 373a044..1ea2f1a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactPaths.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactPaths.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ArchiveStrategy } from './ioArgoprojWorkflowV1alpha1ArchiveStrategy'; import { IoArgoprojWorkflowV1alpha1ArtifactGC } from './ioArgoprojWorkflowV1alpha1ArtifactGC'; import { IoArgoprojWorkflowV1alpha1ArtifactoryArtifact } from './ioArgoprojWorkflowV1alpha1ArtifactoryArtifact'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactRepository.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactRepository.ts index 36d7e19..8651e30 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactRepository.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactRepository.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ArtifactoryArtifactRepository } from './ioArgoprojWorkflowV1alpha1ArtifactoryArtifactRepository'; import { IoArgoprojWorkflowV1alpha1AzureArtifactRepository } from './ioArgoprojWorkflowV1alpha1AzureArtifactRepository'; import { IoArgoprojWorkflowV1alpha1GCSArtifactRepository } from './ioArgoprojWorkflowV1alpha1GCSArtifactRepository'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactRepositoryRef.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactRepositoryRef.ts index e683cc1..70de1fa 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactRepositoryRef.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactRepositoryRef.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1ArtifactRepositoryRef { /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactRepositoryRefStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactRepositoryRefStatus.ts index ecee65d..66b5479 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactRepositoryRefStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactRepositoryRefStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ArtifactRepository } from './ioArgoprojWorkflowV1alpha1ArtifactRepository'; export class IoArgoprojWorkflowV1alpha1ArtifactRepositoryRefStatus { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactResult.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactResult.ts index 89b7a2c..97edb43 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactResult.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactResult.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * ArtifactResult describes the result of attempting to delete a given Artifact diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactResultNodeStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactResultNodeStatus.ts index cc88927..108529c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactResultNodeStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactResultNodeStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ArtifactResult } from './ioArgoprojWorkflowV1alpha1ArtifactResult'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactoryArtifact.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactoryArtifact.ts index 4451d9f..8d146eb 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactoryArtifact.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactoryArtifact.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactoryArtifactRepository.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactoryArtifactRepository.ts index 9958eb9..d6b1aa1 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactoryArtifactRepository.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ArtifactoryArtifactRepository.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1AzureArtifact.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1AzureArtifact.ts index 577ce06..13cf2e0 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1AzureArtifact.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1AzureArtifact.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1AzureArtifactRepository.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1AzureArtifactRepository.ts index 5bfc4ef..7ac756e 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1AzureArtifactRepository.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1AzureArtifactRepository.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Backoff.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Backoff.ts index 949881e..bd02839 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Backoff.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Backoff.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Backoff is a backoff strategy to use within retryStrategy diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1BasicAuth.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1BasicAuth.ts index 3a3fb74..b614f6c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1BasicAuth.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1BasicAuth.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Cache.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Cache.ts index ce4c4ee..b458ed7 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Cache.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Cache.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ConfigMapKeySelector } from './ioK8sApiCoreV1ConfigMapKeySelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClientCertAuth.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClientCertAuth.ts index 629fb56..703f032 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClientCertAuth.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClientCertAuth.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplate.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplate.ts index ddbd0ff..9f1760f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplate.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplate.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1WorkflowSpec } from './ioArgoprojWorkflowV1alpha1WorkflowSpec'; import { IoK8sApimachineryPkgApisMetaV1ObjectMeta } from './ioK8sApimachineryPkgApisMetaV1ObjectMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateCreateRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateCreateRequest.ts index a615627..a09ae44 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateCreateRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateCreateRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplate } from './ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplate'; import { IoK8sApimachineryPkgApisMetaV1CreateOptions } from './ioK8sApimachineryPkgApisMetaV1CreateOptions'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateLintRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateLintRequest.ts index 6e4e04d..89dd16d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateLintRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateLintRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplate } from './ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplate'; import { IoK8sApimachineryPkgApisMetaV1CreateOptions } from './ioK8sApimachineryPkgApisMetaV1CreateOptions'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateList.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateList.ts index 1e41162..7ab98f7 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateList.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateList.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplate } from './ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplate'; import { IoK8sApimachineryPkgApisMetaV1ListMeta } from './ioK8sApimachineryPkgApisMetaV1ListMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateUpdateRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateUpdateRequest.ts index efe270e..7ebb956 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateUpdateRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplateUpdateRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplate } from './ioArgoprojWorkflowV1alpha1ClusterWorkflowTemplate'; export class IoArgoprojWorkflowV1alpha1ClusterWorkflowTemplateUpdateRequest { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CollectEventRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CollectEventRequest.ts index 1d3ac15..5744a6f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CollectEventRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CollectEventRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1CollectEventRequest { 'name'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Column.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Column.ts index c072be5..2a072f3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Column.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Column.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Column is a custom column that will be exposed in the Workflow List View. diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Condition.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Condition.ts index 2b58b0c..b2920ea 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Condition.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Condition.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1Condition { /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContainerNode.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContainerNode.ts index 3b72c7d..d95bd92 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContainerNode.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContainerNode.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ContainerPort } from './ioK8sApiCoreV1ContainerPort'; import { IoK8sApiCoreV1EnvFromSource } from './ioK8sApiCoreV1EnvFromSource'; import { IoK8sApiCoreV1EnvVar } from './ioK8sApiCoreV1EnvVar'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContainerSetRetryStrategy.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContainerSetRetryStrategy.ts index 245e11d..a98c9a9 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContainerSetRetryStrategy.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContainerSetRetryStrategy.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1ContainerSetRetryStrategy { /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContainerSetTemplate.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContainerSetTemplate.ts index a7b241a..0d70f70 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContainerSetTemplate.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContainerSetTemplate.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ContainerNode } from './ioArgoprojWorkflowV1alpha1ContainerNode'; import { IoArgoprojWorkflowV1alpha1ContainerSetRetryStrategy } from './ioArgoprojWorkflowV1alpha1ContainerSetRetryStrategy'; import { IoK8sApiCoreV1VolumeMount } from './ioK8sApiCoreV1VolumeMount'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContinueOn.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContinueOn.ts index b28e683..06fe8d6 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContinueOn.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ContinueOn.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * ContinueOn defines if a workflow should continue even if a task or step fails/errors. It can be specified if the workflow should continue when the pod errors, fails or both. diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Counter.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Counter.ts index dc48d30..372dca1 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Counter.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Counter.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Counter is a Counter prometheus metric diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CreateCronWorkflowRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CreateCronWorkflowRequest.ts index b81ecc5..50f482b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CreateCronWorkflowRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CreateCronWorkflowRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1CronWorkflow } from './ioArgoprojWorkflowV1alpha1CronWorkflow'; import { IoK8sApimachineryPkgApisMetaV1CreateOptions } from './ioK8sApimachineryPkgApisMetaV1CreateOptions'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CreateS3BucketOptions.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CreateS3BucketOptions.ts index 7f75346..51d5cbd 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CreateS3BucketOptions.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CreateS3BucketOptions.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * CreateS3BucketOptions options used to determine automatic automatic bucket-creation process diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflow.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflow.ts index eaefe9b..1a50db9 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflow.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflow.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1CronWorkflowSpec } from './ioArgoprojWorkflowV1alpha1CronWorkflowSpec'; import { IoArgoprojWorkflowV1alpha1CronWorkflowStatus } from './ioArgoprojWorkflowV1alpha1CronWorkflowStatus'; import { IoK8sApimachineryPkgApisMetaV1ObjectMeta } from './ioK8sApimachineryPkgApisMetaV1ObjectMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowList.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowList.ts index b6827c1..bb061cd 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowList.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowList.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1CronWorkflow } from './ioArgoprojWorkflowV1alpha1CronWorkflow'; import { IoK8sApimachineryPkgApisMetaV1ListMeta } from './ioK8sApimachineryPkgApisMetaV1ListMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowResumeRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowResumeRequest.ts index 12692df..547973d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowResumeRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowResumeRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1CronWorkflowResumeRequest { 'name'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowSpec.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowSpec.ts index 5caf511..2bdf948 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowSpec.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowSpec.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1WorkflowSpec } from './ioArgoprojWorkflowV1alpha1WorkflowSpec'; import { IoK8sApimachineryPkgApisMetaV1ObjectMeta } from './ioK8sApimachineryPkgApisMetaV1ObjectMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowStatus.ts index 3a0aa3d..69555b1 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Condition } from './ioArgoprojWorkflowV1alpha1Condition'; import { IoK8sApiCoreV1ObjectReference } from './ioK8sApiCoreV1ObjectReference'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowSuspendRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowSuspendRequest.ts index 4d19a54..8e9f59a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowSuspendRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1CronWorkflowSuspendRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1CronWorkflowSuspendRequest { 'name'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1DAGTask.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1DAGTask.ts index 3a8d083..3c8b21e 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1DAGTask.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1DAGTask.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Arguments } from './ioArgoprojWorkflowV1alpha1Arguments'; import { IoArgoprojWorkflowV1alpha1ContinueOn } from './ioArgoprojWorkflowV1alpha1ContinueOn'; import { IoArgoprojWorkflowV1alpha1LifecycleHook } from './ioArgoprojWorkflowV1alpha1LifecycleHook'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1DAGTemplate.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1DAGTemplate.ts index decdf25..2673554 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1DAGTemplate.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1DAGTemplate.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1DAGTask } from './ioArgoprojWorkflowV1alpha1DAGTask'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Data.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Data.ts index f92b2f1..5f37289 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Data.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Data.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1DataSource } from './ioArgoprojWorkflowV1alpha1DataSource'; import { IoArgoprojWorkflowV1alpha1TransformationStep } from './ioArgoprojWorkflowV1alpha1TransformationStep'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1DataSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1DataSource.ts index 3d53140..6682f5e 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1DataSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1DataSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ArtifactPaths } from './ioArgoprojWorkflowV1alpha1ArtifactPaths'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Event.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Event.ts index 756c6b5..6e23a5d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Event.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Event.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1Event { /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ExecutorConfig.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ExecutorConfig.ts index 17ef624..49e19d3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ExecutorConfig.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ExecutorConfig.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * ExecutorConfig holds configurations of an executor container. diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GCSArtifact.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GCSArtifact.ts index 7bd181e..86f870d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GCSArtifact.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GCSArtifact.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GCSArtifactRepository.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GCSArtifactRepository.ts index 5b02640..7b679a4 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GCSArtifactRepository.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GCSArtifactRepository.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Gauge.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Gauge.ts index 68d6397..091a905 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Gauge.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Gauge.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Gauge is a Gauge prometheus metric diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GetUserInfoResponse.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GetUserInfoResponse.ts index a7bc486..61d3fda 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GetUserInfoResponse.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GetUserInfoResponse.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1GetUserInfoResponse { 'email'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GitArtifact.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GitArtifact.ts index c7b707b..5826d33 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GitArtifact.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1GitArtifact.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HDFSArtifact.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HDFSArtifact.ts index f809437..f0bdde3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HDFSArtifact.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HDFSArtifact.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ConfigMapKeySelector } from './ioK8sApiCoreV1ConfigMapKeySelector'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HDFSArtifactRepository.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HDFSArtifactRepository.ts index 047ba13..f9630c8 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HDFSArtifactRepository.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HDFSArtifactRepository.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ConfigMapKeySelector } from './ioK8sApiCoreV1ConfigMapKeySelector'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTP.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTP.ts index fa2f10e..8402dde 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTP.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTP.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1HTTPBodySource } from './ioArgoprojWorkflowV1alpha1HTTPBodySource'; import { IoArgoprojWorkflowV1alpha1HTTPHeader } from './ioArgoprojWorkflowV1alpha1HTTPHeader'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPArtifact.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPArtifact.ts index 923eee2..82989e1 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPArtifact.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPArtifact.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1HTTPAuth } from './ioArgoprojWorkflowV1alpha1HTTPAuth'; import { IoArgoprojWorkflowV1alpha1Header } from './ioArgoprojWorkflowV1alpha1Header'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPAuth.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPAuth.ts index dde043c..17eac2c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPAuth.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPAuth.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1BasicAuth } from './ioArgoprojWorkflowV1alpha1BasicAuth'; import { IoArgoprojWorkflowV1alpha1ClientCertAuth } from './ioArgoprojWorkflowV1alpha1ClientCertAuth'; import { IoArgoprojWorkflowV1alpha1OAuth2Auth } from './ioArgoprojWorkflowV1alpha1OAuth2Auth'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPBodySource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPBodySource.ts index f3dac09..f7ed808 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPBodySource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPBodySource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * HTTPBodySource contains the source of the HTTP body. diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPHeader.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPHeader.ts index 52b912b..601d368 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPHeader.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPHeader.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1HTTPHeaderSource } from './ioArgoprojWorkflowV1alpha1HTTPHeaderSource'; export class IoArgoprojWorkflowV1alpha1HTTPHeader { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPHeaderSource.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPHeaderSource.ts index 471b2db..ddddc77 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPHeaderSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1HTTPHeaderSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; export class IoArgoprojWorkflowV1alpha1HTTPHeaderSource { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Header.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Header.ts index 904212c..9e062de 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Header.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Header.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Header indicate a key-value request header to be used when fetching artifacts over HTTP diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Histogram.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Histogram.ts index b6570db..425cfbf 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Histogram.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Histogram.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Histogram is a Histogram prometheus metric diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1InfoResponse.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1InfoResponse.ts index 5a560d8..ff37113 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1InfoResponse.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1InfoResponse.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Column } from './ioArgoprojWorkflowV1alpha1Column'; import { IoArgoprojWorkflowV1alpha1Link } from './ioArgoprojWorkflowV1alpha1Link'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Inputs.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Inputs.ts index f49c6a9..c8cb071 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Inputs.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Inputs.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Artifact } from './ioArgoprojWorkflowV1alpha1Artifact'; import { IoArgoprojWorkflowV1alpha1Parameter } from './ioArgoprojWorkflowV1alpha1Parameter'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LabelKeys.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LabelKeys.ts index 6ba2548..68e9807 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LabelKeys.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LabelKeys.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * LabelKeys is list of keys diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LabelValueFrom.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LabelValueFrom.ts index ae664a3..5e287fc 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LabelValueFrom.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LabelValueFrom.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1LabelValueFrom { 'expression': string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LabelValues.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LabelValues.ts index dcb70ee..876799b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LabelValues.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LabelValues.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Labels is list of workflow labels diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LifecycleHook.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LifecycleHook.ts index 200adca..c7e681b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LifecycleHook.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LifecycleHook.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Arguments } from './ioArgoprojWorkflowV1alpha1Arguments'; import { IoArgoprojWorkflowV1alpha1TemplateRef } from './ioArgoprojWorkflowV1alpha1TemplateRef'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Link.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Link.ts index 671a5ba..fbe051f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Link.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Link.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * A link to another app. diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LintCronWorkflowRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LintCronWorkflowRequest.ts index 7780ea7..10c4408 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LintCronWorkflowRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LintCronWorkflowRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1CronWorkflow } from './ioArgoprojWorkflowV1alpha1CronWorkflow'; export class IoArgoprojWorkflowV1alpha1LintCronWorkflowRequest { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LogEntry.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LogEntry.ts index f532488..36447fe 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LogEntry.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1LogEntry.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1LogEntry { 'content'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ManifestFrom.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ManifestFrom.ts index 47b43e6..bd3563b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ManifestFrom.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ManifestFrom.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Artifact } from './ioArgoprojWorkflowV1alpha1Artifact'; export class IoArgoprojWorkflowV1alpha1ManifestFrom { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MemoizationStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MemoizationStatus.ts index 557d090..f44b9cf 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MemoizationStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MemoizationStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * MemoizationStatus is the status of this memoized node diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Memoize.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Memoize.ts index 06d06c8..89c5f5f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Memoize.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Memoize.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Cache } from './ioArgoprojWorkflowV1alpha1Cache'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Metadata.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Metadata.ts index 532c7cc..9546fa7 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Metadata.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Metadata.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Pod metdata diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MetricLabel.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MetricLabel.ts index d7122c8..fe6e880 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MetricLabel.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MetricLabel.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * MetricLabel is a single label for a prometheus metric diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Metrics.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Metrics.ts index 3c4443b..ae65e0f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Metrics.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Metrics.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Prometheus } from './ioArgoprojWorkflowV1alpha1Prometheus'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Mutex.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Mutex.ts index 6bca43a..c94daf7 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Mutex.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Mutex.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Mutex holds Mutex configuration diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MutexHolding.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MutexHolding.ts index 4779f9b..3609872 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MutexHolding.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MutexHolding.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * MutexHolding describes the mutex and the object which is holding it. diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MutexStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MutexStatus.ts index b0a9d17..17f012c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MutexStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1MutexStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1MutexHolding } from './ioArgoprojWorkflowV1alpha1MutexHolding'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1NodeResult.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1NodeResult.ts index d73e09d..d7b0728 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1NodeResult.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1NodeResult.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Outputs } from './ioArgoprojWorkflowV1alpha1Outputs'; export class IoArgoprojWorkflowV1alpha1NodeResult { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1NodeStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1NodeStatus.ts index cf4647f..28b0c7c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1NodeStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1NodeStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Inputs } from './ioArgoprojWorkflowV1alpha1Inputs'; import { IoArgoprojWorkflowV1alpha1MemoizationStatus } from './ioArgoprojWorkflowV1alpha1MemoizationStatus'; import { IoArgoprojWorkflowV1alpha1NodeSynchronizationStatus } from './ioArgoprojWorkflowV1alpha1NodeSynchronizationStatus'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1NodeSynchronizationStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1NodeSynchronizationStatus.ts index 6a4afb4..2ddce75 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1NodeSynchronizationStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1NodeSynchronizationStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * NodeSynchronizationStatus stores the status of a node diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OAuth2Auth.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OAuth2Auth.ts index f4bc9d5..0da6e2d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OAuth2Auth.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OAuth2Auth.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1OAuth2EndpointParam } from './ioArgoprojWorkflowV1alpha1OAuth2EndpointParam'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OAuth2EndpointParam.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OAuth2EndpointParam.ts index c984b06..06c2f7b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OAuth2EndpointParam.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OAuth2EndpointParam.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * EndpointParam is for requesting optional fields that should be sent in the oauth request diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OSSArtifact.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OSSArtifact.ts index 7861519..1ba6ccb 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OSSArtifact.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OSSArtifact.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1OSSLifecycleRule } from './ioArgoprojWorkflowV1alpha1OSSLifecycleRule'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OSSArtifactRepository.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OSSArtifactRepository.ts index 6fc539e..b03f6c3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OSSArtifactRepository.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OSSArtifactRepository.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1OSSLifecycleRule } from './ioArgoprojWorkflowV1alpha1OSSLifecycleRule'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OSSLifecycleRule.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OSSLifecycleRule.ts index 7a4295b..2084cf7 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OSSLifecycleRule.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1OSSLifecycleRule.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * OSSLifecycleRule specifies how to manage bucket\'s lifecycle diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Outputs.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Outputs.ts index b686850..e4035d0 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Outputs.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Outputs.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Artifact } from './ioArgoprojWorkflowV1alpha1Artifact'; import { IoArgoprojWorkflowV1alpha1Parameter } from './ioArgoprojWorkflowV1alpha1Parameter'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Parameter.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Parameter.ts index 785c95a..1535321 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Parameter.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Parameter.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ValueFrom } from './ioArgoprojWorkflowV1alpha1ValueFrom'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1PodGC.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1PodGC.ts index 751400f..ae08679 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1PodGC.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1PodGC.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApimachineryPkgApisMetaV1LabelSelector } from './ioK8sApimachineryPkgApisMetaV1LabelSelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Prometheus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Prometheus.ts index ca2d4d4..cbf87a2 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Prometheus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Prometheus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Counter } from './ioArgoprojWorkflowV1alpha1Counter'; import { IoArgoprojWorkflowV1alpha1Gauge } from './ioArgoprojWorkflowV1alpha1Gauge'; import { IoArgoprojWorkflowV1alpha1Histogram } from './ioArgoprojWorkflowV1alpha1Histogram'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RawArtifact.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RawArtifact.ts index 787a297..54c4677 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RawArtifact.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RawArtifact.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * RawArtifact allows raw string content to be placed as an artifact in a container diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ResourceTemplate.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ResourceTemplate.ts index 86e8044..926c066 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ResourceTemplate.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ResourceTemplate.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ManifestFrom } from './ioArgoprojWorkflowV1alpha1ManifestFrom'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ResubmitArchivedWorkflowRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ResubmitArchivedWorkflowRequest.ts index d66557b..37d6e09 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ResubmitArchivedWorkflowRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ResubmitArchivedWorkflowRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1ResubmitArchivedWorkflowRequest { 'memoized'?: boolean; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RetryAffinity.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RetryAffinity.ts index 1274f68..bd36168 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RetryAffinity.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RetryAffinity.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * RetryAffinity prevents running steps on the same host. diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RetryArchivedWorkflowRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RetryArchivedWorkflowRequest.ts index 3227d36..7f4b313 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RetryArchivedWorkflowRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RetryArchivedWorkflowRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1RetryArchivedWorkflowRequest { 'name'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RetryStrategy.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RetryStrategy.ts index 08091ab..e9b0fb6 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RetryStrategy.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1RetryStrategy.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Backoff } from './ioArgoprojWorkflowV1alpha1Backoff'; import { IoArgoprojWorkflowV1alpha1RetryAffinity } from './ioArgoprojWorkflowV1alpha1RetryAffinity'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1S3Artifact.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1S3Artifact.ts index 1546793..5ed448c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1S3Artifact.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1S3Artifact.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1CreateS3BucketOptions } from './ioArgoprojWorkflowV1alpha1CreateS3BucketOptions'; import { IoArgoprojWorkflowV1alpha1S3EncryptionOptions } from './ioArgoprojWorkflowV1alpha1S3EncryptionOptions'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1S3ArtifactRepository.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1S3ArtifactRepository.ts index 8b8a044..72f390c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1S3ArtifactRepository.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1S3ArtifactRepository.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1CreateS3BucketOptions } from './ioArgoprojWorkflowV1alpha1CreateS3BucketOptions'; import { IoArgoprojWorkflowV1alpha1S3EncryptionOptions } from './ioArgoprojWorkflowV1alpha1S3EncryptionOptions'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1S3EncryptionOptions.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1S3EncryptionOptions.ts index a9b3a65..727a1d3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1S3EncryptionOptions.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1S3EncryptionOptions.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SecretKeySelector } from './ioK8sApiCoreV1SecretKeySelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ScriptTemplate.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ScriptTemplate.ts index b4a84fa..e2a91f9 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ScriptTemplate.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ScriptTemplate.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ContainerPort } from './ioK8sApiCoreV1ContainerPort'; import { IoK8sApiCoreV1EnvFromSource } from './ioK8sApiCoreV1EnvFromSource'; import { IoK8sApiCoreV1EnvVar } from './ioK8sApiCoreV1EnvVar'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SemaphoreHolding.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SemaphoreHolding.ts index fe41a34..d4da517 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SemaphoreHolding.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SemaphoreHolding.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1SemaphoreHolding { /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SemaphoreRef.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SemaphoreRef.ts index bdeb30a..c467a54 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SemaphoreRef.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SemaphoreRef.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ConfigMapKeySelector } from './ioK8sApiCoreV1ConfigMapKeySelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SemaphoreStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SemaphoreStatus.ts index c392176..19a6b6a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SemaphoreStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SemaphoreStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1SemaphoreHolding } from './ioArgoprojWorkflowV1alpha1SemaphoreHolding'; export class IoArgoprojWorkflowV1alpha1SemaphoreStatus { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Sequence.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Sequence.ts index 840cd74..0f1876f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Sequence.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Sequence.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Sequence expands a workflow step into numeric range diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Submit.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Submit.ts index a1d698c..5cc8bba 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Submit.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Submit.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Arguments } from './ioArgoprojWorkflowV1alpha1Arguments'; import { IoArgoprojWorkflowV1alpha1WorkflowTemplateRef } from './ioArgoprojWorkflowV1alpha1WorkflowTemplateRef'; import { IoK8sApimachineryPkgApisMetaV1ObjectMeta } from './ioK8sApimachineryPkgApisMetaV1ObjectMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SubmitOpts.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SubmitOpts.ts index 1507cdc..61b1ed4 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SubmitOpts.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SubmitOpts.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApimachineryPkgApisMetaV1OwnerReference } from './ioK8sApimachineryPkgApisMetaV1OwnerReference'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SuspendTemplate.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SuspendTemplate.ts index 8dc552f..22e6c99 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SuspendTemplate.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SuspendTemplate.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * SuspendTemplate is a template subtype to suspend a workflow at a predetermined point in time diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Synchronization.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Synchronization.ts index ba2be84..ba79126 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Synchronization.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Synchronization.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Mutex } from './ioArgoprojWorkflowV1alpha1Mutex'; import { IoArgoprojWorkflowV1alpha1SemaphoreRef } from './ioArgoprojWorkflowV1alpha1SemaphoreRef'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SynchronizationStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SynchronizationStatus.ts index 08a85d5..e2728aa 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SynchronizationStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1SynchronizationStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1MutexStatus } from './ioArgoprojWorkflowV1alpha1MutexStatus'; import { IoArgoprojWorkflowV1alpha1SemaphoreStatus } from './ioArgoprojWorkflowV1alpha1SemaphoreStatus'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TTLStrategy.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TTLStrategy.ts index 3183c4a..d46333b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TTLStrategy.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TTLStrategy.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * TTLStrategy is the strategy for the time to live depending on if the workflow succeeded or failed diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TarStrategy.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TarStrategy.ts index 4f1d6b7..5aafe4b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TarStrategy.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TarStrategy.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * TarStrategy will tar and gzip the file or directory when saving diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Template.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Template.ts index 39a161b..1cc6d16 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Template.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Template.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ArtifactLocation } from './ioArgoprojWorkflowV1alpha1ArtifactLocation'; import { IoArgoprojWorkflowV1alpha1ContainerSetTemplate } from './ioArgoprojWorkflowV1alpha1ContainerSetTemplate'; import { IoArgoprojWorkflowV1alpha1DAGTemplate } from './ioArgoprojWorkflowV1alpha1DAGTemplate'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TemplateRef.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TemplateRef.ts index 8219b3d..568da9d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TemplateRef.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TemplateRef.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * TemplateRef is a reference of template resource. diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TransformationStep.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TransformationStep.ts index 9831dcc..f3125e6 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TransformationStep.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1TransformationStep.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1TransformationStep { /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1UpdateCronWorkflowRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1UpdateCronWorkflowRequest.ts index c571994..e46942b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1UpdateCronWorkflowRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1UpdateCronWorkflowRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1CronWorkflow } from './ioArgoprojWorkflowV1alpha1CronWorkflow'; export class IoArgoprojWorkflowV1alpha1UpdateCronWorkflowRequest { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1UserContainer.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1UserContainer.ts index d922851..93aa3cd 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1UserContainer.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1UserContainer.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ContainerPort } from './ioK8sApiCoreV1ContainerPort'; import { IoK8sApiCoreV1EnvFromSource } from './ioK8sApiCoreV1EnvFromSource'; import { IoK8sApiCoreV1EnvVar } from './ioK8sApiCoreV1EnvVar'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ValueFrom.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ValueFrom.ts index d692ebe..da36b91 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ValueFrom.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1ValueFrom.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ConfigMapKeySelector } from './ioK8sApiCoreV1ConfigMapKeySelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Version.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Version.ts index 303cd6c..cefe296 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Version.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Version.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1Version { 'buildDate': string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1VolumeClaimGC.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1VolumeClaimGC.ts index 21a63a9..b05a23b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1VolumeClaimGC.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1VolumeClaimGC.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * VolumeClaimGC describes how to delete volumes from completed Workflows diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Workflow.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Workflow.ts index cd4f596..72e6d78 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Workflow.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1Workflow.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1WorkflowSpec } from './ioArgoprojWorkflowV1alpha1WorkflowSpec'; import { IoArgoprojWorkflowV1alpha1WorkflowStatus } from './ioArgoprojWorkflowV1alpha1WorkflowStatus'; import { IoK8sApimachineryPkgApisMetaV1ObjectMeta } from './ioK8sApimachineryPkgApisMetaV1ObjectMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowCreateRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowCreateRequest.ts index 47d7c1c..7a7710d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowCreateRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowCreateRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Workflow } from './ioArgoprojWorkflowV1alpha1Workflow'; import { IoK8sApimachineryPkgApisMetaV1CreateOptions } from './ioK8sApimachineryPkgApisMetaV1CreateOptions'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowEventBinding.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowEventBinding.ts index 35fa2e7..05cb166 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowEventBinding.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowEventBinding.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1WorkflowEventBindingSpec } from './ioArgoprojWorkflowV1alpha1WorkflowEventBindingSpec'; import { IoK8sApimachineryPkgApisMetaV1ObjectMeta } from './ioK8sApimachineryPkgApisMetaV1ObjectMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowEventBindingList.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowEventBindingList.ts index ac847d4..9288c14 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowEventBindingList.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowEventBindingList.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1WorkflowEventBinding } from './ioArgoprojWorkflowV1alpha1WorkflowEventBinding'; import { IoK8sApimachineryPkgApisMetaV1ListMeta } from './ioK8sApimachineryPkgApisMetaV1ListMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowEventBindingSpec.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowEventBindingSpec.ts index 0f26656..f1d050f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowEventBindingSpec.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowEventBindingSpec.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Event } from './ioArgoprojWorkflowV1alpha1Event'; import { IoArgoprojWorkflowV1alpha1Submit } from './ioArgoprojWorkflowV1alpha1Submit'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowLevelArtifactGC.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowLevelArtifactGC.ts index 5aeb10d..5ee9f68 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowLevelArtifactGC.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowLevelArtifactGC.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Metadata } from './ioArgoprojWorkflowV1alpha1Metadata'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowLintRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowLintRequest.ts index 60af877..6b8c313 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowLintRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowLintRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Workflow } from './ioArgoprojWorkflowV1alpha1Workflow'; export class IoArgoprojWorkflowV1alpha1WorkflowLintRequest { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowList.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowList.ts index de54ca2..f546e76 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowList.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowList.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Workflow } from './ioArgoprojWorkflowV1alpha1Workflow'; import { IoK8sApimachineryPkgApisMetaV1ListMeta } from './ioK8sApimachineryPkgApisMetaV1ListMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowMetadata.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowMetadata.ts index 26a9ca9..c12631f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowMetadata.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowMetadata.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1LabelValueFrom } from './ioArgoprojWorkflowV1alpha1LabelValueFrom'; export class IoArgoprojWorkflowV1alpha1WorkflowMetadata { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowResubmitRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowResubmitRequest.ts index 2d3cc12..6f0490b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowResubmitRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowResubmitRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1WorkflowResubmitRequest { 'memoized'?: boolean; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowResumeRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowResumeRequest.ts index 4b9c067..4ca7159 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowResumeRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowResumeRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1WorkflowResumeRequest { 'name'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowRetryRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowRetryRequest.ts index 16e395d..1f1a39a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowRetryRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowRetryRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1WorkflowRetryRequest { 'name'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSetRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSetRequest.ts index 412e986..cff6fe8 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSetRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSetRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1WorkflowSetRequest { 'message'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSpec.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSpec.ts index 351cd22..7cb56ce 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSpec.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSpec.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Arguments } from './ioArgoprojWorkflowV1alpha1Arguments'; import { IoArgoprojWorkflowV1alpha1ArtifactRepositoryRef } from './ioArgoprojWorkflowV1alpha1ArtifactRepositoryRef'; import { IoArgoprojWorkflowV1alpha1ExecutorConfig } from './ioArgoprojWorkflowV1alpha1ExecutorConfig'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowStatus.ts index e1dcd19..e6d827d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1ArtGCStatus } from './ioArgoprojWorkflowV1alpha1ArtGCStatus'; import { IoArgoprojWorkflowV1alpha1ArtifactRepositoryRefStatus } from './ioArgoprojWorkflowV1alpha1ArtifactRepositoryRefStatus'; import { IoArgoprojWorkflowV1alpha1Condition } from './ioArgoprojWorkflowV1alpha1Condition'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowStep.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowStep.ts index e829683..ad1f7b6 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowStep.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowStep.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Arguments } from './ioArgoprojWorkflowV1alpha1Arguments'; import { IoArgoprojWorkflowV1alpha1ContinueOn } from './ioArgoprojWorkflowV1alpha1ContinueOn'; import { IoArgoprojWorkflowV1alpha1LifecycleHook } from './ioArgoprojWorkflowV1alpha1LifecycleHook'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowStopRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowStopRequest.ts index 4907913..1678f7b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowStopRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowStopRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1WorkflowStopRequest { 'message'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSubmitRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSubmitRequest.ts index e497edd..9e90e71 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSubmitRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSubmitRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1SubmitOpts } from './ioArgoprojWorkflowV1alpha1SubmitOpts'; export class IoArgoprojWorkflowV1alpha1WorkflowSubmitRequest { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSuspendRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSuspendRequest.ts index 1bffc74..c34b99e 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSuspendRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowSuspendRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1WorkflowSuspendRequest { 'name'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTaskSetSpec.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTaskSetSpec.ts index 147215e..720ce1e 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTaskSetSpec.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTaskSetSpec.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Template } from './ioArgoprojWorkflowV1alpha1Template'; export class IoArgoprojWorkflowV1alpha1WorkflowTaskSetSpec { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTaskSetStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTaskSetStatus.ts index ee9d1d1..52f11dc 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTaskSetStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTaskSetStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1NodeResult } from './ioArgoprojWorkflowV1alpha1NodeResult'; export class IoArgoprojWorkflowV1alpha1WorkflowTaskSetStatus { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplate.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplate.ts index 43ea4e0..e135b56 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplate.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplate.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1WorkflowSpec } from './ioArgoprojWorkflowV1alpha1WorkflowSpec'; import { IoK8sApimachineryPkgApisMetaV1ObjectMeta } from './ioK8sApimachineryPkgApisMetaV1ObjectMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateCreateRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateCreateRequest.ts index e993490..35dfb1a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateCreateRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateCreateRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1WorkflowTemplate } from './ioArgoprojWorkflowV1alpha1WorkflowTemplate'; import { IoK8sApimachineryPkgApisMetaV1CreateOptions } from './ioK8sApimachineryPkgApisMetaV1CreateOptions'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateLintRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateLintRequest.ts index 47fb082..6b9a477 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateLintRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateLintRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1WorkflowTemplate } from './ioArgoprojWorkflowV1alpha1WorkflowTemplate'; import { IoK8sApimachineryPkgApisMetaV1CreateOptions } from './ioK8sApimachineryPkgApisMetaV1CreateOptions'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateList.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateList.ts index 8234a9a..03b47dc 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateList.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateList.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1WorkflowTemplate } from './ioArgoprojWorkflowV1alpha1WorkflowTemplate'; import { IoK8sApimachineryPkgApisMetaV1ListMeta } from './ioK8sApimachineryPkgApisMetaV1ListMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateRef.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateRef.ts index bad24b9..fff1c44 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateRef.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateRef.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * WorkflowTemplateRef is a reference to a WorkflowTemplate resource. diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateUpdateRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateUpdateRequest.ts index f0e2db9..914d6e3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateUpdateRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTemplateUpdateRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1WorkflowTemplate } from './ioArgoprojWorkflowV1alpha1WorkflowTemplate'; export class IoArgoprojWorkflowV1alpha1WorkflowTemplateUpdateRequest { diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTerminateRequest.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTerminateRequest.ts index 0138a4f..aab7201 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTerminateRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowTerminateRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoArgoprojWorkflowV1alpha1WorkflowTerminateRequest { 'name'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowWatchEvent.ts b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowWatchEvent.ts index fd2641e..3db3540 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowWatchEvent.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioArgoprojWorkflowV1alpha1WorkflowWatchEvent.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojWorkflowV1alpha1Workflow } from './ioArgoprojWorkflowV1alpha1Workflow'; export class IoArgoprojWorkflowV1alpha1WorkflowWatchEvent { diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1AWSElasticBlockStoreVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1AWSElasticBlockStoreVolumeSource.ts index 01230c3..40b9481 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1AWSElasticBlockStoreVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1AWSElasticBlockStoreVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Represents a Persistent Disk resource in AWS. An AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Affinity.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Affinity.ts index ac51eee..9e82744 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Affinity.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Affinity.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1NodeAffinity } from './ioK8sApiCoreV1NodeAffinity'; import { IoK8sApiCoreV1PodAffinity } from './ioK8sApiCoreV1PodAffinity'; import { IoK8sApiCoreV1PodAntiAffinity } from './ioK8sApiCoreV1PodAntiAffinity'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1AzureDiskVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1AzureDiskVolumeSource.ts index 0281e34..5b2479a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1AzureDiskVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1AzureDiskVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1AzureFileVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1AzureFileVolumeSource.ts index 85ffa85..b4b7f4e 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1AzureFileVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1AzureFileVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * AzureFile represents an Azure File Service mount on the host and bind mount to the pod. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1CSIVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1CSIVolumeSource.ts index 22a0511..29bb53a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1CSIVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1CSIVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1LocalObjectReference } from './ioK8sApiCoreV1LocalObjectReference'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Capabilities.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Capabilities.ts index 0a21977..0350fc8 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Capabilities.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Capabilities.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Adds and removes POSIX capabilities from running containers. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1CephFSVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1CephFSVolumeSource.ts index 99a6c95..ccafb7e 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1CephFSVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1CephFSVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1LocalObjectReference } from './ioK8sApiCoreV1LocalObjectReference'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1CinderVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1CinderVolumeSource.ts index 690271f..78bdbf0 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1CinderVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1CinderVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1LocalObjectReference } from './ioK8sApiCoreV1LocalObjectReference'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapEnvSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapEnvSource.ts index d842f20..3f2c8b4 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapEnvSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapEnvSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * ConfigMapEnvSource selects a ConfigMap to populate the environment variables with. The contents of the target ConfigMap\'s Data field will represent the key-value pairs as environment variables. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapKeySelector.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapKeySelector.ts index ce033f1..90a7e4a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapKeySelector.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapKeySelector.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Selects a key from a ConfigMap. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapProjection.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapProjection.ts index 92da431..9cd317f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapProjection.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapProjection.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1KeyToPath } from './ioK8sApiCoreV1KeyToPath'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapVolumeSource.ts index f55d47f..12af9a9 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ConfigMapVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1KeyToPath } from './ioK8sApiCoreV1KeyToPath'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Container.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Container.ts index 2189ab1..3691eca 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Container.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Container.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ContainerPort } from './ioK8sApiCoreV1ContainerPort'; import { IoK8sApiCoreV1EnvFromSource } from './ioK8sApiCoreV1EnvFromSource'; import { IoK8sApiCoreV1EnvVar } from './ioK8sApiCoreV1EnvVar'; @@ -218,12 +217,12 @@ export class IoK8sApiCoreV1Container { export namespace IoK8sApiCoreV1Container { export enum ImagePullPolicyEnum { - Always = 'Always', - IfNotPresent = 'IfNotPresent', - Never = 'Never' + Always = 'Always' as any, + IfNotPresent = 'IfNotPresent' as any, + Never = 'Never' as any } export enum TerminationMessagePolicyEnum { - FallbackToLogsOnError = 'FallbackToLogsOnError', - File = 'File' + FallbackToLogsOnError = 'FallbackToLogsOnError' as any, + File = 'File' as any } } diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ContainerPort.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ContainerPort.ts index 6e6afa5..fae4e70 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ContainerPort.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ContainerPort.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * ContainerPort represents a network port in a single container. @@ -74,8 +73,8 @@ export class IoK8sApiCoreV1ContainerPort { export namespace IoK8sApiCoreV1ContainerPort { export enum ProtocolEnum { - Sctp = 'SCTP', - Tcp = 'TCP', - Udp = 'UDP' + Sctp = 'SCTP' as any, + Tcp = 'TCP' as any, + Udp = 'UDP' as any } } diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1DownwardAPIProjection.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1DownwardAPIProjection.ts index 4f492e2..c4db4c0 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1DownwardAPIProjection.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1DownwardAPIProjection.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1DownwardAPIVolumeFile } from './ioK8sApiCoreV1DownwardAPIVolumeFile'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1DownwardAPIVolumeFile.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1DownwardAPIVolumeFile.ts index 76f29b8..f216e8f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1DownwardAPIVolumeFile.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1DownwardAPIVolumeFile.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ObjectFieldSelector } from './ioK8sApiCoreV1ObjectFieldSelector'; import { IoK8sApiCoreV1ResourceFieldSelector } from './ioK8sApiCoreV1ResourceFieldSelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1DownwardAPIVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1DownwardAPIVolumeSource.ts index 0e0a779..e4a354d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1DownwardAPIVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1DownwardAPIVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1DownwardAPIVolumeFile } from './ioK8sApiCoreV1DownwardAPIVolumeFile'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EmptyDirVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EmptyDirVolumeSource.ts index c3d943c..9211fc8 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EmptyDirVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EmptyDirVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EnvFromSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EnvFromSource.ts index 234fe4d..7864317 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EnvFromSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EnvFromSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ConfigMapEnvSource } from './ioK8sApiCoreV1ConfigMapEnvSource'; import { IoK8sApiCoreV1SecretEnvSource } from './ioK8sApiCoreV1SecretEnvSource'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EnvVar.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EnvVar.ts index f86a3f6..674af8b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EnvVar.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EnvVar.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1EnvVarSource } from './ioK8sApiCoreV1EnvVarSource'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EnvVarSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EnvVarSource.ts index c78aab3..a519e9c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EnvVarSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EnvVarSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ConfigMapKeySelector } from './ioK8sApiCoreV1ConfigMapKeySelector'; import { IoK8sApiCoreV1ObjectFieldSelector } from './ioK8sApiCoreV1ObjectFieldSelector'; import { IoK8sApiCoreV1ResourceFieldSelector } from './ioK8sApiCoreV1ResourceFieldSelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EphemeralVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EphemeralVolumeSource.ts index 33550b7..927d210 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EphemeralVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EphemeralVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1PersistentVolumeClaimTemplate } from './ioK8sApiCoreV1PersistentVolumeClaimTemplate'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Event.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Event.ts index 3b93303..c8b9da8 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Event.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Event.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1EventSeries } from './ioK8sApiCoreV1EventSeries'; import { IoK8sApiCoreV1EventSource } from './ioK8sApiCoreV1EventSource'; import { IoK8sApiCoreV1ObjectReference } from './ioK8sApiCoreV1ObjectReference'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EventSeries.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EventSeries.ts index 3b34ff3..0ac5d2b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EventSeries.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EventSeries.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EventSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EventSource.ts index 1409b6c..b70c5d7 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EventSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1EventSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * EventSource contains information for an event. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ExecAction.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ExecAction.ts index ce43787..db289a8 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ExecAction.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ExecAction.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * ExecAction describes a \"run in container\" action. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1FCVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1FCVolumeSource.ts index 8043185..a2c0b9f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1FCVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1FCVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1FlexVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1FlexVolumeSource.ts index 1122255..2fa9f9a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1FlexVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1FlexVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1LocalObjectReference } from './ioK8sApiCoreV1LocalObjectReference'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1FlockerVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1FlockerVolumeSource.ts index cc9cb83..ada8803 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1FlockerVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1FlockerVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GCEPersistentDiskVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GCEPersistentDiskVolumeSource.ts index dd1c97d..7463f84 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GCEPersistentDiskVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GCEPersistentDiskVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Represents a Persistent Disk resource in Google Compute Engine. A GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GRPCAction.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GRPCAction.ts index 11a8b66..39a7973 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GRPCAction.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GRPCAction.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class IoK8sApiCoreV1GRPCAction { /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GitRepoVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GitRepoVolumeSource.ts index 5fa97c8..8b812c4 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GitRepoVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GitRepoVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod\'s container. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GlusterfsVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GlusterfsVolumeSource.ts index 1689cca..4fdd125 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GlusterfsVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1GlusterfsVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HTTPGetAction.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HTTPGetAction.ts index 97182c1..e2d74fb 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HTTPGetAction.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HTTPGetAction.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1HTTPHeader } from './ioK8sApiCoreV1HTTPHeader'; /** @@ -72,7 +71,7 @@ export class IoK8sApiCoreV1HTTPGetAction { export namespace IoK8sApiCoreV1HTTPGetAction { export enum SchemeEnum { - Http = 'HTTP', - Https = 'HTTPS' + Http = 'HTTP' as any, + Https = 'HTTPS' as any } } diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HTTPHeader.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HTTPHeader.ts index d365721..30d698d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HTTPHeader.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HTTPHeader.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * HTTPHeader describes a custom header to be used in HTTP probes diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HostAlias.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HostAlias.ts index 687ae23..a965f87 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HostAlias.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HostAlias.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod\'s hosts file. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HostPathVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HostPathVolumeSource.ts index dc630f1..4c468f6 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HostPathVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1HostPathVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ISCSIVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ISCSIVolumeSource.ts index 64ca81f..0d58299 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ISCSIVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ISCSIVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1LocalObjectReference } from './ioK8sApiCoreV1LocalObjectReference'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1KeyToPath.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1KeyToPath.ts index f1a8ab5..325cc6a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1KeyToPath.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1KeyToPath.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Maps a string key to a path within a volume. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Lifecycle.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Lifecycle.ts index c444b5f..683574c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Lifecycle.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Lifecycle.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1LifecycleHandler } from './ioK8sApiCoreV1LifecycleHandler'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1LifecycleHandler.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1LifecycleHandler.ts index 1a746d1..a7e3bc5 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1LifecycleHandler.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1LifecycleHandler.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ExecAction } from './ioK8sApiCoreV1ExecAction'; import { IoK8sApiCoreV1HTTPGetAction } from './ioK8sApiCoreV1HTTPGetAction'; import { IoK8sApiCoreV1TCPSocketAction } from './ioK8sApiCoreV1TCPSocketAction'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1LocalObjectReference.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1LocalObjectReference.ts index f0e9806..62ffb23 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1LocalObjectReference.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1LocalObjectReference.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NFSVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NFSVolumeSource.ts index 04676bd..bde28e4 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NFSVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NFSVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeAffinity.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeAffinity.ts index 3bd37b5..e7510f7 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeAffinity.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeAffinity.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1NodeSelector } from './ioK8sApiCoreV1NodeSelector'; import { IoK8sApiCoreV1PreferredSchedulingTerm } from './ioK8sApiCoreV1PreferredSchedulingTerm'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeSelector.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeSelector.ts index 1481d15..fbeb9e4 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeSelector.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeSelector.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1NodeSelectorTerm } from './ioK8sApiCoreV1NodeSelectorTerm'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeSelectorRequirement.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeSelectorRequirement.ts index e673e91..5668aee 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeSelectorRequirement.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeSelectorRequirement.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values. @@ -56,11 +55,11 @@ export class IoK8sApiCoreV1NodeSelectorRequirement { export namespace IoK8sApiCoreV1NodeSelectorRequirement { export enum OperatorEnum { - DoesNotExist = 'DoesNotExist', - Exists = 'Exists', - Gt = 'Gt', - In = 'In', - Lt = 'Lt', - NotIn = 'NotIn' + DoesNotExist = 'DoesNotExist' as any, + Exists = 'Exists' as any, + Gt = 'Gt' as any, + In = 'In' as any, + Lt = 'Lt' as any, + NotIn = 'NotIn' as any } } diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeSelectorTerm.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeSelectorTerm.ts index e17dda2..b2dd6cd 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeSelectorTerm.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1NodeSelectorTerm.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1NodeSelectorRequirement } from './ioK8sApiCoreV1NodeSelectorRequirement'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ObjectFieldSelector.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ObjectFieldSelector.ts index ddf6426..73b4229 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ObjectFieldSelector.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ObjectFieldSelector.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * ObjectFieldSelector selects an APIVersioned field of an object. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ObjectReference.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ObjectReference.ts index 8206907..eb68806 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ObjectReference.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ObjectReference.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * ObjectReference contains enough information to let you inspect or modify the referred object. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaim.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaim.ts index 5c9e69b..b5b74d9 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaim.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaim.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1PersistentVolumeClaimSpec } from './ioK8sApiCoreV1PersistentVolumeClaimSpec'; import { IoK8sApiCoreV1PersistentVolumeClaimStatus } from './ioK8sApiCoreV1PersistentVolumeClaimStatus'; import { IoK8sApimachineryPkgApisMetaV1ObjectMeta } from './ioK8sApimachineryPkgApisMetaV1ObjectMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimCondition.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimCondition.ts index ccefe63..f11232b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimCondition.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimCondition.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * PersistentVolumeClaimCondition contails details about state of pvc @@ -80,7 +79,7 @@ export class IoK8sApiCoreV1PersistentVolumeClaimCondition { export namespace IoK8sApiCoreV1PersistentVolumeClaimCondition { export enum TypeEnum { - FileSystemResizePending = 'FileSystemResizePending', - Resizing = 'Resizing' + FileSystemResizePending = 'FileSystemResizePending' as any, + Resizing = 'Resizing' as any } } diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimSpec.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimSpec.ts index b9df2f0..82a5a44 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimSpec.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimSpec.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ResourceRequirements } from './ioK8sApiCoreV1ResourceRequirements'; import { IoK8sApiCoreV1TypedLocalObjectReference } from './ioK8sApiCoreV1TypedLocalObjectReference'; import { IoK8sApimachineryPkgApisMetaV1LabelSelector } from './ioK8sApimachineryPkgApisMetaV1LabelSelector'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimStatus.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimStatus.ts index 7fa18ab..24d52b2 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimStatus.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimStatus.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1PersistentVolumeClaimCondition } from './ioK8sApiCoreV1PersistentVolumeClaimCondition'; /** @@ -84,8 +83,8 @@ export class IoK8sApiCoreV1PersistentVolumeClaimStatus { export namespace IoK8sApiCoreV1PersistentVolumeClaimStatus { export enum PhaseEnum { - Bound = 'Bound', - Lost = 'Lost', - Pending = 'Pending' + Bound = 'Bound' as any, + Lost = 'Lost' as any, + Pending = 'Pending' as any } } diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimTemplate.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimTemplate.ts index 4bf4619..70844b6 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimTemplate.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimTemplate.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1PersistentVolumeClaimSpec } from './ioK8sApiCoreV1PersistentVolumeClaimSpec'; import { IoK8sApimachineryPkgApisMetaV1ObjectMeta } from './ioK8sApimachineryPkgApisMetaV1ObjectMeta'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimVolumeSource.ts index 255272b..4f271a6 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PersistentVolumeClaimVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * PersistentVolumeClaimVolumeSource references the user\'s PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system). diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PhotonPersistentDiskVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PhotonPersistentDiskVolumeSource.ts index d2369dd..6680d31 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PhotonPersistentDiskVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PhotonPersistentDiskVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Represents a Photon Controller persistent disk resource. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodAffinity.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodAffinity.ts index 4ecb016..bfaa35e 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodAffinity.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodAffinity.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1PodAffinityTerm } from './ioK8sApiCoreV1PodAffinityTerm'; import { IoK8sApiCoreV1WeightedPodAffinityTerm } from './ioK8sApiCoreV1WeightedPodAffinityTerm'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodAffinityTerm.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodAffinityTerm.ts index bfa8f4a..bd1d91b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodAffinityTerm.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodAffinityTerm.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApimachineryPkgApisMetaV1LabelSelector } from './ioK8sApimachineryPkgApisMetaV1LabelSelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodAntiAffinity.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodAntiAffinity.ts index 2b8c848..d22fa07 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodAntiAffinity.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodAntiAffinity.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1PodAffinityTerm } from './ioK8sApiCoreV1PodAffinityTerm'; import { IoK8sApiCoreV1WeightedPodAffinityTerm } from './ioK8sApiCoreV1WeightedPodAffinityTerm'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodDNSConfig.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodDNSConfig.ts index 251618d..b8f92fd 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodDNSConfig.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodDNSConfig.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1PodDNSConfigOption } from './ioK8sApiCoreV1PodDNSConfigOption'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodDNSConfigOption.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodDNSConfigOption.ts index 9994a37..593c904 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodDNSConfigOption.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodDNSConfigOption.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * PodDNSConfigOption defines DNS resolver options of a pod. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodSecurityContext.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodSecurityContext.ts index 20690c9..45ef007 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodSecurityContext.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PodSecurityContext.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1SELinuxOptions } from './ioK8sApiCoreV1SELinuxOptions'; import { IoK8sApiCoreV1SeccompProfile } from './ioK8sApiCoreV1SeccompProfile'; import { IoK8sApiCoreV1Sysctl } from './ioK8sApiCoreV1Sysctl'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PortworxVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PortworxVolumeSource.ts index fab8150..26b289a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PortworxVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PortworxVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * PortworxVolumeSource represents a Portworx volume resource. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PreferredSchedulingTerm.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PreferredSchedulingTerm.ts index 004416a..44633cc 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PreferredSchedulingTerm.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1PreferredSchedulingTerm.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1NodeSelectorTerm } from './ioK8sApiCoreV1NodeSelectorTerm'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Probe.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Probe.ts index 31ef4e3..6a2877b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Probe.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Probe.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ExecAction } from './ioK8sApiCoreV1ExecAction'; import { IoK8sApiCoreV1GRPCAction } from './ioK8sApiCoreV1GRPCAction'; import { IoK8sApiCoreV1HTTPGetAction } from './ioK8sApiCoreV1HTTPGetAction'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ProjectedVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ProjectedVolumeSource.ts index 92452f1..c2a0ff3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ProjectedVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ProjectedVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1VolumeProjection } from './ioK8sApiCoreV1VolumeProjection'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1QuobyteVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1QuobyteVolumeSource.ts index 12af7af..40e2f63 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1QuobyteVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1QuobyteVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1RBDVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1RBDVolumeSource.ts index 6d1c43c..f52461b 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1RBDVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1RBDVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1LocalObjectReference } from './ioK8sApiCoreV1LocalObjectReference'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ResourceFieldSelector.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ResourceFieldSelector.ts index 3c13112..4fd5056 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ResourceFieldSelector.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ResourceFieldSelector.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * ResourceFieldSelector represents container resources (cpu, memory) and their output format diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ResourceRequirements.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ResourceRequirements.ts index 6c8a4c9..6950118 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ResourceRequirements.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ResourceRequirements.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * ResourceRequirements describes the compute resource requirements. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SELinuxOptions.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SELinuxOptions.ts index c707ad4..fc34e7c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SELinuxOptions.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SELinuxOptions.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * SELinuxOptions are the labels to be applied to the container diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ScaleIOVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ScaleIOVolumeSource.ts index 67231c1..09e5b23 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ScaleIOVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ScaleIOVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1LocalObjectReference } from './ioK8sApiCoreV1LocalObjectReference'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SeccompProfile.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SeccompProfile.ts index 8472e9d..f4b69b2 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SeccompProfile.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SeccompProfile.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * SeccompProfile defines a pod/container\'s seccomp profile settings. Only one profile source may be set. @@ -47,8 +46,8 @@ export class IoK8sApiCoreV1SeccompProfile { export namespace IoK8sApiCoreV1SeccompProfile { export enum TypeEnum { - Localhost = 'Localhost', - RuntimeDefault = 'RuntimeDefault', - Unconfined = 'Unconfined' + Localhost = 'Localhost' as any, + RuntimeDefault = 'RuntimeDefault' as any, + Unconfined = 'Unconfined' as any } } diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretEnvSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretEnvSource.ts index 3a74c6c..4d92906 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretEnvSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretEnvSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * SecretEnvSource selects a Secret to populate the environment variables with. The contents of the target Secret\'s Data field will represent the key-value pairs as environment variables. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretKeySelector.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretKeySelector.ts index 7eced5d..5462514 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretKeySelector.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretKeySelector.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * SecretKeySelector selects a key of a Secret. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretProjection.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretProjection.ts index c9a47c0..7998eff 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretProjection.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretProjection.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1KeyToPath } from './ioK8sApiCoreV1KeyToPath'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretVolumeSource.ts index 3db95d3..b4fce3c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecretVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1KeyToPath } from './ioK8sApiCoreV1KeyToPath'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecurityContext.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecurityContext.ts index 922b54d..636004a 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecurityContext.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1SecurityContext.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1Capabilities } from './ioK8sApiCoreV1Capabilities'; import { IoK8sApiCoreV1SELinuxOptions } from './ioK8sApiCoreV1SELinuxOptions'; import { IoK8sApiCoreV1SeccompProfile } from './ioK8sApiCoreV1SeccompProfile'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ServiceAccountTokenProjection.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ServiceAccountTokenProjection.ts index 83a43e5..be8a961 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ServiceAccountTokenProjection.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ServiceAccountTokenProjection.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * ServiceAccountTokenProjection represents a projected service account token volume. This projection can be used to insert a service account token into the pods runtime filesystem for use against APIs (Kubernetes API Server or otherwise). diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ServicePort.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ServicePort.ts index e0f5609..e44d176 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ServicePort.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1ServicePort.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * ServicePort contains information on service\'s port. @@ -80,8 +79,8 @@ export class IoK8sApiCoreV1ServicePort { export namespace IoK8sApiCoreV1ServicePort { export enum ProtocolEnum { - Sctp = 'SCTP', - Tcp = 'TCP', - Udp = 'UDP' + Sctp = 'SCTP' as any, + Tcp = 'TCP' as any, + Udp = 'UDP' as any } } diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1StorageOSVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1StorageOSVolumeSource.ts index d51d774..78c0bc3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1StorageOSVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1StorageOSVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1LocalObjectReference } from './ioK8sApiCoreV1LocalObjectReference'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Sysctl.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Sysctl.ts index dabcef6..adac713 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Sysctl.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Sysctl.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Sysctl defines a kernel parameter to be set diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1TCPSocketAction.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1TCPSocketAction.ts index 79e2ef5..4e43569 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1TCPSocketAction.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1TCPSocketAction.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * TCPSocketAction describes an action based on opening a socket diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Toleration.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Toleration.ts index 76bb56d..a6f061f 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Toleration.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Toleration.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . @@ -74,12 +73,12 @@ export class IoK8sApiCoreV1Toleration { export namespace IoK8sApiCoreV1Toleration { export enum EffectEnum { - NoExecute = 'NoExecute', - NoSchedule = 'NoSchedule', - PreferNoSchedule = 'PreferNoSchedule' + NoExecute = 'NoExecute' as any, + NoSchedule = 'NoSchedule' as any, + PreferNoSchedule = 'PreferNoSchedule' as any } export enum OperatorEnum { - Equal = 'Equal', - Exists = 'Exists' + Equal = 'Equal' as any, + Exists = 'Exists' as any } } diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1TypedLocalObjectReference.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1TypedLocalObjectReference.ts index 610586b..1963dc9 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1TypedLocalObjectReference.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1TypedLocalObjectReference.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Volume.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Volume.ts index 53f21c1..9db5795 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Volume.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1Volume.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1AWSElasticBlockStoreVolumeSource } from './ioK8sApiCoreV1AWSElasticBlockStoreVolumeSource'; import { IoK8sApiCoreV1AzureDiskVolumeSource } from './ioK8sApiCoreV1AzureDiskVolumeSource'; import { IoK8sApiCoreV1AzureFileVolumeSource } from './ioK8sApiCoreV1AzureFileVolumeSource'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VolumeDevice.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VolumeDevice.ts index 2f2c073..2eb08cb 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VolumeDevice.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VolumeDevice.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * volumeDevice describes a mapping of a raw block device within a container. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VolumeMount.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VolumeMount.ts index a27955f..8bad48c 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VolumeMount.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VolumeMount.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * VolumeMount describes a mounting of a Volume within a container. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VolumeProjection.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VolumeProjection.ts index 2ecc3c5..bb954ce 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VolumeProjection.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VolumeProjection.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1ConfigMapProjection } from './ioK8sApiCoreV1ConfigMapProjection'; import { IoK8sApiCoreV1DownwardAPIProjection } from './ioK8sApiCoreV1DownwardAPIProjection'; import { IoK8sApiCoreV1SecretProjection } from './ioK8sApiCoreV1SecretProjection'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VsphereVirtualDiskVolumeSource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VsphereVirtualDiskVolumeSource.ts index a357d04..c6e9c28 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VsphereVirtualDiskVolumeSource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1VsphereVirtualDiskVolumeSource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * Represents a vSphere volume resource. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1WeightedPodAffinityTerm.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1WeightedPodAffinityTerm.ts index 9b67aec..14334b0 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1WeightedPodAffinityTerm.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1WeightedPodAffinityTerm.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApiCoreV1PodAffinityTerm } from './ioK8sApiCoreV1PodAffinityTerm'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1WindowsSecurityContextOptions.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1WindowsSecurityContextOptions.ts index b3acd33..f952cdb 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1WindowsSecurityContextOptions.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiCoreV1WindowsSecurityContextOptions.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * WindowsSecurityContextOptions contain Windows-specific options and credentials. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApiPolicyV1PodDisruptionBudgetSpec.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApiPolicyV1PodDisruptionBudgetSpec.ts index e5ccb7a..24c5f95 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApiPolicyV1PodDisruptionBudgetSpec.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApiPolicyV1PodDisruptionBudgetSpec.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApimachineryPkgApisMetaV1LabelSelector } from './ioK8sApimachineryPkgApisMetaV1LabelSelector'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1CreateOptions.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1CreateOptions.ts index f83f5be..7acc1c3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1CreateOptions.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1CreateOptions.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * CreateOptions may be provided when creating an API object. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1GroupVersionResource.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1GroupVersionResource.ts index 914cb38..fc9b062 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1GroupVersionResource.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1GroupVersionResource.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * +protobuf.options.(gogoproto.goproto_stringer)=false diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1LabelSelector.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1LabelSelector.ts index a8a7820..9c4e583 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1LabelSelector.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1LabelSelector.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApimachineryPkgApisMetaV1LabelSelectorRequirement } from './ioK8sApimachineryPkgApisMetaV1LabelSelectorRequirement'; /** diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1LabelSelectorRequirement.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1LabelSelectorRequirement.ts index 3f440bb..d3626d3 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1LabelSelectorRequirement.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1LabelSelectorRequirement.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1ListMeta.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1ListMeta.ts index e909da2..cbdfb0d 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1ListMeta.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1ListMeta.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1ManagedFieldsEntry.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1ManagedFieldsEntry.ts index 26ec234..20152d1 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1ManagedFieldsEntry.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1ManagedFieldsEntry.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1ObjectMeta.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1ObjectMeta.ts index 0d9808a..8eb6ac2 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1ObjectMeta.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1ObjectMeta.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoK8sApimachineryPkgApisMetaV1ManagedFieldsEntry } from './ioK8sApimachineryPkgApisMetaV1ManagedFieldsEntry'; import { IoK8sApimachineryPkgApisMetaV1OwnerReference } from './ioK8sApimachineryPkgApisMetaV1OwnerReference'; diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1OwnerReference.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1OwnerReference.ts index 04cfebc..5c83797 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1OwnerReference.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1OwnerReference.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field. diff --git a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1StatusCause.ts b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1StatusCause.ts index a6fbf59..604bdc2 100644 --- a/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1StatusCause.ts +++ b/plugins/argo-workflows/src/api/generated/model/ioK8sApimachineryPkgApisMetaV1StatusCause.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; /** * StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered. diff --git a/plugins/argo-workflows/src/api/generated/model/models.ts b/plugins/argo-workflows/src/api/generated/model/models.ts index 299f31e..ffb4685 100644 --- a/plugins/argo-workflows/src/api/generated/model/models.ts +++ b/plugins/argo-workflows/src/api/generated/model/models.ts @@ -779,7 +779,7 @@ import { StreamResultOfSensorLogEntry } from './streamResultOfSensorLogEntry'; import { StreamResultOfSensorSensorWatchEvent } from './streamResultOfSensorSensorWatchEvent'; /* tslint:disable:no-unused-variable */ -let primitives = [ +const primitives = [ "string", "boolean", "double", @@ -790,7 +790,7 @@ let primitives = [ "any" ]; -let enumsMap: {[index: string]: any} = { +const enumsMap: {[index: string]: any} = { "IoK8sApiCoreV1Container.ImagePullPolicyEnum": IoK8sApiCoreV1Container.ImagePullPolicyEnum, "IoK8sApiCoreV1Container.TerminationMessagePolicyEnum": IoK8sApiCoreV1Container.TerminationMessagePolicyEnum, "IoK8sApiCoreV1ContainerPort.ProtocolEnum": IoK8sApiCoreV1ContainerPort.ProtocolEnum, @@ -804,7 +804,7 @@ let enumsMap: {[index: string]: any} = { "IoK8sApiCoreV1Toleration.OperatorEnum": IoK8sApiCoreV1Toleration.OperatorEnum, } -let typeMap: {[index: string]: any} = { +const typeMap: {[index: string]: any} = { "EventsourceCreateEventSourceRequest": EventsourceCreateEventSourceRequest, "EventsourceEventSourceWatchEvent": EventsourceEventSourceWatchEvent, "EventsourceLogEntry": EventsourceLogEntry, @@ -1196,7 +1196,7 @@ export class ObjectSerializer { return expectedType; } else if (expectedType === "Date") { return expectedType; - } else { + } if (enumsMap[expectedType]) { return expectedType; } @@ -1206,22 +1206,22 @@ export class ObjectSerializer { } // Check the discriminator - let discriminatorProperty = typeMap[expectedType].discriminator; + const discriminatorProperty = typeMap[expectedType].discriminator; if (discriminatorProperty == null) { return expectedType; // the type does not have a discriminator. use it. - } else { + } if (data[discriminatorProperty]) { - var discriminatorType = data[discriminatorProperty]; + const discriminatorType = data[discriminatorProperty]; if(typeMap[discriminatorType]){ return discriminatorType; // use the type given in the discriminator - } else { + } return expectedType; // discriminator did not map to a type - } - } else { + + } return expectedType; // discriminator was not present (or an empty string) - } - } - } + + + } public static serialize(data: any, type: string) { @@ -1232,15 +1232,15 @@ export class ObjectSerializer { } else if (type.lastIndexOf("Array<", 0) === 0) { // string.startsWith pre es6 let subType: string = type.replace("Array<", ""); // Array => Type> subType = subType.substring(0, subType.length - 1); // Type> => Type - let transformedData: any[] = []; + const transformedData: any[] = []; for (let index = 0; index < data.length; index++) { - let datum = data[index]; + const datum = data[index]; transformedData.push(ObjectSerializer.serialize(datum, subType)); } return transformedData; } else if (type === "Date") { return data.toISOString(); - } else { + } if (enumsMap[type]) { return data; } @@ -1252,14 +1252,14 @@ export class ObjectSerializer { type = this.findCorrectType(data, type); // get the map for the correct type. - let attributeTypes = typeMap[type].getAttributeTypeMap(); - let instance: {[index: string]: any} = {}; + const attributeTypes = typeMap[type].getAttributeTypeMap(); + const instance: {[index: string]: any} = {}; for (let index = 0; index < attributeTypes.length; index++) { - let attributeType = attributeTypes[index]; + const attributeType = attributeTypes[index]; instance[attributeType.baseName] = ObjectSerializer.serialize(data[attributeType.name], attributeType.type); } return instance; - } + } public static deserialize(data: any, type: string) { @@ -1272,15 +1272,15 @@ export class ObjectSerializer { } else if (type.lastIndexOf("Array<", 0) === 0) { // string.startsWith pre es6 let subType: string = type.replace("Array<", ""); // Array => Type> subType = subType.substring(0, subType.length - 1); // Type> => Type - let transformedData: any[] = []; + const transformedData: any[] = []; for (let index = 0; index < data.length; index++) { - let datum = data[index]; + const datum = data[index]; transformedData.push(ObjectSerializer.deserialize(datum, subType)); } return transformedData; } else if (type === "Date") { return new Date(data); - } else { + } if (enumsMap[type]) {// is Enum return data; } @@ -1288,14 +1288,14 @@ export class ObjectSerializer { if (!typeMap[type]) { // dont know the type return data; } - let instance = new typeMap[type](); - let attributeTypes = typeMap[type].getAttributeTypeMap(); + const instance = new typeMap[type](); + const attributeTypes = typeMap[type].getAttributeTypeMap(); for (let index = 0; index < attributeTypes.length; index++) { - let attributeType = attributeTypes[index]; + const attributeType = attributeTypes[index]; instance[attributeType.name] = ObjectSerializer.deserialize(data[attributeType.baseName], attributeType.type); } return instance; - } + } } @@ -1325,7 +1325,7 @@ export class HttpBearerAuth implements Authentication { const accessToken = typeof this.accessToken === 'function' ? this.accessToken() : this.accessToken; - requestOptions.headers["Authorization"] = "Bearer " + accessToken; + requestOptions.headers.Authorization = `Bearer ${ accessToken}`; } } } @@ -1338,15 +1338,15 @@ export class ApiKeyAuth implements Authentication { applyToRequest(requestOptions: localVarRequest.Options): void { if (this.location == "query") { - (requestOptions.qs)[this.paramName] = this.apiKey; + (requestOptions.qs as any)[this.paramName] = this.apiKey; } else if (this.location == "header" && requestOptions && requestOptions.headers) { requestOptions.headers[this.paramName] = this.apiKey; } else if (this.location == 'cookie' && requestOptions && requestOptions.headers) { - if (requestOptions.headers['Cookie']) { - requestOptions.headers['Cookie'] += '; ' + this.paramName + '=' + encodeURIComponent(this.apiKey); + if (requestOptions.headers.Cookie) { + requestOptions.headers.Cookie += `; ${ this.paramName }=${ encodeURIComponent(this.apiKey)}`; } else { - requestOptions.headers['Cookie'] = this.paramName + '=' + encodeURIComponent(this.apiKey); + requestOptions.headers.Cookie = `${this.paramName }=${ encodeURIComponent(this.apiKey)}`; } } } @@ -1357,7 +1357,7 @@ export class OAuth implements Authentication { applyToRequest(requestOptions: localVarRequest.Options): void { if (requestOptions && requestOptions.headers) { - requestOptions.headers["Authorization"] = "Bearer " + this.accessToken; + requestOptions.headers.Authorization = `Bearer ${ this.accessToken}`; } } } diff --git a/plugins/argo-workflows/src/api/generated/model/sensorCreateSensorRequest.ts b/plugins/argo-workflows/src/api/generated/model/sensorCreateSensorRequest.ts index c20a1d5..fb6819b 100644 --- a/plugins/argo-workflows/src/api/generated/model/sensorCreateSensorRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/sensorCreateSensorRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Sensor } from './ioArgoprojEventsV1alpha1Sensor'; import { IoK8sApimachineryPkgApisMetaV1CreateOptions } from './ioK8sApimachineryPkgApisMetaV1CreateOptions'; diff --git a/plugins/argo-workflows/src/api/generated/model/sensorLogEntry.ts b/plugins/argo-workflows/src/api/generated/model/sensorLogEntry.ts index c0cb0bc..b478877 100644 --- a/plugins/argo-workflows/src/api/generated/model/sensorLogEntry.ts +++ b/plugins/argo-workflows/src/api/generated/model/sensorLogEntry.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; export class SensorLogEntry { 'dependencyName'?: string; diff --git a/plugins/argo-workflows/src/api/generated/model/sensorSensorWatchEvent.ts b/plugins/argo-workflows/src/api/generated/model/sensorSensorWatchEvent.ts index b013fdc..fa4940c 100644 --- a/plugins/argo-workflows/src/api/generated/model/sensorSensorWatchEvent.ts +++ b/plugins/argo-workflows/src/api/generated/model/sensorSensorWatchEvent.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Sensor } from './ioArgoprojEventsV1alpha1Sensor'; export class SensorSensorWatchEvent { diff --git a/plugins/argo-workflows/src/api/generated/model/sensorUpdateSensorRequest.ts b/plugins/argo-workflows/src/api/generated/model/sensorUpdateSensorRequest.ts index 0ca2f4f..bc3a7dc 100644 --- a/plugins/argo-workflows/src/api/generated/model/sensorUpdateSensorRequest.ts +++ b/plugins/argo-workflows/src/api/generated/model/sensorUpdateSensorRequest.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { IoArgoprojEventsV1alpha1Sensor } from './ioArgoprojEventsV1alpha1Sensor'; export class SensorUpdateSensorRequest { diff --git a/plugins/argo-workflows/src/api/generated/model/streamResultOfEventsourceEventSourceWatchEvent.ts b/plugins/argo-workflows/src/api/generated/model/streamResultOfEventsourceEventSourceWatchEvent.ts index 996fba7..3927a3d 100644 --- a/plugins/argo-workflows/src/api/generated/model/streamResultOfEventsourceEventSourceWatchEvent.ts +++ b/plugins/argo-workflows/src/api/generated/model/streamResultOfEventsourceEventSourceWatchEvent.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { EventsourceEventSourceWatchEvent } from './eventsourceEventSourceWatchEvent'; import { GrpcGatewayRuntimeStreamError } from './grpcGatewayRuntimeStreamError'; diff --git a/plugins/argo-workflows/src/api/generated/model/streamResultOfEventsourceLogEntry.ts b/plugins/argo-workflows/src/api/generated/model/streamResultOfEventsourceLogEntry.ts index aea1cf4..42970fd 100644 --- a/plugins/argo-workflows/src/api/generated/model/streamResultOfEventsourceLogEntry.ts +++ b/plugins/argo-workflows/src/api/generated/model/streamResultOfEventsourceLogEntry.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { EventsourceLogEntry } from './eventsourceLogEntry'; import { GrpcGatewayRuntimeStreamError } from './grpcGatewayRuntimeStreamError'; diff --git a/plugins/argo-workflows/src/api/generated/model/streamResultOfIoArgoprojWorkflowV1alpha1LogEntry.ts b/plugins/argo-workflows/src/api/generated/model/streamResultOfIoArgoprojWorkflowV1alpha1LogEntry.ts index f66ae28..ce031ee 100644 --- a/plugins/argo-workflows/src/api/generated/model/streamResultOfIoArgoprojWorkflowV1alpha1LogEntry.ts +++ b/plugins/argo-workflows/src/api/generated/model/streamResultOfIoArgoprojWorkflowV1alpha1LogEntry.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { GrpcGatewayRuntimeStreamError } from './grpcGatewayRuntimeStreamError'; import { IoArgoprojWorkflowV1alpha1LogEntry } from './ioArgoprojWorkflowV1alpha1LogEntry'; diff --git a/plugins/argo-workflows/src/api/generated/model/streamResultOfIoArgoprojWorkflowV1alpha1WorkflowWatchEvent.ts b/plugins/argo-workflows/src/api/generated/model/streamResultOfIoArgoprojWorkflowV1alpha1WorkflowWatchEvent.ts index 8f3ef6c..9cbe046 100644 --- a/plugins/argo-workflows/src/api/generated/model/streamResultOfIoArgoprojWorkflowV1alpha1WorkflowWatchEvent.ts +++ b/plugins/argo-workflows/src/api/generated/model/streamResultOfIoArgoprojWorkflowV1alpha1WorkflowWatchEvent.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { GrpcGatewayRuntimeStreamError } from './grpcGatewayRuntimeStreamError'; import { IoArgoprojWorkflowV1alpha1WorkflowWatchEvent } from './ioArgoprojWorkflowV1alpha1WorkflowWatchEvent'; diff --git a/plugins/argo-workflows/src/api/generated/model/streamResultOfIoK8sApiCoreV1Event.ts b/plugins/argo-workflows/src/api/generated/model/streamResultOfIoK8sApiCoreV1Event.ts index ebaa78f..846074e 100644 --- a/plugins/argo-workflows/src/api/generated/model/streamResultOfIoK8sApiCoreV1Event.ts +++ b/plugins/argo-workflows/src/api/generated/model/streamResultOfIoK8sApiCoreV1Event.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { GrpcGatewayRuntimeStreamError } from './grpcGatewayRuntimeStreamError'; import { IoK8sApiCoreV1Event } from './ioK8sApiCoreV1Event'; diff --git a/plugins/argo-workflows/src/api/generated/model/streamResultOfSensorLogEntry.ts b/plugins/argo-workflows/src/api/generated/model/streamResultOfSensorLogEntry.ts index 53814dc..ab232b7 100644 --- a/plugins/argo-workflows/src/api/generated/model/streamResultOfSensorLogEntry.ts +++ b/plugins/argo-workflows/src/api/generated/model/streamResultOfSensorLogEntry.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { GrpcGatewayRuntimeStreamError } from './grpcGatewayRuntimeStreamError'; import { SensorLogEntry } from './sensorLogEntry'; diff --git a/plugins/argo-workflows/src/api/generated/model/streamResultOfSensorSensorWatchEvent.ts b/plugins/argo-workflows/src/api/generated/model/streamResultOfSensorSensorWatchEvent.ts index d6fe4ca..f7cb956 100644 --- a/plugins/argo-workflows/src/api/generated/model/streamResultOfSensorSensorWatchEvent.ts +++ b/plugins/argo-workflows/src/api/generated/model/streamResultOfSensorSensorWatchEvent.ts @@ -11,7 +11,6 @@ * Do not edit the class manually. */ -import { RequestFile } from './models'; import { GrpcGatewayRuntimeStreamError } from './grpcGatewayRuntimeStreamError'; import { SensorSensorWatchEvent } from './sensorSensorWatchEvent'; diff --git a/plugins/argo-workflows/src/components/Overview/Overview.tsx b/plugins/argo-workflows/src/components/Overview/Overview.tsx index edfd8fb..2004a62 100644 --- a/plugins/argo-workflows/src/components/Overview/Overview.tsx +++ b/plugins/argo-workflows/src/components/Overview/Overview.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + import { Header, HeaderLabel, diff --git a/plugins/cnoe-ui/dev/index.tsx b/plugins/cnoe-ui/dev/index.tsx index 687e8c6..fddff9c 100644 --- a/plugins/cnoe-ui/dev/index.tsx +++ b/plugins/cnoe-ui/dev/index.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + import { createDevApp } from '@backstage/dev-utils'; import { cnoeFrontendPlugin, CNOEHomepage } from '../src/plugin'; diff --git a/plugins/cnoe-ui/package.json b/plugins/cnoe-ui/package.json index 2eef588..0bed70b 100644 --- a/plugins/cnoe-ui/package.json +++ b/plugins/cnoe-ui/package.json @@ -10,8 +10,12 @@ }, "typesVersions": { "*": { - "alpha": ["src/alpha.tsx"], - "package.json": ["package.json"] + "alpha": [ + "src/alpha.tsx" + ], + "package.json": [ + "package.json" + ] } }, "license": "Apache-2.0", @@ -38,6 +42,9 @@ "@backstage/core-components": "^0.18.8", "@backstage/core-plugin-api": "^1.12.4", "@backstage/frontend-plugin-api": "^0.15.1", + "@backstage/plugin-home": "^0.9.3", + "@backstage/plugin-search": "^1.7.0", + "@backstage/plugin-search-react": "^1.11.0", "@backstage/theme": "^0.7.2", "react-use": "^17.2.4" }, diff --git a/plugins/cnoe-ui/src/alpha.tsx b/plugins/cnoe-ui/src/alpha.tsx index 78002b4..62016c2 100644 --- a/plugins/cnoe-ui/src/alpha.tsx +++ b/plugins/cnoe-ui/src/alpha.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + import { createFrontendPlugin, PageBlueprint } from '@backstage/frontend-plugin-api'; /** diff --git a/plugins/cnoe-ui/src/components/Homepage.tsx b/plugins/cnoe-ui/src/components/Homepage.tsx index 51afaae..96962c4 100644 --- a/plugins/cnoe-ui/src/components/Homepage.tsx +++ b/plugins/cnoe-ui/src/components/Homepage.tsx @@ -2,7 +2,7 @@ import { Content, Page } from '@backstage/core-components'; import { HomePageSearchBar } from '@backstage/plugin-search'; import { SearchContextProvider } from '@backstage/plugin-search-react'; import { useApi, configApiRef } from '@backstage/core-plugin-api'; -import React from 'react'; +import type React from 'react'; import { HomePageToolkit, @@ -68,8 +68,8 @@ export const CNOEHomepage = () => { const baseUrl = gitlabIntegrations[0].getOptionalString('baseUrl'); if (baseUrl) return baseUrl; } - } catch (e) { - console.log('Could not read GitLab config:', e); + } catch { + // GitLab config not available } return 'https://gitlab.com'; }; diff --git a/plugins/cnoe-ui/src/components/logos/LogoBig.tsx b/plugins/cnoe-ui/src/components/logos/LogoBig.tsx index cb2fc06..dadc51c 100644 --- a/plugins/cnoe-ui/src/components/logos/LogoBig.tsx +++ b/plugins/cnoe-ui/src/components/logos/LogoBig.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + // Inline styles replace former makeStyles usage (MUI removed per BUI migration) const svgStyle: React.CSSProperties = { width: 'auto', height: 190 }; diff --git a/plugins/cnoe-ui/src/components/logos/LogoFull.tsx b/plugins/cnoe-ui/src/components/logos/LogoFull.tsx index 68887f2..9e9bd90 100644 --- a/plugins/cnoe-ui/src/components/logos/LogoFull.tsx +++ b/plugins/cnoe-ui/src/components/logos/LogoFull.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + // Inline styles replace former makeStyles usage (MUI removed per BUI migration) const svgStyle: React.CSSProperties = { width: 'auto', height: 90 }; diff --git a/plugins/cnoe-ui/src/components/logos/LogoIcon.tsx b/plugins/cnoe-ui/src/components/logos/LogoIcon.tsx index 9c40df3..9487a0b 100644 --- a/plugins/cnoe-ui/src/components/logos/LogoIcon.tsx +++ b/plugins/cnoe-ui/src/components/logos/LogoIcon.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + // Inline styles replace former makeStyles usage (MUI removed per BUI migration) const svgStyle: React.CSSProperties = { width: 'auto', height: 28 }; diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index e3450e2..4dfaba4 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -50,6 +50,7 @@ "@backstage/errors": "^1.2.7", "@backstage/integration": "^1.20.1", "@backstage/plugin-scaffolder-node": "^0.12.0", + "@gitbeaker/requester-utils": "^43.8.0", "@gitbeaker/rest": "^41.2.0", "luxon": "^3.0.0", "winston": "^3.2.1", @@ -57,6 +58,7 @@ "zod": "^3.22.4" }, "devDependencies": { + "@backstage/backend-test-utils": "^1.11.1", "@backstage/cli": "^0.35.0" } } diff --git a/plugins/terraform-backend/package.json b/plugins/terraform-backend/package.json index 9291620..348cf9a 100644 --- a/plugins/terraform-backend/package.json +++ b/plugins/terraform-backend/package.json @@ -23,10 +23,12 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { + "@aws-sdk/client-s3": "^3.1039.0", "@backstage/backend-common": "^0.25.0", "@backstage/backend-defaults": "^0.16.0", "@backstage/backend-plugin-api": "^1.8.0", "@backstage/config": "^1.3.6", + "@backstage/integration-aws-node": "^0.1.21", "@types/express": "*", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -37,9 +39,11 @@ }, "devDependencies": { "@backstage/cli": "^0.36.0", + "@backstage/core-plugin-api": "^1.12.5", "@backstage/plugin-auth-backend": "^0.27.3", "@backstage/plugin-auth-backend-module-guest-provider": "^0.2.17", "@types/supertest": "^2.0.12", + "jest": "^29.0.0", "msw": "^1.0.0", "supertest": "^6.2.4" }, diff --git a/plugins/terraform-backend/src/service/router.ts b/plugins/terraform-backend/src/service/router.ts index 0002358..eb6bb83 100644 --- a/plugins/terraform-backend/src/service/router.ts +++ b/plugins/terraform-backend/src/service/router.ts @@ -64,7 +64,7 @@ export async function createRouter( Bucket: req.body.Bucket, Prefix: req.body.Key, } - if (token != "1" && token) { + if (token !== "1" && token) { input.ContinuationToken = token; } const command = new ListObjectsV2Command(input); @@ -84,9 +84,11 @@ export async function createRouter( if (fsstat.isDirectory()) { const filenames = fs.readdirSync(req.body.FileLocation); for (const i in filenames) { - responseObject.push({ - Key: `${req.body.FileLocation }/${ filenames[i]}` - }); + if (Object.hasOwn(filenames, i)) { + responseObject.push({ + Key: `${req.body.FileLocation }/${ filenames[i]}` + }); + } } } else if (fsstat.isFile()) { responseObject.push({ diff --git a/plugins/terraform/dev/index.tsx b/plugins/terraform/dev/index.tsx index a701e2d..d6e18be 100644 --- a/plugins/terraform/dev/index.tsx +++ b/plugins/terraform/dev/index.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + import { createDevApp } from '@backstage/dev-utils'; import { terraformPlugin, TerraformPluginPage } from '../src/plugin'; diff --git a/plugins/terraform/package.json b/plugins/terraform/package.json index e81345e..58f63e7 100644 --- a/plugins/terraform/package.json +++ b/plugins/terraform/package.json @@ -10,8 +10,12 @@ }, "typesVersions": { "*": { - "alpha": ["src/alpha.tsx"], - "package.json": ["package.json"] + "alpha": [ + "src/alpha.tsx" + ], + "package.json": [ + "package.json" + ] } }, "license": "Apache-2.0", @@ -35,14 +39,19 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { + "@backstage/catalog-model": "^1.7.7", "@backstage/core-components": "^0.18.8", "@backstage/core-plugin-api": "^1.12.4", + "@backstage/errors": "^1.2.7", "@backstage/frontend-plugin-api": "^0.15.1", + "@backstage/plugin-catalog-react": "^2.1.1", + "@backstage/plugin-kubernetes": "^0.12.18", "@backstage/theme": "^0.7.2", "react-use": "^17.2.4" }, "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" + "react": "^16.13.1 || ^17.0.0", + "react-router-dom": "^7.14.2" }, "devDependencies": { "@backstage/cli": "^0.36.0", diff --git a/plugins/terraform/src/alpha.tsx b/plugins/terraform/src/alpha.tsx index 4c08132..f1e9da0 100644 --- a/plugins/terraform/src/alpha.tsx +++ b/plugins/terraform/src/alpha.tsx @@ -1,4 +1,4 @@ -import React from 'react'; + import { createFrontendPlugin, PageBlueprint } from '@backstage/frontend-plugin-api'; /** diff --git a/plugins/terraform/src/components/MainPageComponent/MainPageComponent.test.tsx b/plugins/terraform/src/components/MainPageComponent/MainPageComponent.test.tsx index d35602f..629063f 100644 --- a/plugins/terraform/src/components/MainPageComponent/MainPageComponent.test.tsx +++ b/plugins/terraform/src/components/MainPageComponent/MainPageComponent.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { MainPageComponent } from './MainPageComponent'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; diff --git a/plugins/terraform/src/components/MainPageComponent/MainPageComponent.tsx b/plugins/terraform/src/components/MainPageComponent/MainPageComponent.tsx index 35aed3e..997c934 100644 --- a/plugins/terraform/src/components/MainPageComponent/MainPageComponent.tsx +++ b/plugins/terraform/src/components/MainPageComponent/MainPageComponent.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Page, Header, Content } from '@backstage/core-components'; import { MainPageFetchComponent } from '../MainPageFetchComponent'; diff --git a/plugins/terraform/src/components/MainPageFetchComponent/MainPageFetchComponent.test.tsx b/plugins/terraform/src/components/MainPageFetchComponent/MainPageFetchComponent.test.tsx index 0d33112..5768616 100644 --- a/plugins/terraform/src/components/MainPageFetchComponent/MainPageFetchComponent.test.tsx +++ b/plugins/terraform/src/components/MainPageFetchComponent/MainPageFetchComponent.test.tsx @@ -1,4 +1,4 @@ -import React, {Dispatch, SetStateAction} from 'react'; +import { type Dispatch, type SetStateAction } from 'react'; import { screen } from '@testing-library/react'; import { OutputTable, ResourceTable } from './MainPageFetchComponent'; import { @@ -7,7 +7,7 @@ import { describe('MainPageFetchComponent', () => { it('renders the outputs table', async () => { - let fakeOutputs = [{ + const fakeOutputs = [{ "type": "string", "value": "Hello World!" }]; @@ -22,7 +22,7 @@ describe('MainPageFetchComponent', () => { }); it('renders the resources table', async () => { - let fakeResources = [ + const fakeResources = [ { "module": "module.eks", "mode": "managed", diff --git a/plugins/terraform/src/components/MainPageFetchComponent/MainPageFetchComponent.tsx b/plugins/terraform/src/components/MainPageFetchComponent/MainPageFetchComponent.tsx index 86c25b8..807b48b 100644 --- a/plugins/terraform/src/components/MainPageFetchComponent/MainPageFetchComponent.tsx +++ b/plugins/terraform/src/components/MainPageFetchComponent/MainPageFetchComponent.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect, Dispatch, SetStateAction } from 'react'; +import { useState, useEffect, type Dispatch, type SetStateAction, type CSSProperties } from 'react'; import { Table, TableColumn, @@ -13,13 +13,13 @@ import { import { useApi } from '@backstage/core-plugin-api'; import { useEntity } from '@backstage/plugin-catalog-react'; // Slide-over panel styles (replaces MUI Drawer) -const drawerOverlayStyle: React.CSSProperties = { +const drawerOverlayStyle: CSSProperties = { position: 'fixed', inset: 0, background: 'rgba(0,0,0,0.3)', zIndex: 1200, }; -const drawerPanelStyle: React.CSSProperties = { +const drawerPanelStyle: CSSProperties = { position: 'fixed', top: 0, right: 0, @@ -43,9 +43,11 @@ import { import { TerraformApiRef } from '../../api'; export const OutputTable = ({ outputs }:any) => { - let data:any = {}; - for(let i in outputs) { - data[Number(i)+1] = outputs[i].value; + const data:any = {}; + for(const i in outputs) { + if (Object.hasOwn(outputs, i)) { + data[Number(i)+1] = outputs[i].value; + } } return ( @@ -122,36 +124,42 @@ export const ResourceDetailComponent = ({resourceDetail,allResources,setResource useEffect(()=>{ const resourceObj = allResources[resourceDetail.name]; - let newDetails:any = {}; - for(let i in resourceObj) { - if(!Array.isArray(resourceObj[i])) { - newDetails[i] = resourceObj[i]; + const newDetails:any = {}; + for(const i in resourceObj) { + if (Object.hasOwn(resourceObj, i)) { + if(!Array.isArray(resourceObj[i])) { + newDetails[i] = resourceObj[i]; + } } } setDetails(newDetails); const newAttributes:any = {}; - for(let i in resourceObj?.instances[0]?.attributes) { - let attribute:any = resourceObj?.instances[0]?.attributes[i]; - if(Array.isArray(attribute) || typeof attribute === "object") { - newAttributes[i] = JSON.stringify(attribute); - } else if (!attribute) { - newAttributes[i] = ""; - } else { - newAttributes[i] = attribute; + for(const i in resourceObj?.instances[0]?.attributes) { + if (Object.hasOwn(resourceObj?.instances[0]?.attributes, i)) { + const attribute:any = resourceObj?.instances[0]?.attributes[i]; + if(Array.isArray(attribute) || typeof attribute === "object") { + newAttributes[i] = JSON.stringify(attribute); + } else if (!attribute) { + newAttributes[i] = ""; + } else { + newAttributes[i] = attribute; + } } } setAttributes(newAttributes); - let newDependNodes:any[] = [{'id': resourceDetail.displayName, 'name': resourceDetail.name}]; - let newDependEdges:any[] = []; - for(let i in resourceObj?.instances[0]?.dependencies) { - newDependNodes.push({ - 'id': resourceObj.instances[0]?.dependencies[i].displayName, 'name': resourceObj.instances[0]?.dependencies[i].name - }); - newDependEdges.push({ - 'from': resourceObj.instances[0]?.dependencies[i].displayName, 'to': resourceDetail.displayName - }); + const newDependNodes:any[] = [{'id': resourceDetail.displayName, 'name': resourceDetail.name}]; + const newDependEdges:any[] = []; + for(const i in resourceObj?.instances[0]?.dependencies) { + if (Object.hasOwn(resourceObj?.instances[0]?.dependencies, i)) { + newDependNodes.push({ + 'id': resourceObj.instances[0]?.dependencies[i].displayName, 'name': resourceObj.instances[0]?.dependencies[i].name + }); + newDependEdges.push({ + 'from': resourceObj.instances[0]?.dependencies[i].displayName, 'to': resourceDetail.displayName + }); + } } setDependNodes(newDependNodes); setDependEdges(newDependEdges); @@ -161,11 +169,11 @@ export const ResourceDetailComponent = ({resourceDetail,allResources,setResource return (
- { } +   - { } + { const [error] = useState(); function parseResources(resourcesArr:any[]) { - let resourcesObj:any = {}; - let nameIndex:any = {}; - let data:any[] = resourcesArr.filter((resource:any)=> { + const resourcesObj:any = {}; + const nameIndex:any = {}; + const data:any[] = resourcesArr.filter((resource:any)=> { if(resource.mode === "managed") { return true; - } else { + } return false; - } + }).map((resource:any)=> { let resourceName:string = ""; if(resource.module) { - resourceName += resource.module.split("[")[0] + "."; + resourceName += `${resource.module.split("[")[0] }.`; } else { - resourceName += resource.mode + "." + resourceName += `${resource.mode }.` } - resourceName += resource.type + "." + resource.name; + resourceName += `${resource.type }.${ resource.name}`; resourcesObj[resourceName] = resource; let displayName = resourceName; if(resource.instances[0].attributes.name) { @@ -253,15 +261,19 @@ export const MainPageFetchComponent = () => { } }); - for(let i in resourcesObj) { - let newDependenciesObj:any[] = []; - if(resourcesObj[i].instances[0].dependencies) { - for(let j in resourcesObj[i].instances[0].dependencies) { - if(nameIndex[resourcesObj[i].instances[0].dependencies[j]]) { - newDependenciesObj.push({name: resourcesObj[i].instances[0].dependencies[j], displayName: nameIndex[resourcesObj[i].instances[0].dependencies[j]]}); + for(const i in resourcesObj) { + if (Object.hasOwn(resourcesObj, i)) { + const newDependenciesObj:any[] = []; + if(resourcesObj[i].instances[0].dependencies) { + for(const j in resourcesObj[i].instances[0].dependencies) { + if (Object.hasOwn(resourcesObj[i].instances[0].dependencies, j)) { + if(nameIndex[resourcesObj[i].instances[0].dependencies[j]]) { + newDependenciesObj.push({name: resourcesObj[i].instances[0].dependencies[j], displayName: nameIndex[resourcesObj[i].instances[0].dependencies[j]]}); + } + } } + resourcesObj[i].instances[0].dependencies = newDependenciesObj; } - resourcesObj[i].instances[0].dependencies = newDependenciesObj; } } @@ -270,45 +282,6 @@ export const MainPageFetchComponent = () => { } useEffect(() => { - const getStateFiles = async() => { - let resourcesArr:any[] = []; - let outputsArr:any[] = []; - let responseJSON:any = {}; - - if(SecretName) { - responseJSON = await apiClient.getSecret(undefined, SecretNamespace, SecretName); - } else if(Bucket) { - responseJSON = await apiClient.s3GetFileList(Bucket,Prefix); - } else if(FileLocation) { - responseJSON = await apiClient.localGetFileList(FileLocation); - } - - for(let i in responseJSON) { - let tfStateJSON:any = {}; - let file = responseJSON[i]; - if(file.TFStateContents) { - tfStateJSON = await apiClient.deflate(file.TFStateContents); - } else if(file.Key && !file.Key?.endsWith("/")) { - tfStateJSON = await apiClient.getTFStateFile(Bucket,file); - } - - if(tfStateJSON.outputs) { - for(let i in tfStateJSON.outputs) { - outputsArr.push(tfStateJSON.outputs[i]); - } - } - if(tfStateJSON.resources) { - for(let i in tfStateJSON.resources) { - resourcesArr.push(tfStateJSON.resources[i]); - } - } - } - - parseResources(resourcesArr); - setOutputs(outputsArr); - setLoading(false); - }; - let Bucket = ""; let Prefix = ""; let FileLocation = ""; @@ -318,7 +291,7 @@ export const MainPageFetchComponent = () => { if(entity.metadata.annotations?.[TERRAFORM_SECRET_NAME]) { SecretName = entity.metadata.annotations?.[TERRAFORM_SECRET_NAME] || ""; } - + if(entity.metadata.annotations?.[TERRAFORM_SECRET_NAMESPACE]) { SecretNamespace = entity.metadata.annotations?.[TERRAFORM_SECRET_NAMESPACE] || ""; } @@ -337,7 +310,53 @@ export const MainPageFetchComponent = () => { } } + const getStateFiles = async() => { + const resourcesArr:any[] = []; + const outputsArr:any[] = []; + let responseJSON:any = {}; + + if(SecretName) { + responseJSON = await apiClient.getSecret(undefined, SecretNamespace, SecretName); + } else if(Bucket) { + responseJSON = await apiClient.s3GetFileList(Bucket,Prefix); + } else if(FileLocation) { + responseJSON = await apiClient.localGetFileList(FileLocation); + } + + for(const i in responseJSON) { + if (Object.hasOwn(responseJSON, i)) { + let tfStateJSON:any = {}; + const file = responseJSON[i]; + if(file.TFStateContents) { + tfStateJSON = await apiClient.deflate(file.TFStateContents); + } else if(file.Key && !file.Key?.endsWith("/")) { + tfStateJSON = await apiClient.getTFStateFile(Bucket,file); + } + + if(tfStateJSON.outputs) { + for(const k in tfStateJSON.outputs) { + if (Object.hasOwn(tfStateJSON.outputs, k)) { + outputsArr.push(tfStateJSON.outputs[k]); + } + } + } + if(tfStateJSON.resources) { + for(const k in tfStateJSON.resources) { + if (Object.hasOwn(tfStateJSON.resources, k)) { + resourcesArr.push(tfStateJSON.resources[k]); + } + } + } + } + } + + parseResources(resourcesArr); + setOutputs(outputsArr); + setLoading(false); + }; + getStateFiles(); + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); if (loading) { @@ -346,15 +365,15 @@ export const MainPageFetchComponent = () => { return ; } - return <> + return (<> {resourceDetail.name && ( <> -
setResourceDetail({})} /> +
setResourceDetail({})} onKeyDown={(e) => { if (e.key === 'Escape') setResourceDetail({}); }} />
)} - ; + ); }; diff --git a/plugins/terraform/src/components/RootComponent/RootComponent.tsx b/plugins/terraform/src/components/RootComponent/RootComponent.tsx index 4ba7902..e6194a5 100644 --- a/plugins/terraform/src/components/RootComponent/RootComponent.tsx +++ b/plugins/terraform/src/components/RootComponent/RootComponent.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Routes, Route } from "react-router-dom"; import { MainPageComponent } from "../MainPageComponent"; diff --git a/yarn.lock b/yarn.lock index 90a7ce3..8357095 100644 --- a/yarn.lock +++ b/yarn.lock @@ -234,6 +234,15 @@ "@aws-sdk/types" "^3.222.0" tslib "^1.11.1" +"@aws-crypto/crc32@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1" + integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + "@aws-crypto/crc32c@3.0.0": version "3.0.0" resolved "https://registry.npmmirror.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" @@ -243,6 +252,15 @@ "@aws-sdk/types" "^3.222.0" tslib "^1.11.1" +"@aws-crypto/crc32c@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz#4e34aab7f419307821509a98b9b08e84e0c1917e" + integrity sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + "@aws-crypto/ie11-detection@^3.0.0": version "3.0.0" resolved "https://registry.npmmirror.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" @@ -263,6 +281,18 @@ "@aws-sdk/util-utf8-browser" "^3.0.0" tslib "^1.11.1" +"@aws-crypto/sha1-browser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz#b0ee2d2821d3861f017e965ef3b4cb38e3b6a0f4" + integrity sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg== + dependencies: + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + "@aws-crypto/sha256-browser@3.0.0": version "3.0.0" resolved "https://registry.npmmirror.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" @@ -322,6 +352,15 @@ dependencies: tslib "^2.6.2" +"@aws-crypto/util@5.2.0", "@aws-crypto/util@^5.2.0": + version "5.2.0" + resolved "https://registry.npmmirror.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" + integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + "@aws-crypto/util@^3.0.0": version "3.0.0" resolved "https://registry.npmmirror.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" @@ -331,15 +370,6 @@ "@aws-sdk/util-utf8-browser" "^3.0.0" tslib "^1.11.1" -"@aws-crypto/util@^5.2.0": - version "5.2.0" - resolved "https://registry.npmmirror.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" - integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.6.2" - "@aws-sdk/abort-controller@^3.347.0": version "3.374.0" resolved "https://registry.npmmirror.com/@aws-sdk/abort-controller/-/abort-controller-3.374.0.tgz#f57ec7e02cdd7f66432e4e71af9e0ac224d6e9b3" @@ -487,6 +517,67 @@ "@smithy/util-utf8" "^2.1.1" tslib "^2.5.0" +"@aws-sdk/client-s3@^3.1039.0": + version "3.1039.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.1039.0.tgz#c832408b1768eebf2c8f7e3b73e0ac176e03d8e4" + integrity sha512-PVH9v0pHYBQnBADSR/m88NgcuJcYqPXfpmkcME66vRF75Y4swwbEVVFbTBFuvxu0YcZiLFXu3lw0FDK00vEa3A== + 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.974.7" + "@aws-sdk/credential-provider-node" "^3.972.38" + "@aws-sdk/middleware-bucket-endpoint" "^3.972.10" + "@aws-sdk/middleware-expect-continue" "^3.972.10" + "@aws-sdk/middleware-flexible-checksums" "^3.974.15" + "@aws-sdk/middleware-host-header" "^3.972.10" + "@aws-sdk/middleware-location-constraint" "^3.972.10" + "@aws-sdk/middleware-logger" "^3.972.10" + "@aws-sdk/middleware-recursion-detection" "^3.972.11" + "@aws-sdk/middleware-sdk-s3" "^3.972.36" + "@aws-sdk/middleware-ssec" "^3.972.10" + "@aws-sdk/middleware-user-agent" "^3.972.37" + "@aws-sdk/region-config-resolver" "^3.972.13" + "@aws-sdk/signature-v4-multi-region" "^3.996.24" + "@aws-sdk/types" "^3.973.8" + "@aws-sdk/util-endpoints" "^3.996.8" + "@aws-sdk/util-user-agent-browser" "^3.972.10" + "@aws-sdk/util-user-agent-node" "^3.973.23" + "@smithy/config-resolver" "^4.4.17" + "@smithy/core" "^3.23.17" + "@smithy/eventstream-serde-browser" "^4.2.14" + "@smithy/eventstream-serde-config-resolver" "^4.3.14" + "@smithy/eventstream-serde-node" "^4.2.14" + "@smithy/fetch-http-handler" "^5.3.17" + "@smithy/hash-blob-browser" "^4.2.15" + "@smithy/hash-node" "^4.2.14" + "@smithy/hash-stream-node" "^4.2.14" + "@smithy/invalid-dependency" "^4.2.14" + "@smithy/md5-js" "^4.2.14" + "@smithy/middleware-content-length" "^4.2.14" + "@smithy/middleware-endpoint" "^4.4.32" + "@smithy/middleware-retry" "^4.5.7" + "@smithy/middleware-serde" "^4.2.20" + "@smithy/middleware-stack" "^4.2.14" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/node-http-handler" "^4.6.1" + "@smithy/protocol-http" "^5.3.14" + "@smithy/smithy-client" "^4.12.13" + "@smithy/types" "^4.14.1" + "@smithy/url-parser" "^4.2.14" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-body-length-browser" "^4.2.2" + "@smithy/util-body-length-node" "^4.2.3" + "@smithy/util-defaults-mode-browser" "^4.3.49" + "@smithy/util-defaults-mode-node" "^4.2.54" + "@smithy/util-endpoints" "^3.4.2" + "@smithy/util-middleware" "^4.2.14" + "@smithy/util-retry" "^4.3.6" + "@smithy/util-stream" "^4.5.25" + "@smithy/util-utf8" "^4.2.2" + "@smithy/util-waiter" "^4.3.0" + tslib "^2.6.2" + "@aws-sdk/client-s3@^3.350.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/client-s3/-/client-s3-3.502.0.tgz#ecbca9f281f909835e9778b7310f48d5bf656a9d" @@ -865,6 +956,34 @@ "@smithy/util-utf8" "^4.2.2" tslib "^2.6.2" +"@aws-sdk/core@^3.974.7": + version "3.974.7" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.974.7.tgz#1b78801c86f54947971ead2d4b9913a2b5b7d860" + integrity sha512-YhRC90ofz5oolTJZlA8voU/oUrCB2azi8Usx51k8hhB5LpWbYQMMXKUqSqkoL0Cru+RQJgWTHpAfEDDIwfUhJw== + dependencies: + "@aws-sdk/types" "^3.973.8" + "@aws-sdk/xml-builder" "^3.972.22" + "@smithy/core" "^3.23.17" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/property-provider" "^4.2.14" + "@smithy/protocol-http" "^5.3.14" + "@smithy/signature-v4" "^5.3.14" + "@smithy/smithy-client" "^4.12.13" + "@smithy/types" "^4.14.1" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-middleware" "^4.2.14" + "@smithy/util-retry" "^4.3.6" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + +"@aws-sdk/crc64-nvme@^3.972.7": + version "3.972.7" + resolved "https://registry.yarnpkg.com/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.7.tgz#0e56fb3ccc0242ed05ffd0bc993d724ce8b3dde2" + integrity sha512-QUagVVBbC8gODCF6e1aV0mE2TXWB9Opz4k8EJFdNrujUVQm5R4AjJa1mpOqzwOuROBzqJU9zawzig7M96L8Ejg== + dependencies: + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-cognito-identity@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.502.0.tgz#251d7d40dbebcf47c397503de222d03474bc7014" @@ -918,6 +1037,17 @@ "@smithy/types" "^4.14.1" tslib "^2.6.2" +"@aws-sdk/credential-provider-env@^3.972.33": + version "3.972.33" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.33.tgz#8a3703571871e85e064f3cabda4b7b37f2344aea" + integrity sha512-bJV7eViSJV6GSuuN+VIdNVPdwPsNSf75BiC2v5alPrjR/OCcqgKwSZInKbDFz9mNeizldsyf67jt6YSIiv53Cw== + dependencies: + "@aws-sdk/core" "^3.974.7" + "@aws-sdk/types" "^3.973.8" + "@smithy/property-provider" "^4.2.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-http@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.502.0.tgz#2472433af812da63f6c859d9a1ff803bcd64a113" @@ -964,6 +1094,22 @@ "@smithy/util-stream" "^4.5.24" tslib "^2.6.2" +"@aws-sdk/credential-provider-http@^3.972.35": + version "3.972.35" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.35.tgz#913eaf3a66484cb1d678ab0691943cb4f57e230d" + integrity sha512-x/BQGEIdq0oI+4WxLjKmnQvT7CnF9r8ezdGt7wXwxb7ckHXQz0Zmgxt8v3Ne0JaT3R5YefmuybHX6E8EnsDXyA== + dependencies: + "@aws-sdk/core" "^3.974.7" + "@aws-sdk/types" "^3.973.8" + "@smithy/fetch-http-handler" "^5.3.17" + "@smithy/node-http-handler" "^4.6.1" + "@smithy/property-provider" "^4.2.14" + "@smithy/protocol-http" "^5.3.14" + "@smithy/smithy-client" "^4.12.13" + "@smithy/types" "^4.14.1" + "@smithy/util-stream" "^4.5.25" + tslib "^2.6.2" + "@aws-sdk/credential-provider-ini@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.502.0.tgz#7bfe665689a7c9002d43d0203ecd5a525ac95bd0" @@ -1018,6 +1164,26 @@ "@smithy/types" "^4.14.1" tslib "^2.6.2" +"@aws-sdk/credential-provider-ini@^3.972.37": + version "3.972.37" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.37.tgz#86e0d92abd993ee8866ff72865c47448a4ac1d16" + integrity sha512-eUTpmWfd/BKsq9medhCRcu+GRAhFP2Zrn7/2jKDHHOOjCkhrMoTp/t4cEthqFoG7gE0VGp5wUxrXTdvBCmSmJg== + dependencies: + "@aws-sdk/core" "^3.974.7" + "@aws-sdk/credential-provider-env" "^3.972.33" + "@aws-sdk/credential-provider-http" "^3.972.35" + "@aws-sdk/credential-provider-login" "^3.972.37" + "@aws-sdk/credential-provider-process" "^3.972.33" + "@aws-sdk/credential-provider-sso" "^3.972.37" + "@aws-sdk/credential-provider-web-identity" "^3.972.37" + "@aws-sdk/nested-clients" "^3.997.5" + "@aws-sdk/types" "^3.973.8" + "@smithy/credential-provider-imds" "^4.2.14" + "@smithy/property-provider" "^4.2.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-login@^3.972.34": version "3.972.34" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.34.tgz#e0a9534df7127d3e32f774dae19c496d68786927" @@ -1032,6 +1198,20 @@ "@smithy/types" "^4.14.1" tslib "^2.6.2" +"@aws-sdk/credential-provider-login@^3.972.37": + version "3.972.37" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.37.tgz#43fd32e4140b4fe3a3c243ab21d0ac306e772e28" + integrity sha512-Ty68y8ISSC+g5Q3D0K8uAaoINwvfaOslnNpsF/LgVUxyosYXHawcK2yV4HLXDVugiTTYLQfJfcw0ce5meAGkKw== + dependencies: + "@aws-sdk/core" "^3.974.7" + "@aws-sdk/nested-clients" "^3.997.5" + "@aws-sdk/types" "^3.973.8" + "@smithy/property-provider" "^4.2.14" + "@smithy/protocol-http" "^5.3.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-node@3.502.0", "@aws-sdk/credential-provider-node@^3.350.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.502.0.tgz#68929ccd6b99075e19e42a47d2baed84f24b0b05" @@ -1085,6 +1265,24 @@ "@smithy/types" "^4.14.1" tslib "^2.6.2" +"@aws-sdk/credential-provider-node@^3.972.38": + version "3.972.38" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.38.tgz#2fc1742b626c6b80534e42ae91359a25262e9e91" + integrity sha512-BQ9XYnBDVxR2HuV5huXYQYF/PZMTsY+EnwfGnCU2cA8Zw63XpkOtPY8WqiMIZMQCrKPQQEiFURS/o9CIolRLqg== + dependencies: + "@aws-sdk/credential-provider-env" "^3.972.33" + "@aws-sdk/credential-provider-http" "^3.972.35" + "@aws-sdk/credential-provider-ini" "^3.972.37" + "@aws-sdk/credential-provider-process" "^3.972.33" + "@aws-sdk/credential-provider-sso" "^3.972.37" + "@aws-sdk/credential-provider-web-identity" "^3.972.37" + "@aws-sdk/types" "^3.973.8" + "@smithy/credential-provider-imds" "^4.2.14" + "@smithy/property-provider" "^4.2.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-process@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.502.0.tgz#6c41d8845a1c7073491a064c158363de04640381" @@ -1119,6 +1317,18 @@ "@smithy/types" "^4.14.1" tslib "^2.6.2" +"@aws-sdk/credential-provider-process@^3.972.33": + version "3.972.33" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.33.tgz#9f5ae9a63e76fcdaf684c03e5479c2e53305ce1c" + integrity sha512-yfjGksI9WQbdMObb0VeLXqzTLI+a0qXLJT9gCDiv0+X/xjPpI3mTz6a5FibrhpuEKIe0gSgvs3MaoFZy5cx4WA== + dependencies: + "@aws-sdk/core" "^3.974.7" + "@aws-sdk/types" "^3.973.8" + "@smithy/property-provider" "^4.2.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-sso@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.502.0.tgz#0ce95599115afdbbeb030a911b63acd662ba7ebf" @@ -1159,6 +1369,20 @@ "@smithy/types" "^4.14.1" tslib "^2.6.2" +"@aws-sdk/credential-provider-sso@^3.972.37": + version "3.972.37" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.37.tgz#91cdba4a3aef35c1b4178610db782dfc8a6bc490" + integrity sha512-fpwE+20ntpp3i9Xb9vUuQfXLDKYHH+5I2V+ZG96SX1nBzrruhy10RXDgmN7t1etOz3c55stlA3TeQASUA451NQ== + dependencies: + "@aws-sdk/core" "^3.974.7" + "@aws-sdk/nested-clients" "^3.997.5" + "@aws-sdk/token-providers" "3.1039.0" + "@aws-sdk/types" "^3.973.8" + "@smithy/property-provider" "^4.2.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-web-identity@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.502.0.tgz#d45a8e78578f4613dc62275548a7196c01f5ed17" @@ -1193,6 +1417,19 @@ "@smithy/types" "^4.14.1" tslib "^2.6.2" +"@aws-sdk/credential-provider-web-identity@^3.972.37": + version "3.972.37" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.37.tgz#9b74f250a644f9d6248950e02ed311b0b4959d3e" + integrity sha512-aryawqyebf+3WhAFNHfF62rekFpYtVcVN7dQ89qnAWsa4n5hJst8qBG6gXC24WHtW7Nnhkf9ScYnjwo0Brn3bw== + dependencies: + "@aws-sdk/core" "^3.974.7" + "@aws-sdk/nested-clients" "^3.997.5" + "@aws-sdk/types" "^3.973.8" + "@smithy/property-provider" "^4.2.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/credential-providers@3.1035.0": version "3.1035.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.1035.0.tgz#133461fc4c45324605ada4cb551006049cc8009c" @@ -1267,6 +1504,19 @@ "@smithy/util-config-provider" "^2.2.1" tslib "^2.5.0" +"@aws-sdk/middleware-bucket-endpoint@^3.972.10": + version "3.972.10" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.10.tgz#d26aa88b441d6d1b6e9275ffdc61e0fbfb55a513" + integrity sha512-Vbc2frZH7wXlMNd+ZZSXUEs/l1Sv8Jj4zUnIfwrYF5lwaLdXHZ9xx4U3rjUcaye3HRhFVc+E5DbBxpRAbB16BA== + dependencies: + "@aws-sdk/types" "^3.973.8" + "@aws-sdk/util-arn-parser" "^3.972.3" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/protocol-http" "^5.3.14" + "@smithy/types" "^4.14.1" + "@smithy/util-config-provider" "^4.2.2" + tslib "^2.6.2" + "@aws-sdk/middleware-expect-continue@3.502.0": version "3.502.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.502.0.tgz#fd265571e1f3a4855714fda34252de751fb054dd" @@ -1277,6 +1527,16 @@ "@smithy/types" "^2.9.1" tslib "^2.5.0" +"@aws-sdk/middleware-expect-continue@^3.972.10": + version "3.972.10" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.10.tgz#b685287951156a5d093cfdd37364894c6a8c966c" + integrity sha512-2Yn0f1Qiq/DjxYR3wfI3LokXnjOhFM7Ssn4LTdFDIxRMCE6I32MAsVnhPX1cUZsuVA9tiZtwwhlSLAtFGxAZlQ== + dependencies: + "@aws-sdk/types" "^3.973.8" + "@smithy/protocol-http" "^5.3.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/middleware-flexible-checksums@3.502.0": version "3.502.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.502.0.tgz#e4fa059f3c4603bd815f16d69e1c4277c4c4830a" @@ -1291,6 +1551,26 @@ "@smithy/util-utf8" "^2.1.1" tslib "^2.5.0" +"@aws-sdk/middleware-flexible-checksums@^3.974.15": + version "3.974.15" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.974.15.tgz#11e688424dd08fae175d08597dd2a7edeaa4773a" + integrity sha512-j4Zp7rA1HfhDTteICnx/tPax4N/v5wmytgguXExUGyEwQ8Ug4EBA4kjp9puFAN1UZoBVpxoiXMiuTFvjaHjeEw== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@aws-crypto/crc32c" "5.2.0" + "@aws-crypto/util" "5.2.0" + "@aws-sdk/core" "^3.974.7" + "@aws-sdk/crc64-nvme" "^3.972.7" + "@aws-sdk/types" "^3.973.8" + "@smithy/is-array-buffer" "^4.2.2" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/protocol-http" "^5.3.14" + "@smithy/types" "^4.14.1" + "@smithy/util-middleware" "^4.2.14" + "@smithy/util-stream" "^4.5.25" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + "@aws-sdk/middleware-host-header@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.502.0.tgz#2651fb3509990271c89eb50133fb17cb8ae435f6" @@ -1330,6 +1610,15 @@ "@smithy/types" "^2.9.1" tslib "^2.5.0" +"@aws-sdk/middleware-location-constraint@^3.972.10": + version "3.972.10" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.10.tgz#5265ea472f735c50b016bb5d1b46c7a616653733" + integrity sha512-rI3NZvJcEvjoD0+0PI0iUAwlPw2IlSlhyvgBK/3WkKJQE/YiKFedd9dMN2lVacdNxPNhxL/jzQaKQdrGtQagjQ== + dependencies: + "@aws-sdk/types" "^3.973.8" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/middleware-logger@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/middleware-logger/-/middleware-logger-3.502.0.tgz#558cefdd233779f15687957f9f07497199b22d72" @@ -1423,6 +1712,26 @@ "@smithy/util-utf8" "^4.2.2" tslib "^2.6.2" +"@aws-sdk/middleware-sdk-s3@^3.972.36": + version "3.972.36" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.36.tgz#d67c778ca2c385a35ef48986d547dd4693fb6a0a" + integrity sha512-YhPix+0x/MdQrb1Ug1GDKeS5fqylIy+naz800asX8II4jqfTk2KY2KhmmYCwZcky8YWtRQQwWCGdoqeAnip8Uw== + dependencies: + "@aws-sdk/core" "^3.974.7" + "@aws-sdk/types" "^3.973.8" + "@aws-sdk/util-arn-parser" "^3.972.3" + "@smithy/core" "^3.23.17" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/protocol-http" "^5.3.14" + "@smithy/signature-v4" "^5.3.14" + "@smithy/smithy-client" "^4.12.13" + "@smithy/types" "^4.14.1" + "@smithy/util-config-provider" "^4.2.2" + "@smithy/util-middleware" "^4.2.14" + "@smithy/util-stream" "^4.5.25" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + "@aws-sdk/middleware-signing@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/middleware-signing/-/middleware-signing-3.502.0.tgz#48b3503147eecb1a53a63633462de353668f635a" @@ -1445,6 +1754,15 @@ "@smithy/types" "^2.9.1" tslib "^2.5.0" +"@aws-sdk/middleware-ssec@^3.972.10": + version "3.972.10" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.10.tgz#46b5c030c0116f51110e18042ad3cf863ab5c81c" + integrity sha512-Gli9A0u8EVVb+5bFDGS/QbSVg28w/wpEidg1ggVcSj65BDTdGR6punsOcVjqdiu1i42WHWo51MCvARPIIz9juw== + dependencies: + "@aws-sdk/types" "^3.973.8" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/middleware-user-agent@3.502.0": version "3.502.0" resolved "https://registry.npmmirror.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.502.0.tgz#dd740f150d6f3110cf5b08fedf361d202f899c93" @@ -1481,6 +1799,20 @@ "@smithy/util-retry" "^4.3.3" tslib "^2.6.2" +"@aws-sdk/middleware-user-agent@^3.972.37": + version "3.972.37" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.37.tgz#61ee85d964a3f36091a5b36dea630fb30e8e6913" + integrity sha512-N1oNpdiLoVAWYD3WFBnUi3LlfoDA06ZHo4ozyjbsJNLvILzvt//0CnR8N+CZ0NWeYgVB/5V59ivixHCWCx2ALw== + dependencies: + "@aws-sdk/core" "^3.974.7" + "@aws-sdk/types" "^3.973.8" + "@aws-sdk/util-endpoints" "^3.996.8" + "@smithy/core" "^3.23.17" + "@smithy/protocol-http" "^5.3.14" + "@smithy/types" "^4.14.1" + "@smithy/util-retry" "^4.3.6" + tslib "^2.6.2" + "@aws-sdk/nested-clients@^3.997.2": version "3.997.2" resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.997.2.tgz#becaf989147403f9290113c1938dd36d21b9476b" @@ -1526,6 +1858,51 @@ "@smithy/util-utf8" "^4.2.2" tslib "^2.6.2" +"@aws-sdk/nested-clients@^3.997.5": + version "3.997.5" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.997.5.tgz#0b66825b14b1a06b43b71e95354f22cb6b4926df" + integrity sha512-jGFr6DxtcMTmzOkG/a0jCZYv4BBDmeNYVeO+/memSoDkYCJu4Y58xviYmzwJfYyIVSts+X/BVjJm1uGBnwHEMg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "^3.974.7" + "@aws-sdk/middleware-host-header" "^3.972.10" + "@aws-sdk/middleware-logger" "^3.972.10" + "@aws-sdk/middleware-recursion-detection" "^3.972.11" + "@aws-sdk/middleware-user-agent" "^3.972.37" + "@aws-sdk/region-config-resolver" "^3.972.13" + "@aws-sdk/signature-v4-multi-region" "^3.996.24" + "@aws-sdk/types" "^3.973.8" + "@aws-sdk/util-endpoints" "^3.996.8" + "@aws-sdk/util-user-agent-browser" "^3.972.10" + "@aws-sdk/util-user-agent-node" "^3.973.23" + "@smithy/config-resolver" "^4.4.17" + "@smithy/core" "^3.23.17" + "@smithy/fetch-http-handler" "^5.3.17" + "@smithy/hash-node" "^4.2.14" + "@smithy/invalid-dependency" "^4.2.14" + "@smithy/middleware-content-length" "^4.2.14" + "@smithy/middleware-endpoint" "^4.4.32" + "@smithy/middleware-retry" "^4.5.7" + "@smithy/middleware-serde" "^4.2.20" + "@smithy/middleware-stack" "^4.2.14" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/node-http-handler" "^4.6.1" + "@smithy/protocol-http" "^5.3.14" + "@smithy/smithy-client" "^4.12.13" + "@smithy/types" "^4.14.1" + "@smithy/url-parser" "^4.2.14" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-body-length-browser" "^4.2.2" + "@smithy/util-body-length-node" "^4.2.3" + "@smithy/util-defaults-mode-browser" "^4.3.49" + "@smithy/util-defaults-mode-node" "^4.2.54" + "@smithy/util-endpoints" "^3.4.2" + "@smithy/util-middleware" "^4.2.14" + "@smithy/util-retry" "^4.3.6" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + "@aws-sdk/rds-signer@^3.0.0": version "3.1035.0" resolved "https://registry.yarnpkg.com/@aws-sdk/rds-signer/-/rds-signer-3.1035.0.tgz#d787e45a61f9be497453717060b48ce0d9547fcc" @@ -1603,6 +1980,18 @@ "@smithy/types" "^4.14.1" tslib "^2.6.2" +"@aws-sdk/signature-v4-multi-region@^3.996.24": + version "3.996.24" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.24.tgz#efe204595832e418aad404163f55d7ffc7d21dad" + integrity sha512-amP7tLikppN940wbBFISYqiuzVmpzMS9U3mcgtmVLjX4fdWI/SNCvrXv6ZxfVzTT4cT0rPKOLhFah2xLwzREWw== + dependencies: + "@aws-sdk/middleware-sdk-s3" "^3.972.36" + "@aws-sdk/types" "^3.973.8" + "@smithy/protocol-http" "^5.3.14" + "@smithy/signature-v4" "^5.3.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/signature-v4@^3.347.0": version "3.374.0" resolved "https://registry.npmmirror.com/@aws-sdk/signature-v4/-/signature-v4-3.374.0.tgz#bd727f4c392acb81bc667aa4cfceeba608250771" @@ -1624,6 +2013,19 @@ "@smithy/types" "^4.14.1" tslib "^2.6.2" +"@aws-sdk/token-providers@3.1039.0": + version "3.1039.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.1039.0.tgz#98fac2aa3c22d2ba8b2375d35dcd67f96ea3e990" + integrity sha512-NMSFL2HwkAOoCeLCQiqoOq5pT3vVbSjww2QZTuYgYknVwhhv125PSDzZIcL5EYnlxuPWjEOdauZK+FspkZDVdw== + dependencies: + "@aws-sdk/core" "^3.974.7" + "@aws-sdk/nested-clients" "^3.997.5" + "@aws-sdk/types" "^3.973.8" + "@smithy/property-provider" "^4.2.14" + "@smithy/shared-ini-file-loader" "^4.4.9" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@aws-sdk/token-providers@3.502.0": version "3.502.0" resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.502.0.tgz#d477638d5bd0c47c881e63fa6395b238fe4a021c" @@ -1795,6 +2197,18 @@ "@smithy/util-config-provider" "^4.2.2" tslib "^2.6.2" +"@aws-sdk/util-user-agent-node@^3.973.23": + version "3.973.23" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.23.tgz#3e29535e887ad72deaecdfd4667ec710e4086f90" + integrity sha512-gGwq8L2Euw0aNG6Ey4EktiAo3fSCVoDy1CaBIthd+oeaKHPXUrNaApMewQ6La5Hv0lcznOtECZaNvYyc5LXXfA== + dependencies: + "@aws-sdk/middleware-user-agent" "^3.972.37" + "@aws-sdk/types" "^3.973.8" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/types" "^4.14.1" + "@smithy/util-config-provider" "^4.2.2" + tslib "^2.6.2" + "@aws-sdk/util-utf8-browser@^3.0.0": version "3.259.0" resolved "https://registry.npmmirror.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" @@ -1819,6 +2233,16 @@ fast-xml-parser "5.5.8" tslib "^2.6.2" +"@aws-sdk/xml-builder@^3.972.22": + version "3.972.22" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.972.22.tgz#1e44ca9fd9c3fdc3d9af9540ced024f34cfc60b2" + integrity sha512-PMYKKtJd70IsSG0yHrdAbxBr+ZWBKLvzFZfD3/urxgf6hXVMzuU5M+3MJ5G67RpOmLBu1fAUN65SbWuKUCOlAA== + dependencies: + "@nodable/entities" "2.1.0" + "@smithy/types" "^4.14.1" + fast-xml-parser "5.7.2" + tslib "^2.6.2" + "@aws/lambda-invoke-store@^0.2.2": version "0.2.4" resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz#802f6a50f6b6589063ef63ba8acdee86fcb9f395" @@ -2012,6 +2436,68 @@ "@babel/highlight" "^7.24.7" picocolors "^1.0.0" +"@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c" + integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== + dependencies: + "@babel/helper-validator-identifier" "^7.28.5" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.28.6": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.0.tgz#00d03e8c0ac24dd9be942c5370990cbe1f17d88d" + integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.0.tgz#5286ad785df7f79d656e88ce86e650d16ca5f322" + integrity sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA== + 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" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.29.0", "@babel/generator@^7.7.2": + version "7.29.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.1.tgz#d09876290111abbb00ef962a7b83a5307fba0d50" + integrity sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw== + dependencies: + "@babel/parser" "^7.29.0" + "@babel/types" "^7.29.0" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + +"@babel/helper-compilation-targets@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz#32c4a3f41f12ed1532179b108a4d746e105c2b25" + integrity sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA== + dependencies: + "@babel/compat-data" "^7.28.6" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + "@babel/helper-module-imports@^7.16.7": version "7.22.15" resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" @@ -2019,11 +2505,38 @@ dependencies: "@babel/types" "^7.22.15" +"@babel/helper-module-imports@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz#60632cbd6ffb70b22823187201116762a03e2d5c" + integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw== + dependencies: + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" + +"@babel/helper-module-transforms@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz#9312d9d9e56edc35aeb6e95c25d4106b50b9eb1e" + integrity sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA== + dependencies: + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.6" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.28.6", "@babel/helper-plugin-utils@^7.8.0": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz#6f13ea251b68c8532e985fd532f28741a8af9ac8" + integrity sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug== + "@babel/helper-string-parser@^7.23.4": version "7.23.4" resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" @@ -2034,6 +2547,24 @@ resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== +"@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + +"@babel/helpers@^7.28.6": + version "7.29.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.29.2.tgz#9cfbccb02b8e229892c0b07038052cc1a8709c49" + integrity sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw== + dependencies: + "@babel/template" "^7.28.6" + "@babel/types" "^7.29.0" + "@babel/highlight@^7.0.0", "@babel/highlight@^7.23.4": version "7.23.4" resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" @@ -2053,6 +2584,132 @@ js-tokens "^4.0.0" picocolors "^1.0.0" +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.28.6", "@babel/parser@^7.29.0": + version "7.29.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.2.tgz#58bd50b9a7951d134988a1ae177a35ef9a703ba1" + integrity sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA== + dependencies: + "@babel/types" "^7.29.0" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz#b71d5914665f60124e133696f17cd7669062c503" + integrity sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw== + dependencies: + "@babel/helper-plugin-utils" "^7.28.6" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz#f8ca28bbd84883b5fea0e447c635b81ba73997ee" + integrity sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w== + dependencies: + "@babel/helper-plugin-utils" "^7.28.6" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz#c7b2ddf1d0a811145b1de800d1abd146af92e3a2" + integrity sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A== + dependencies: + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/runtime-corejs3@^7.20.7", "@babel/runtime-corejs3@^7.22.15": version "7.23.9" resolved "https://registry.npmmirror.com/@babel/runtime-corejs3/-/runtime-corejs3-7.23.9.tgz#1b43062a13ecb60158aecdd81bc3fab4108b7cbc" @@ -2075,11 +2732,41 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.18.9", "@babel/runtime@^7.20.13", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.26.0", "@babel/runtime@^7.28.4": +"@babel/runtime@^7.18.9", "@babel/runtime@^7.20.13", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.26.0", "@babel/runtime@^7.28.4", "@babel/runtime@^7.29.2": version "7.29.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.2.tgz#9a6e2d05f4b6692e1801cd4fb176ad823930ed5e" integrity sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g== +"@babel/template@^7.28.6", "@babel/template@^7.3.3": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.28.6.tgz#0e7e56ecedb78aeef66ce7972b082fce76a23e57" + integrity sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ== + dependencies: + "@babel/code-frame" "^7.28.6" + "@babel/parser" "^7.28.6" + "@babel/types" "^7.28.6" + +"@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a" + integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA== + dependencies: + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.29.0" + "@babel/template" "^7.28.6" + "@babel/types" "^7.29.0" + debug "^4.3.1" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.28.2", "@babel/types@^7.28.6", "@babel/types@^7.29.0", "@babel/types@^7.3.3": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7" + integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/types@^7.22.15": version "7.23.9" resolved "https://registry.npmmirror.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" @@ -2652,7 +3339,7 @@ resolved "https://registry.yarnpkg.com/@backstage/cli-common/-/cli-common-0.1.14.tgz#2291520acfbac860a05dd48fc3b876d5cd789b76" integrity sha512-4kGWGrFuxoaCne2aHCOVW+vi8y2MLEMEj785SEApMG2J8jXJXUuIOzWw0MrN0pM1FqBXDb6aeQd+bmQMK/Ci+w== -"@backstage/cli-common@^0.1.18": +"@backstage/cli-common@^0.1.15", "@backstage/cli-common@^0.1.18": version "0.1.18" resolved "https://registry.yarnpkg.com/@backstage/cli-common/-/cli-common-0.1.18.tgz#1aacaa648dc0ac6a5238cec52c6712e8582f3ad3" integrity sha512-6Ks0tnqJpZPppwq4F6Ft3AvmUUe7NAqzKtXMKSmePjBtGgoqVn/dB8HJSZcW4UMooiGGDjGEz2bpWQ/qH3bWQw== @@ -2961,6 +3648,114 @@ optionalDependencies: keytar "^7.9.0" +"@backstage/cli@^0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@backstage/cli/-/cli-0.34.6.tgz#a62d5708658ed8b835c9b65350e0b1ce1bfadfef" + integrity sha512-nBZJqzMpu5AMbyegIvr7qr+z3DgWjkO0HwhogfZtP3prwTBbpzX8z/lLqmv8SF2ic8dutyzVDvkEwo6e0YyiWg== + dependencies: + "@backstage/catalog-model" "^1.7.6" + "@backstage/cli-common" "^0.1.15" + "@backstage/cli-node" "^0.2.15" + "@backstage/config" "^1.3.6" + "@backstage/config-loader" "^1.10.6" + "@backstage/errors" "^1.2.7" + "@backstage/eslint-plugin" "^0.2.0" + "@backstage/integration" "^1.18.2" + "@backstage/release-manifests" "^0.0.13" + "@backstage/types" "^1.2.2" + "@manypkg/get-packages" "^1.1.3" + "@module-federation/enhanced" "^0.9.0" + "@octokit/request" "^8.0.0" + "@rollup/plugin-commonjs" "^26.0.0" + "@rollup/plugin-json" "^6.0.0" + "@rollup/plugin-node-resolve" "^15.0.0" + "@rollup/plugin-yaml" "^4.0.0" + "@rspack/core" "^1.4.11" + "@rspack/dev-server" "^1.1.4" + "@rspack/plugin-react-refresh" "^1.4.3" + "@spotify/eslint-config-base" "^15.0.0" + "@spotify/eslint-config-react" "^15.0.0" + "@spotify/eslint-config-typescript" "^15.0.0" + "@swc/core" "^1.3.46" + "@swc/helpers" "^0.5.0" + "@swc/jest" "^0.2.22" + "@types/jest" "^29.5.11" + "@types/webpack-env" "^1.15.2" + "@typescript-eslint/eslint-plugin" "^8.17.0" + "@typescript-eslint/parser" "^8.16.0" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "^3.0.0" + bfj "^8.0.0" + buffer "^6.0.3" + chalk "^4.0.0" + chokidar "^3.3.1" + commander "^12.0.0" + cross-fetch "^4.0.0" + cross-spawn "^7.0.3" + css-loader "^6.5.1" + ctrlc-windows "^2.1.0" + esbuild "^0.25.0" + eslint "^8.6.0" + eslint-config-prettier "^9.0.0" + eslint-formatter-friendly "^7.0.0" + eslint-plugin-deprecation "^3.0.0" + eslint-plugin-import "^2.31.0" + eslint-plugin-jest "^28.9.0" + eslint-plugin-jsx-a11y "^6.10.2" + eslint-plugin-react "^7.37.2" + eslint-plugin-react-hooks "^5.0.0" + eslint-plugin-unused-imports "^4.1.4" + eslint-rspack-plugin "^4.2.1" + express "^4.17.1" + fs-extra "^11.2.0" + git-url-parse "^15.0.0" + glob "^7.1.7" + global-agent "^3.0.0" + globby "^11.1.0" + handlebars "^4.7.3" + html-webpack-plugin "^5.6.3" + inquirer "^8.2.0" + jest "^29.7.0" + jest-cli "^29.7.0" + jest-css-modules "^2.1.0" + jest-environment-jsdom "^29.0.2" + jest-runtime "^29.0.2" + json-schema "^0.4.0" + lodash "^4.17.21" + minimatch "^9.0.0" + node-stdlib-browser "^1.3.1" + npm-packlist "^5.0.0" + ora "^5.3.0" + p-queue "^6.6.2" + pirates "^4.0.6" + postcss "^8.1.0" + process "^0.11.10" + raw-loader "^4.0.2" + react-dev-utils "^12.0.0-next.60" + react-refresh "^0.17.0" + recursive-readdir "^2.2.2" + replace-in-file "^7.1.0" + rollup "^4.27.3" + rollup-plugin-dts "^6.1.0" + rollup-plugin-esbuild "^6.1.1" + rollup-plugin-postcss "^4.0.0" + rollup-pluginutils "^2.8.2" + semver "^7.5.3" + style-loader "^3.3.1" + sucrase "^3.20.2" + swc-loader "^0.2.3" + tar "^7.4.3" + ts-checker-rspack-plugin "^1.1.5" + ts-morph "^24.0.0" + undici "^7.2.3" + util "^0.12.3" + yaml "^2.0.0" + yargs "^16.2.0" + yml-loader "^2.1.0" + yn "^4.0.0" + zod "^3.22.4" + zod-validation-error "^3.4.0" + "@backstage/cli@^0.35.0": version "0.35.4" resolved "https://registry.yarnpkg.com/@backstage/cli/-/cli-0.35.4.tgz#45597a524306742e7dd871840c4588a29b5d3f27" @@ -3275,7 +4070,7 @@ "@backstage/types" "^1.2.2" serialize-error "^8.0.1" -"@backstage/eslint-plugin@^0.2.1", "@backstage/eslint-plugin@^0.2.3": +"@backstage/eslint-plugin@^0.2.0", "@backstage/eslint-plugin@^0.2.1", "@backstage/eslint-plugin@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@backstage/eslint-plugin/-/eslint-plugin-0.2.3.tgz#dff8c0bf8cd1a3cf462baecdc4c5c35e15feccac" integrity sha512-ot5ZG9Lbc6AYwoJm9DinLlJ6SfQ/E0/YLo1Iice2aM85fWLRlSamTmKup1VrHsAHa8wqknp5QuRD/E8nxqveEg== @@ -4245,7 +5040,7 @@ luxon "^3.0.0" react-use "^17.4.0" -"@backstage/plugin-kubernetes@^0.12.11", "@backstage/plugin-kubernetes@^0.12.13", "@backstage/plugin-kubernetes@^0.12.17": +"@backstage/plugin-kubernetes@^0.12.11", "@backstage/plugin-kubernetes@^0.12.13", "@backstage/plugin-kubernetes@^0.12.17", "@backstage/plugin-kubernetes@^0.12.18": version "0.12.18" resolved "https://registry.yarnpkg.com/@backstage/plugin-kubernetes/-/plugin-kubernetes-0.12.18.tgz#67e6f95389386dc251ffd977782bfe15d6dad3c5" integrity sha512-tu/xduHJ4V3Rqh3laj1BnLUPzHc0VkoC7AdII//z+fAJo6+0EohGUTVjiAz0TTiG+pa/qPglw1wkJQt4VEO+TA== @@ -5023,6 +5818,11 @@ resolved "https://registry.npmmirror.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "@bramus/specificity@^2.4.2": version "2.4.2" resolved "https://registry.yarnpkg.com/@bramus/specificity/-/specificity-2.4.2.tgz#aa8db8eb173fdee7324f82284833106adeecc648" @@ -5249,7 +6049,7 @@ "@emotion/weak-memoize" "^0.3.1" stylis "4.2.0" -"@emotion/cache@^11.13.5": +"@emotion/cache@^11.13.5", "@emotion/cache@^11.14.0": version "11.14.0" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== @@ -5402,6 +6202,11 @@ resolved "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== +"@esbuild/aix-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz#80fcbe36130e58b7670511e888b8e88a259ed76c" + integrity sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA== + "@esbuild/aix-ppc64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz#82b74f92aa78d720b714162939fb248c90addf53" @@ -5412,6 +6217,11 @@ resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== +"@esbuild/android-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz#8aa4965f8d0a7982dc21734bf6601323a66da752" + integrity sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg== + "@esbuild/android-arm64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz#f78cb8a3121fc205a53285adb24972db385d185d" @@ -5422,6 +6232,11 @@ resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== +"@esbuild/android-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz#300712101f7f50f1d2627a162e6e09b109b6767a" + integrity sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg== + "@esbuild/android-arm@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.7.tgz#593e10a1450bbfcac6cb321f61f468453bac209d" @@ -5432,6 +6247,11 @@ resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== +"@esbuild/android-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz#87dfb27161202bdc958ef48bb61b09c758faee16" + integrity sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg== + "@esbuild/android-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.7.tgz#453143d073326033d2d22caf9e48de4bae274b07" @@ -5442,6 +6262,11 @@ resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== +"@esbuild/darwin-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz#79197898ec1ff745d21c071e1c7cc3c802f0c1fd" + integrity sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg== + "@esbuild/darwin-arm64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz#6f23000fb9b40b7e04b7d0606c0693bd0632f322" @@ -5452,6 +6277,11 @@ resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== +"@esbuild/darwin-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz#146400a8562133f45c4d2eadcf37ddd09718079e" + integrity sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA== + "@esbuild/darwin-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz#27393dd18bb1263c663979c5f1576e00c2d024be" @@ -5462,6 +6292,11 @@ resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== +"@esbuild/freebsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz#1c5f9ba7206e158fd2b24c59fa2d2c8bb47ca0fe" + integrity sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg== + "@esbuild/freebsd-arm64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz#22e4638fa502d1c0027077324c97640e3adf3a62" @@ -5472,6 +6307,11 @@ resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== +"@esbuild/freebsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz#ea631f4a36beaac4b9279fa0fcc6ca29eaeeb2b3" + integrity sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ== + "@esbuild/freebsd-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz#9224b8e4fea924ce2194e3efc3e9aebf822192d6" @@ -5482,6 +6322,11 @@ resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== +"@esbuild/linux-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz#e1066bce58394f1b1141deec8557a5f0a22f5977" + integrity sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ== + "@esbuild/linux-arm64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz#4f5d1c27527d817b35684ae21419e57c2bda0966" @@ -5492,6 +6337,11 @@ resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== +"@esbuild/linux-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz#452cd66b20932d08bdc53a8b61c0e30baf4348b9" + integrity sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw== + "@esbuild/linux-arm@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz#b9e9d070c8c1c0449cf12b20eac37d70a4595921" @@ -5502,6 +6352,11 @@ resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== +"@esbuild/linux-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz#b24f8acc45bcf54192c7f2f3be1b53e6551eafe0" + integrity sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA== + "@esbuild/linux-ia32@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz#3f80fb696aa96051a94047f35c85b08b21c36f9e" @@ -5512,6 +6367,11 @@ resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== +"@esbuild/linux-loong64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz#f9cfffa7fc8322571fbc4c8b3268caf15bd81ad0" + integrity sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng== + "@esbuild/linux-loong64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz#9be1f2c28210b13ebb4156221bba356fe1675205" @@ -5522,6 +6382,11 @@ resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== +"@esbuild/linux-mips64el@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz#575a14bd74644ffab891adc7d7e60d275296f2cd" + integrity sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw== + "@esbuild/linux-mips64el@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz#4ab5ee67a3dfcbcb5e8fd7883dae6e735b1163b8" @@ -5532,6 +6397,11 @@ resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== +"@esbuild/linux-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz#75b99c70a95fbd5f7739d7692befe60601591869" + integrity sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA== + "@esbuild/linux-ppc64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz#dac78c689f6499459c4321e5c15032c12307e7ea" @@ -5542,6 +6412,11 @@ resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== +"@esbuild/linux-riscv64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz#2e3259440321a44e79ddf7535c325057da875cd6" + integrity sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w== + "@esbuild/linux-riscv64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz#050f7d3b355c3a98308e935bc4d6325da91b0027" @@ -5552,6 +6427,11 @@ resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== +"@esbuild/linux-s390x@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz#17676cabbfe5928da5b2a0d6df5d58cd08db2663" + integrity sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg== + "@esbuild/linux-s390x@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz#d61f715ce61d43fe5844ad0d8f463f88cbe4fef6" @@ -5562,11 +6442,21 @@ resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== +"@esbuild/linux-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz#0583775685ca82066d04c3507f09524d3cd7a306" + integrity sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw== + "@esbuild/linux-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz#ca8e1aa478fc8209257bf3ac8f79c4dc2982f32a" integrity sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA== +"@esbuild/netbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz#f04c4049cb2e252fe96b16fed90f70746b13f4a4" + integrity sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg== + "@esbuild/netbsd-arm64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz#1650f2c1b948deeb3ef948f2fc30614723c09690" @@ -5577,11 +6467,21 @@ resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== +"@esbuild/netbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz#77da0d0a0d826d7c921eea3d40292548b258a076" + integrity sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ== + "@esbuild/netbsd-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz#65772ab342c4b3319bf0705a211050aac1b6e320" integrity sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw== +"@esbuild/openbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz#6296f5867aedef28a81b22ab2009c786a952dccd" + integrity sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A== + "@esbuild/openbsd-arm64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz#37ed7cfa66549d7955852fce37d0c3de4e715ea1" @@ -5592,11 +6492,21 @@ resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== +"@esbuild/openbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz#f8d23303360e27b16cf065b23bbff43c14142679" + integrity sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw== + "@esbuild/openbsd-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz#01bf3d385855ef50cb33db7c4b52f957c34cd179" integrity sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg== +"@esbuild/openharmony-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz#49e0b768744a3924be0d7fd97dd6ce9b2923d88d" + integrity sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg== + "@esbuild/openharmony-arm64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz#6c1f94b34086599aabda4eac8f638294b9877410" @@ -5607,6 +6517,11 @@ resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== +"@esbuild/sunos-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz#a6ed7d6778d67e528c81fb165b23f4911b9b13d6" + integrity sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w== + "@esbuild/sunos-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz#4b0dd17ae0a6941d2d0fd35a906392517071a90d" @@ -5617,6 +6532,11 @@ resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== +"@esbuild/win32-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz#9ac14c378e1b653af17d08e7d3ce34caef587323" + integrity sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg== + "@esbuild/win32-arm64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz#34193ab5565d6ff68ca928ac04be75102ccb2e77" @@ -5627,6 +6547,11 @@ resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== +"@esbuild/win32-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz#918942dcbbb35cc14fca39afb91b5e6a3d127267" + integrity sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ== + "@esbuild/win32-ia32@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz#eb67f0e4482515d8c1894ede631c327a4da9fc4d" @@ -5637,6 +6562,11 @@ resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== +"@esbuild/win32-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz#9bdad8176be7811ad148d1f8772359041f46c6c5" + integrity sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA== + "@esbuild/win32-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz#8fe30b3088b89b4873c3a6cc87597ae3920c0a8b" @@ -5802,6 +6732,16 @@ rate-limiter-flexible "^4.0.1" xcase "^2.0.1" +"@gitbeaker/requester-utils@^43.8.0": + version "43.8.0" + resolved "https://registry.yarnpkg.com/@gitbeaker/requester-utils/-/requester-utils-43.8.0.tgz#6b9fb0cf93ce20c7a9b453161749c61a704c2849" + integrity sha512-d/SiJdxijc+aH5ZBQOw83XLxNSXqsBZNm5k3nPu1EHxGxK0fajXmxdMl0/vNXbKRggnIquFCxURkrQSEzfjqxQ== + dependencies: + picomatch-browser "^2.2.6" + qs "^6.14.0" + rate-limiter-flexible "^8.0.1" + xcase "^2.0.1" + "@gitbeaker/rest@^40.0.3": version "40.6.0" resolved "https://registry.yarnpkg.com/@gitbeaker/rest/-/rest-40.6.0.tgz#9f80ee350976a5fc4d97920c7dc2d5f44579fcde" @@ -6044,19 +6984,41 @@ resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== -"@internal/plugin-scaffolder-backend-module-gitlab@link:plugins/scaffolder-backend-module-gitlab": - version "0.9.5" - dependencies: - "@backstage/backend-plugin-api" "^1.4.0" - "@backstage/config" "^1.3.2" - "@backstage/errors" "^1.2.7" - "@backstage/integration" "^1.20.1" - "@backstage/plugin-scaffolder-node" "^0.12.0" - "@gitbeaker/rest" "^41.2.0" - luxon "^3.0.0" - winston "^3.2.1" - yaml "^2.0.0" - zod "^3.22.4" +"@inquirer/ansi@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@inquirer/ansi/-/ansi-2.0.5.tgz#7b7e121f6a0c40128711daf20325e6ff2cdff8b7" + integrity sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw== + +"@inquirer/confirm@^6.0.11": + version "6.0.12" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-6.0.12.tgz#7a317aec813214cec2f5339b9fa0926c20bf0dbe" + integrity sha512-h9FgGun3QwVYNj5TWIZZ+slii73bMoBFjPfVIGtnFuL4t8gBiNDV9PcSfIzkuxvgquJKt9nr1QzszpBzTbH8Og== + dependencies: + "@inquirer/core" "^11.1.9" + "@inquirer/type" "^4.0.5" + +"@inquirer/core@^11.1.9": + version "11.1.9" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-11.1.9.tgz#97f099f5217f50f168c12db00ac07f51ab550fbb" + integrity sha512-BDE4fG22uYh1bGSifcj7JSx119TVYNViMhMu85usp4Fswrzh6M0DV3yld64jA98uOAa2GSQ4Bg4bZRm2d2cwSg== + dependencies: + "@inquirer/ansi" "^2.0.5" + "@inquirer/figures" "^2.0.5" + "@inquirer/type" "^4.0.5" + cli-width "^4.1.0" + fast-wrap-ansi "^0.2.0" + mute-stream "^3.0.0" + signal-exit "^4.1.0" + +"@inquirer/figures@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-2.0.5.tgz#d12f4889ac6ea7731ebc52bd9c066ca51d8fdee7" + integrity sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ== + +"@inquirer/type@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-4.0.5.tgz#a02d90e5da8a36dce27ac8e7237a50c99a9003a3" + integrity sha512-aetVUNeKNc/VriqXlw1NRSW0zhMBB0W4bNbWRJgzRl/3d0QNDQFfk0GO5SDdtjMZVg6o8ZKEiadd7SCCzoOn5Q== "@internationalized/date@^3.12.0", "@internationalized/date@^3.12.1": version "3.12.1" @@ -6161,6 +7123,22 @@ concat-buffers "^1.0.0" sha.js "^2.4.11" +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.6.tgz#8dc9afa2ac1506cb1a58f89940f1c124446c8df3" + integrity sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw== + "@jest-mock/express@^2.0.1": version "2.0.2" resolved "https://registry.npmmirror.com/@jest-mock/express/-/express-2.0.2.tgz#e4f61c30b45e517c14b35ea5d67d89a7e52908f7" @@ -6168,6 +7146,52 @@ dependencies: "@types/express" "^4.17.17" +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + "@jest/create-cache-key-function@^30.0.0": version "30.3.0" resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-30.3.0.tgz#c504533e2b2c6403c6dacaa6b0484e9b6df3b602" @@ -6175,6 +7199,16 @@ dependencies: "@jest/types" "30.3.0" +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + "@jest/expect-utils@^29.7.0": version "29.7.0" resolved "https://registry.npmmirror.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" @@ -6182,6 +7216,36 @@ dependencies: jest-get-type "^29.6.3" +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + "@jest/pattern@30.0.1": version "30.0.1" resolved "https://registry.yarnpkg.com/@jest/pattern/-/pattern-30.0.1.tgz#d5304147f49a052900b4b853dedb111d080e199f" @@ -6190,6 +7254,36 @@ "@types/node" "*" jest-regex-util "30.0.1" +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + "@jest/schemas@30.0.5": version "30.0.5" resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-30.0.5.tgz#7bdf69fc5a368a5abdb49fd91036c55225846473" @@ -6204,6 +7298,56 @@ dependencies: "@sinclair/typebox" "^0.27.8" +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== + dependencies: + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + "@jest/types@30.3.0": version "30.3.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-30.3.0.tgz#cada800d323cb74945c24ac74615fdb312a6c85f" @@ -6238,6 +7382,22 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" @@ -6261,6 +7421,11 @@ resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + "@jridgewell/trace-mapping@0.3.9": version "0.3.9" resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" @@ -6269,7 +7434,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.25": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": version "0.3.31" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== @@ -6823,6 +7988,15 @@ "@types/semver" "7.5.8" semver "7.6.3" +"@module-federation/bridge-react-webpack-plugin@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.9.1.tgz#ac21da245177064aa9fe8d520c83785030c75ae5" + integrity sha512-znN/Qm6M0U1t3iF10gu1hSxDkk18yz78yvk+AMB34UDzpXHiC1zbpIeV2CQNV5GCeafmCICmcn9y1qh7F54KTg== + dependencies: + "@module-federation/sdk" "0.9.1" + "@types/semver" "7.5.8" + semver "7.6.3" + "@module-federation/cli@0.21.6": version "0.21.6" resolved "https://registry.yarnpkg.com/@module-federation/cli/-/cli-0.21.6.tgz#a8acd0eca6b1c33a45f2fb5fd7c70d12c38b6aaf" @@ -6843,6 +8017,15 @@ "@module-federation/sdk" "0.21.6" fs-extra "9.1.0" +"@module-federation/data-prefetch@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@module-federation/data-prefetch/-/data-prefetch-0.9.1.tgz#32b807e0031e1793216214f55e8eda8516e4bc06" + integrity sha512-rS1AsgRvIMAWK8oMprEBF0YQ3WvsqnumjinvAZU1Dqut5DICmpQMTPEO1OrAKyjO+PQgEhmq13HggzN6ebGLrQ== + dependencies: + "@module-federation/runtime" "0.9.1" + "@module-federation/sdk" "0.9.1" + fs-extra "9.1.0" + "@module-federation/dts-plugin@0.21.6": version "0.21.6" resolved "https://registry.yarnpkg.com/@module-federation/dts-plugin/-/dts-plugin-0.21.6.tgz#a73e5883fbbede846138fff667994a6176837c6a" @@ -6865,6 +8048,28 @@ rambda "^9.1.0" ws "8.18.0" +"@module-federation/dts-plugin@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@module-federation/dts-plugin/-/dts-plugin-0.9.1.tgz#af89c2ed21191daa0eca77725a97727b3961331d" + integrity sha512-DezBrFaIKfDcEY7UhqyO1WbYocERYsR/CDN8AV6OvMnRlQ8u0rgM8qBUJwx0s+K59f+CFQFKEN4C8p7naCiHrw== + dependencies: + "@module-federation/error-codes" "0.9.1" + "@module-federation/managers" "0.9.1" + "@module-federation/sdk" "0.9.1" + "@module-federation/third-party-dts-extractor" "0.9.1" + adm-zip "^0.5.10" + ansi-colors "^4.1.3" + axios "^1.7.4" + chalk "3.0.0" + fs-extra "9.1.0" + isomorphic-ws "5.0.0" + koa "2.15.4" + lodash.clonedeepwith "4.5.0" + log4js "6.9.1" + node-schedule "2.1.1" + rambda "^9.1.0" + ws "8.18.0" + "@module-federation/enhanced@^0.21.6": version "0.21.6" resolved "https://registry.yarnpkg.com/@module-federation/enhanced/-/enhanced-0.21.6.tgz#c917485505998c854307e7504f24755a3017d583" @@ -6885,6 +8090,24 @@ schema-utils "^4.3.0" upath "2.0.1" +"@module-federation/enhanced@^0.9.0": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@module-federation/enhanced/-/enhanced-0.9.1.tgz#b57cb26a0c1abb29680610474af9ba14f6398525" + integrity sha512-c9siKVjcgT2gtDdOTqEr+GaP2X/PWAS0OV424ljKLstFL1lcS/BIsxWFDmxPPl5hDByAH+1q4YhC1LWY4LNDQw== + dependencies: + "@module-federation/bridge-react-webpack-plugin" "0.9.1" + "@module-federation/data-prefetch" "0.9.1" + "@module-federation/dts-plugin" "0.9.1" + "@module-federation/error-codes" "0.9.1" + "@module-federation/inject-external-runtime-core-plugin" "0.9.1" + "@module-federation/managers" "0.9.1" + "@module-federation/manifest" "0.9.1" + "@module-federation/rspack" "0.9.1" + "@module-federation/runtime-tools" "0.9.1" + "@module-federation/sdk" "0.9.1" + btoa "^1.2.1" + upath "2.0.1" + "@module-federation/error-codes@0.21.6": version "0.21.6" resolved "https://registry.yarnpkg.com/@module-federation/error-codes/-/error-codes-0.21.6.tgz#d0c9fa71f9469b2150165ef4461dfd5be0e7f79b" @@ -6895,11 +8118,21 @@ resolved "https://registry.yarnpkg.com/@module-federation/error-codes/-/error-codes-0.22.0.tgz#31ccc990dc240d73912ba7bd001f7e35ac751992" integrity sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug== +"@module-federation/error-codes@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@module-federation/error-codes/-/error-codes-0.9.1.tgz#0bcc4baea3b4086cfcf4d9dd7c1d78b0b344c139" + integrity sha512-q8spCvlwUzW42iX1irnlBTcwcZftRNHyGdlaoFO1z/fW4iphnBIfijzkigWQzOMhdPgzqN/up7XN+g5hjBGBtw== + "@module-federation/inject-external-runtime-core-plugin@0.21.6": version "0.21.6" resolved "https://registry.yarnpkg.com/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-0.21.6.tgz#d87fdfa6df94059c0b3b12f333394989c555e489" integrity sha512-DJQne7NQ988AVi3QB8byn12FkNb+C2lBeU1NRf8/WbL0gmHsr6kW8hiEJCm8LYaURwtsQqtsEV7i+8+51qjSmQ== +"@module-federation/inject-external-runtime-core-plugin@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-0.9.1.tgz#189a7800f32c07aaac85ba130c3e1bbcfdb0ac71" + integrity sha512-BPfzu1cqDU5BhM493enVF1VfxJWmruen0ktlHrWdJJlcddhZzyFBGaLAGoGc+83fS75aEllvJTEthw4kMViMQQ== + "@module-federation/managers@0.21.6": version "0.21.6" resolved "https://registry.yarnpkg.com/@module-federation/managers/-/managers-0.21.6.tgz#dc854f1ae24508322d71bae91d6c9380b3fc1e5f" @@ -6909,6 +8142,15 @@ find-pkg "2.0.0" fs-extra "9.1.0" +"@module-federation/managers@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@module-federation/managers/-/managers-0.9.1.tgz#96ef7b6932f099303f134866d9a1b027c4431a4a" + integrity sha512-8hpIrvGfiODxS1qelTd7eaLRVF7jrp17RWgeH1DWoprxELANxm5IVvqUryB+7j+BhoQzamog9DL5q4MuNfGgIA== + dependencies: + "@module-federation/sdk" "0.9.1" + find-pkg "2.0.0" + fs-extra "9.1.0" + "@module-federation/manifest@0.21.6": version "0.21.6" resolved "https://registry.yarnpkg.com/@module-federation/manifest/-/manifest-0.21.6.tgz#4790467e788e0031e054366a85e2625a98ab6c42" @@ -6920,6 +8162,17 @@ chalk "3.0.0" find-pkg "2.0.0" +"@module-federation/manifest@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@module-federation/manifest/-/manifest-0.9.1.tgz#1e28b94d463733c9b190a28ba205e513da76ba48" + integrity sha512-+GteKBXrAUkq49i2CSyWZXM4vYa+mEVXxR9Du71R55nXXxgbzAIoZj9gxjRunj9pcE8+YpAOyfHxLEdWngxWdg== + dependencies: + "@module-federation/dts-plugin" "0.9.1" + "@module-federation/managers" "0.9.1" + "@module-federation/sdk" "0.9.1" + chalk "3.0.0" + find-pkg "2.0.0" + "@module-federation/rspack@0.21.6": version "0.21.6" resolved "https://registry.yarnpkg.com/@module-federation/rspack/-/rspack-0.21.6.tgz#7c5f39e870d56c735cf4d12698aed0779ad7482b" @@ -6934,6 +8187,19 @@ "@module-federation/sdk" "0.21.6" btoa "1.2.1" +"@module-federation/rspack@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@module-federation/rspack/-/rspack-0.9.1.tgz#96ae51a03b6243501fdc56ac4195dd6035b7bc9c" + integrity sha512-ZJqG75dWHhyTMa9I0YPJEV2XRt0MFxnDiuMOpI92esdmwWY633CBKyNh1XxcLd629YVeTv03+whr+Fz/f91JEw== + dependencies: + "@module-federation/bridge-react-webpack-plugin" "0.9.1" + "@module-federation/dts-plugin" "0.9.1" + "@module-federation/inject-external-runtime-core-plugin" "0.9.1" + "@module-federation/managers" "0.9.1" + "@module-federation/manifest" "0.9.1" + "@module-federation/runtime-tools" "0.9.1" + "@module-federation/sdk" "0.9.1" + "@module-federation/runtime-core@0.21.6": version "0.21.6" resolved "https://registry.yarnpkg.com/@module-federation/runtime-core/-/runtime-core-0.21.6.tgz#2bcd24db2192179c96ce49772b09d72820ab9ea3" @@ -6950,6 +8216,14 @@ "@module-federation/error-codes" "0.22.0" "@module-federation/sdk" "0.22.0" +"@module-federation/runtime-core@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@module-federation/runtime-core/-/runtime-core-0.9.1.tgz#4ea08b84f3d015fc148c7129f0e45eb08f5f36cc" + integrity sha512-r61ufhKt5pjl81v7TkmhzeIoSPOaNtLynW6+aCy3KZMa3RfRevFxmygJqv4Nug1L0NhqUeWtdLejh4VIglNy5Q== + dependencies: + "@module-federation/error-codes" "0.9.1" + "@module-federation/sdk" "0.9.1" + "@module-federation/runtime-tools@0.21.6": version "0.21.6" resolved "https://registry.yarnpkg.com/@module-federation/runtime-tools/-/runtime-tools-0.21.6.tgz#40cbcc16af4c597169834a2d8b71a9d31779ab0c" @@ -6966,6 +8240,14 @@ "@module-federation/runtime" "0.22.0" "@module-federation/webpack-bundler-runtime" "0.22.0" +"@module-federation/runtime-tools@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@module-federation/runtime-tools/-/runtime-tools-0.9.1.tgz#9669507f31875e6fe37f92483478dcedf57425b2" + integrity sha512-JQZ//ab+lEXoU2DHAH+JtYASGzxEjXB0s4rU+6VJXc8c+oUPxH3kWIwzjdncg2mcWBmC1140DCk+K+kDfOZ5CQ== + dependencies: + "@module-federation/runtime" "0.9.1" + "@module-federation/webpack-bundler-runtime" "0.9.1" + "@module-federation/runtime@0.21.6", "@module-federation/runtime@^0.21.6": version "0.21.6" resolved "https://registry.yarnpkg.com/@module-federation/runtime/-/runtime-0.21.6.tgz#8d4a29a792ed4a94e5a811fe097d314a6f9dcab7" @@ -6984,6 +8266,15 @@ "@module-federation/runtime-core" "0.22.0" "@module-federation/sdk" "0.22.0" +"@module-federation/runtime@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@module-federation/runtime/-/runtime-0.9.1.tgz#344c13b546f7aa65f3e648aca3ffd94f74d73588" + integrity sha512-jp7K06weabM5BF5sruHr/VLyalO+cilvRDy7vdEBqq88O9mjc0RserD8J+AP4WTl3ZzU7/GRqwRsiwjjN913dA== + dependencies: + "@module-federation/error-codes" "0.9.1" + "@module-federation/runtime-core" "0.9.1" + "@module-federation/sdk" "0.9.1" + "@module-federation/sdk@0.21.6": version "0.21.6" resolved "https://registry.yarnpkg.com/@module-federation/sdk/-/sdk-0.21.6.tgz#8aac1159ff37f418ed72bc79afccbbfb025f847a" @@ -6994,6 +8285,11 @@ resolved "https://registry.yarnpkg.com/@module-federation/sdk/-/sdk-0.22.0.tgz#6ad4c1de85a900c3c80ff26cb87cce253e3a2770" integrity sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g== +"@module-federation/sdk@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@module-federation/sdk/-/sdk-0.9.1.tgz#0e0ab3aca38a6f29c9b0de7e5931f8f63498c9e0" + integrity sha512-YQonPTImgnCqZjE/A+3N2g3J5ypR6kx1tbBzc9toUANKr/dw/S63qlh/zHKzWQzxjjNNVMdXRtTMp07g3kgEWg== + "@module-federation/third-party-dts-extractor@0.21.6": version "0.21.6" resolved "https://registry.yarnpkg.com/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.21.6.tgz#c99b3ae9243893b0064598eb19a13fd542b64a82" @@ -7003,6 +8299,15 @@ fs-extra "9.1.0" resolve "1.22.8" +"@module-federation/third-party-dts-extractor@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.9.1.tgz#f38db32356c60ab2e9419d7fae74bb3678caa5c8" + integrity sha512-KeIByP718hHyq+Mc53enZ419pZZ1fh9Ns6+/bYLkc3iCoJr/EDBeiLzkbMwh2AS4Qk57WW0yNC82xzf7r0Zrrw== + dependencies: + find-pkg "2.0.0" + fs-extra "9.1.0" + resolve "1.22.8" + "@module-federation/webpack-bundler-runtime@0.21.6": version "0.21.6" resolved "https://registry.yarnpkg.com/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.21.6.tgz#6831eaf147356fe5b096d24c7a902c323e810bb9" @@ -7019,6 +8324,14 @@ "@module-federation/runtime" "0.22.0" "@module-federation/sdk" "0.22.0" +"@module-federation/webpack-bundler-runtime@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.9.1.tgz#eff1cc901d81edd77a3ed6b0bb49a6d9c2651d91" + integrity sha512-CxySX01gT8cBowKl9xZh+voiHvThMZ471icasWnlDIZb14KasZoX1eCh9wpGvwoOdIk9rIRT7h70UvW9nmop6w== + dependencies: + "@module-federation/runtime" "0.9.1" + "@module-federation/sdk" "0.9.1" + "@motionone/animation@^10.12.0": version "10.17.0" resolved "https://registry.npmmirror.com/@motionone/animation/-/animation-10.17.0.tgz#7633c6f684b5fee2b61c405881b8c24662c68fca" @@ -7094,11 +8407,28 @@ strict-event-emitter "^0.2.4" web-encoding "^1.1.5" +"@mswjs/interceptors@^0.41.3": + version "0.41.7" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.41.7.tgz#403b9830e2ccfdb6557ea19450bfa9d264220c8e" + integrity sha512-D0nkS5+sx87mYpxFqASImCineYoEl9wGlUPrzkuS0ohzG8wfophLpE+I76qGJ0slLAVI19do5SI9pWJNCVf4fg== + dependencies: + "@open-draft/deferred-promise" "^2.2.0" + "@open-draft/logger" "^0.3.0" + "@open-draft/until" "^2.0.0" + is-node-process "^1.2.0" + outvariant "^1.4.3" + strict-event-emitter "^0.5.1" + "@mui/core-downloads-tracker@^5.18.0": version "5.18.0" resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.18.0.tgz#85019a8704b0f63305fc5600635ee663810f2b66" integrity sha512-jbhwoQ1AY200PSSOrNXmrFCaSDSJWP7qk6urkTmIirvRXDROkqe+QwcLlUiw/PrREwsIF/vm3/dAXvjlMHF0RA== +"@mui/core-downloads-tracker@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-9.0.0.tgz#b2df0488117bc892d08715de7857fc7d8637dfc0" + integrity sha512-uwQNGkhv0lf7ufxw6QXev77BW6pWbW+7uxYjU5+rfp4lBkFtMEgJCsarTM3Tn+i0lGx6+Ol2u88JdGXr0GDskA== + "@mui/icons-material@^5.0.0": version "5.18.0" resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.18.0.tgz#97d87f1b7bee5fa7b9ba844518631de3112c1e57" @@ -7106,7 +8436,7 @@ dependencies: "@babel/runtime" "^7.23.9" -"@mui/material@^5.12.2", "@mui/material@^5.15.6": +"@mui/material@^5.12.2": version "5.18.0" resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.18.0.tgz#71e72d52338252edc6f8d9461e04fdf0d61905cd" integrity sha512-bbH/HaJZpFtXGvWg3TsBWG4eyt3gah3E7nCNU8GLyRjVoWcA91Vm/T+sjHfUcwgJSw9iLtucfHBoq+qW/T30aA== @@ -7124,6 +8454,24 @@ react-is "^19.0.0" react-transition-group "^4.4.5" +"@mui/material@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-9.0.0.tgz#30d19aa0ccf3b1868179870ced72d720e347a95a" + integrity sha512-+VP/oQCDhDR87NQQgXnNBG8dwy6GNuQLnenS1pZvkbn2dKFSxRSRMybTpH9xUxXP+316mlYDy5CSbYtusnCWtw== + dependencies: + "@babel/runtime" "^7.29.2" + "@mui/core-downloads-tracker" "^9.0.0" + "@mui/system" "^9.0.0" + "@mui/types" "^9.0.0" + "@mui/utils" "^9.0.0" + "@popperjs/core" "^2.11.8" + "@types/react-transition-group" "^4.4.12" + clsx "^2.1.1" + csstype "^3.2.3" + prop-types "^15.8.1" + react-is "^19.2.4" + react-transition-group "^4.4.5" + "@mui/private-theming@^5.17.1": version "5.17.1" resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.17.1.tgz#b4b6fbece27830754ef78186e3f1307dca42f295" @@ -7133,6 +8481,15 @@ "@mui/utils" "^5.17.1" prop-types "^15.8.1" +"@mui/private-theming@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-9.0.0.tgz#2617a4fa2045e0644429556afebe87aeaa0ea966" + integrity sha512-JtuZoaiCqwD6vjgYu6Xp3T7DZkrxJlgtDz5yESzhI34fEX5hHMh2VJUbuL9UOg8xrfIFMrq6dcYoH/7Zi4G0RA== + dependencies: + "@babel/runtime" "^7.29.2" + "@mui/utils" "^9.0.0" + prop-types "^15.8.1" + "@mui/styled-engine@^5.18.0": version "5.18.0" resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.18.0.tgz#914cca1385bb33ce0cde31721f529c8bd7fa301c" @@ -7144,6 +8501,18 @@ csstype "^3.1.3" prop-types "^15.8.1" +"@mui/styled-engine@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-9.0.0.tgz#ab7b1c25c0193a796ced29da3662191d53ae339b" + integrity sha512-9RLGdX4Jg0aQPRuvqh/OLzYSPlgd5zyEw5/1HIRfdavSiOd03WtUaGZH9/w1RoTYuRKwpgy0hpIFaMHIqPVIWg== + dependencies: + "@babel/runtime" "^7.29.2" + "@emotion/cache" "^11.14.0" + "@emotion/serialize" "^1.3.3" + "@emotion/sheet" "^1.4.0" + csstype "^3.2.3" + prop-types "^15.8.1" + "@mui/system@^5.18.0": version "5.18.0" resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.18.0.tgz#e55331203a40584b26c5a855a07949ac8973bfb6" @@ -7158,6 +8527,27 @@ csstype "^3.1.3" prop-types "^15.8.1" +"@mui/system@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-9.0.0.tgz#a95509127a7df264692105abebaf5a4a965401d5" + integrity sha512-YnC5Zg6j04IxiLc/boAKs0464jfZlLFVa7mf5E8lF0XOtZVUvG6R6gJK50lgUYdaaLdyLfxF6xR7LaPuEpeT/g== + dependencies: + "@babel/runtime" "^7.29.2" + "@mui/private-theming" "^9.0.0" + "@mui/styled-engine" "^9.0.0" + "@mui/types" "^9.0.0" + "@mui/utils" "^9.0.0" + clsx "^2.1.1" + csstype "^3.2.3" + prop-types "^15.8.1" + +"@mui/types@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-9.0.0.tgz#92d8c64e72cb863ee59108cb20cc476d648a3ab9" + integrity sha512-i1cuFCAWN44b3AJWO7mh7tuh1sqbQSeVr/94oG0TX5uXivac8XalgE4/6fQZcmGZigzbQ35IXxj/4jLpRIBYZg== + dependencies: + "@babel/runtime" "^7.29.2" + "@mui/types@~7.2.15": version "7.2.24" resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.24.tgz#5eff63129d9c29d80bbf2d2e561bd0690314dec2" @@ -7185,6 +8575,18 @@ prop-types "^15.8.1" react-is "^19.0.0" +"@mui/utils@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-9.0.0.tgz#25b563ccbf537feba5f89c37a00cb8e6eea45ad0" + integrity sha512-bQcqyg/gjULUqTuyUjSAFr6LQGLvtkNtDbJerAtoUn9kGZ0hg5QJiN1PLHMLbeFpe3te1831uq7GFl2ITokGdg== + dependencies: + "@babel/runtime" "^7.29.2" + "@mui/types" "^9.0.0" + "@types/prop-types" "^15.7.15" + clsx "^2.1.1" + prop-types "^15.8.1" + react-is "^19.2.4" + "@n1ru4l/push-pull-async-iterable-iterator@^3.1.0": version "3.2.0" resolved "https://registry.npmmirror.com/@n1ru4l/push-pull-async-iterable-iterator/-/push-pull-async-iterable-iterator-3.2.0.tgz#c15791112db68dd9315d329d652b7e797f737655" @@ -7199,6 +8601,11 @@ "@emnapi/runtime" "^1.5.0" "@tybys/wasm-util" "^0.10.1" +"@nodable/entities@2.1.0", "@nodable/entities@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@nodable/entities/-/entities-2.1.0.tgz#f543e5c6446720d4cf9e498a83019dd159973bc2" + integrity sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -7670,11 +9077,34 @@ "@octokit/webhooks-types" "7.1.0" aggregate-error "^3.1.0" +"@open-draft/deferred-promise@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz#4a822d10f6f0e316be4d67b4d4f8c9a124b073bd" + integrity sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA== + +"@open-draft/deferred-promise@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-3.0.0.tgz#9725acc5afe8ecde690e9e198a094859fdbf2e45" + integrity sha512-XW375UK8/9SqUVNVa6M0yEy8+iTi4QN5VZ7aZuRFQmy76LRwI9wy5F4YIBU6T+eTe2/DNDo8tqu8RHlwLHM6RA== + +"@open-draft/logger@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@open-draft/logger/-/logger-0.3.0.tgz#2b3ab1242b360aa0adb28b85f5d7da1c133a0954" + integrity sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ== + dependencies: + is-node-process "^1.2.0" + outvariant "^1.4.0" + "@open-draft/until@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca" integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q== +"@open-draft/until@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda" + integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== + "@openapi-contrib/openapi-schema-to-json-schema@~3.2.0": version "3.2.0" resolved "https://registry.npmmirror.com/@openapi-contrib/openapi-schema-to-json-schema/-/openapi-schema-to-json-schema-3.2.0.tgz#c4c92edd4478b5ecb3d99c29ecb355118259dccc" @@ -8979,6 +10409,20 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== +"@sinonjs/commons@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + "@smithy/abort-controller@^1.0.1": version "1.1.0" resolved "https://registry.npmmirror.com/@smithy/abort-controller/-/abort-controller-1.1.0.tgz#2da0d73c504b93ca8bb83bdc8d6b8208d73f418b" @@ -9011,6 +10455,14 @@ "@smithy/util-base64" "^2.1.1" tslib "^2.5.0" +"@smithy/chunked-blob-reader-native@^4.2.3": + version "4.2.3" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.3.tgz#9e79a80d8d44798e7ce7a8f968cbbbaf5a40d950" + integrity sha512-jA5k5Udn7Y5717L86h4EIv06wIr3xn8GM1qHRi/Nf31annXcXHJjBKvgztnbn2TxH3xWrPBfgwHsOwZf0UmQWw== + dependencies: + "@smithy/util-base64" "^4.3.2" + tslib "^2.6.2" + "@smithy/chunked-blob-reader@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.1.1.tgz#997faba8e197e0cb9824dad30ae581466e386e57" @@ -9018,6 +10470,13 @@ dependencies: tslib "^2.5.0" +"@smithy/chunked-blob-reader@^5.2.2": + version "5.2.2" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.2.tgz#3af48e37b10e5afed478bb31d2b7bc03c81d196c" + integrity sha512-St+kVicSyayWQca+I1rGitaOEH6uKgE8IUWoYnnEX26SWdWQcL6LvMSD19Lg+vYHKdT9B2Zuu7rd3i6Wnyb/iw== + dependencies: + tslib "^2.6.2" + "@smithy/config-resolver@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/config-resolver/-/config-resolver-2.1.1.tgz#fc6b036084b98fd26a8ff01a5d7eb676e41749c7" @@ -9149,6 +10608,16 @@ "@smithy/util-hex-encoding" "^2.1.1" tslib "^2.5.0" +"@smithy/eventstream-codec@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.2.14.tgz#4963ca27242b80c5b1d11dcd3ea1bee2a3c5f96d" + integrity sha512-erZq0nOIpzfeZdCyzZjdJb4nVSKLUmSkaQUVkRGQTXs30gyUGeKnrYEg+Xe1W5gE3aReS7IgsvANwVPxSzY6Pw== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^4.14.1" + "@smithy/util-hex-encoding" "^4.2.2" + tslib "^2.6.2" + "@smithy/eventstream-serde-browser@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.1.1.tgz#743a374639e9e2dd858b6fda1fd814eb6c604946" @@ -9158,6 +10627,15 @@ "@smithy/types" "^2.9.1" tslib "^2.5.0" +"@smithy/eventstream-serde-browser@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.14.tgz#b483667ea358975afb2170cd2618b9aa53a0fb29" + integrity sha512-8IelTCtTctWRbb+0Dcy+C0aICh1qa0qWXqgjcXDmMuCvPJRnv26hiDZoAau2ILOniki65mCPKqOQs/BaWvO4CQ== + dependencies: + "@smithy/eventstream-serde-universal" "^4.2.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/eventstream-serde-config-resolver@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.1.1.tgz#0b84d6f8be0836af7b92455c69f7427e4f01e7a2" @@ -9166,6 +10644,14 @@ "@smithy/types" "^2.9.1" tslib "^2.5.0" +"@smithy/eventstream-serde-config-resolver@^4.3.14": + version "4.3.14" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.14.tgz#2eb23acad43414b9bc0b43f34ae9afbd5464e484" + integrity sha512-sqHiHpYRYo3FJlaIxD1J8PhbcmJAm7IuM16mVnwSkCToD7g00IBZzKuiLNMGmftULmEUX6/UAz8/NN5uMP8bVA== + dependencies: + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/eventstream-serde-node@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.1.1.tgz#2e1afa27f9c7eb524c1c53621049c5e4e3cea6a5" @@ -9175,6 +10661,15 @@ "@smithy/types" "^2.9.1" tslib "^2.5.0" +"@smithy/eventstream-serde-node@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.14.tgz#402c2a3b0437b7ac9747090a38a60d3642813490" + integrity sha512-Ht/8BuGlKfFTy0H3+8eEu0vdpwGztCnaLLXtpXNdQqiR7Hj4vFScU3T436vRAjATglOIPjJXronY+1WxxNLSiw== + dependencies: + "@smithy/eventstream-serde-universal" "^4.2.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/eventstream-serde-universal@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.1.1.tgz#0f5eec9ad033017973a67bafb5549782499488d2" @@ -9184,6 +10679,15 @@ "@smithy/types" "^2.9.1" tslib "^2.5.0" +"@smithy/eventstream-serde-universal@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.14.tgz#1e1d29c111e580a93f3c197139c5ca8c976ec205" + integrity sha512-lWyt4T2XQZUZgK3tQ3Wn0w3XBvZsK/vjTuJl6bXbnGZBHH0ZUSONTYiK9TgjTTzU54xQr3DRFwpjmhp0oLm3gg== + dependencies: + "@smithy/eventstream-codec" "^4.2.14" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/fetch-http-handler@^2.4.1": version "2.4.1" resolved "https://registry.npmmirror.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz#b4d73bbc1449f61234077d58c705b843a8587bf0" @@ -9227,6 +10731,16 @@ "@smithy/types" "^2.9.1" tslib "^2.5.0" +"@smithy/hash-blob-browser@^4.2.15": + version "4.2.15" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.15.tgz#1323f9717cad352b3e18065b738387bb9684f993" + integrity sha512-0PJ4Al3fg2nM4qKrAIxyNcApgqHAXcBkN8FeizOz69z0rb26uZ6lMESYtxegaTlXB5Hj84JfwMPavMrwDMjucA== + dependencies: + "@smithy/chunked-blob-reader" "^5.2.2" + "@smithy/chunked-blob-reader-native" "^4.2.3" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/hash-node@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/hash-node/-/hash-node-2.1.1.tgz#0f8a22d97565ca948724f72267e4d3a2f33740a8" @@ -9266,6 +10780,15 @@ "@smithy/util-utf8" "^2.1.1" tslib "^2.5.0" +"@smithy/hash-stream-node@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-4.2.14.tgz#98bc14e79e2be852d04ff6cbfe4b0babe48fb10d" + integrity sha512-tw4GANWkZPb6+BdD4Fgucqzey2+r73Z/GRo9zklsCdwrnxxumUV83ZIaBDdudV4Ylazw3EPTiJZhpX42105ruQ== + dependencies: + "@smithy/types" "^4.14.1" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + "@smithy/invalid-dependency@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz#bd69fa24dd35e9bc65a160bd86becdf1399e4463" @@ -9327,6 +10850,15 @@ "@smithy/util-utf8" "^2.1.1" tslib "^2.5.0" +"@smithy/md5-js@^4.2.14": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-4.2.14.tgz#c066572ec84def147af24e55a402c44d0d7dcd7b" + integrity sha512-V2v0vx+h0iUSNG1Alt+GNBMSLGCrl9iVsdd+Ap67HPM9PN479x12V8LkuMoKImNZxn3MXeuyUjls+/7ZACZghA== + dependencies: + "@smithy/types" "^4.14.1" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + "@smithy/middleware-content-length@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz#df767de12d594bc5622009fb0fc8343522697d8c" @@ -9440,6 +10972,22 @@ "@smithy/uuid" "^1.1.2" tslib "^2.6.2" +"@smithy/middleware-retry@^4.5.7": + version "4.5.7" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.5.7.tgz#a2da0c472d631ee408ff566186c99571b3efb70b" + integrity sha512-bRt6ZImqVSeTk39Nm81K20ObIiAZ3WefY7G6+iz/0tZjs4dgRRjvRX2sgsH+zi6iDCRR/aQvQofLKxxz4rPBZg== + dependencies: + "@smithy/core" "^3.23.17" + "@smithy/node-config-provider" "^4.3.14" + "@smithy/protocol-http" "^5.3.14" + "@smithy/service-error-classification" "^4.3.1" + "@smithy/smithy-client" "^4.12.13" + "@smithy/types" "^4.14.1" + "@smithy/util-middleware" "^4.2.14" + "@smithy/util-retry" "^4.3.6" + "@smithy/uuid" "^1.1.2" + tslib "^2.6.2" + "@smithy/middleware-serde@^2.1.1": version "2.1.1" resolved "https://registry.npmmirror.com/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz#2c5750f76e276a5249720f6c3c24fac29abbee16" @@ -9680,6 +11228,13 @@ dependencies: "@smithy/types" "^4.14.1" +"@smithy/service-error-classification@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.3.1.tgz#5303d4fc3c3eea0f79c3b88cb4436498a31e9f12" + integrity sha512-aUQuDGh760ts/8MU+APjIZhlLPKhIIfqyzZaJikLEIMrdxFvxuLYD0WxWzaYWpmLbQlXDe9p7EWM3HsBe0K6Gw== + dependencies: + "@smithy/types" "^4.14.1" + "@smithy/shared-ini-file-loader@^2.3.1": version "2.3.1" resolved "https://registry.npmmirror.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz#a2e28b4d85f8a8262a84403fa2b74a086b3a7703" @@ -10015,7 +11570,7 @@ bowser "^2.11.0" tslib "^2.6.2" -"@smithy/util-defaults-mode-browser@^4.3.48": +"@smithy/util-defaults-mode-browser@^4.3.48", "@smithy/util-defaults-mode-browser@^4.3.49": version "4.3.49" resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.49.tgz#926ce84bf65e56307f25cce7a13b427d33442939" integrity sha512-a5bNrdiONYB/qE2BuKegvUMd/+ZDwdg4vsNuuSzYE8qs2EYAdK9CynL+Rzn29PbPiUqoz/cbpRbcLzD5lEevHw== @@ -10051,7 +11606,7 @@ "@smithy/types" "^3.1.0" tslib "^2.6.2" -"@smithy/util-defaults-mode-node@^4.2.53": +"@smithy/util-defaults-mode-node@^4.2.53", "@smithy/util-defaults-mode-node@^4.2.54": version "4.2.54" resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.54.tgz#32c4ea9f8a8c74ef9fe0ca5e3d6a10df0327f87e" integrity sha512-g1cvrJvOnzeJgEdf7AE4luI7gp6L8weE0y9a9wQUSGtjb8QRHDbCJYuE4Sy0SD9N8RrnNPFsPltAz/OSoBR9Zw== @@ -10181,7 +11736,16 @@ resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.3.4.tgz#97d9635d967405243f0a2c47db35969eeb6860b8" integrity sha512-FY1UQQ1VFmMwiYp1GVS4MeaGD5O0blLNYK0xCRHU+mJgeoH/hSY8Ld8sJWKQ6uznkh14HveRGQJncgPyNl9J+A== dependencies: - "@smithy/service-error-classification" "^4.3.0" + "@smithy/service-error-classification" "^4.3.0" + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + +"@smithy/util-retry@^4.3.6": + version "4.3.6" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.3.6.tgz#8d242d7e736593ca3f1c0f056279909b881d6e2a" + integrity sha512-p6/FO1n2KxMeQyna067i0uJ6TSbb165ZhnRtCpWh4Foxqbfc6oW+XITaL8QkFJj3KFnDe2URt4gOhgU06EP9ew== + dependencies: + "@smithy/service-error-classification" "^4.3.1" "@smithy/types" "^4.14.1" tslib "^2.6.2" @@ -10296,6 +11860,14 @@ "@smithy/types" "^2.9.1" tslib "^2.5.0" +"@smithy/util-waiter@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.3.0.tgz#6122ce27939edb5550d1d6c7c8d506323f3a17f7" + integrity sha512-JyjYmLAfS+pdxF92o4yLgEoy0zhayKTw73FU1aofLWwLcJw7iSqIY2exGmMTrl/lmZugP5p/zxdFSippJDfKWA== + dependencies: + "@smithy/types" "^4.14.1" + tslib "^2.6.2" + "@smithy/uuid@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@smithy/uuid/-/uuid-1.1.2.tgz#b6e97c7158615e4a3c775e809c00d8c269b5a12e" @@ -11090,61 +12662,121 @@ resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.30.tgz#23447f1c30c9155fe35602de4392b4ecfa0a54cc" integrity sha512-VvpP+vq08HmGYewMWvrdsxh9s2lthz/808zXm8Yu5kaqeR8Yia2b0eYXleHQ3VAjoStUDk6LzTheBW9KXYQdMA== +"@swc/core-darwin-arm64@1.15.32": + version "1.15.32" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.32.tgz#3592714588fdbb8b7a869f81ff96c7236fcf1c09" + integrity sha512-/YWMvJDPu+AAwuUsM2G+DNQ/7zhodURGzdQyewEqcvgklAdDHs3LwQmLLnyn6SJl8DT8UOxkbzK+D1PmPeelRg== + "@swc/core-darwin-x64@1.15.30": version "1.15.30" resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.15.30.tgz#16e6e35fff5b07c712d8af44783da59ac64ad5cf" integrity sha512-WiJA0hiZI3nwQAO6mu5RqigtWGDtth4Hiq6rbZxAaQyhIcqKIg5IoMRc1Y071lrNJn29eEDMC86Rq58xgUxlDg== +"@swc/core-darwin-x64@1.15.32": + version "1.15.32" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.15.32.tgz#965044b632933146e319862ea7e4b717eb9f83dd" + integrity sha512-KOTXJXdAhWL+hZ77MYP3z+4pcMFaQhQ74yqyN1uz093q0YnbxpqMtYpPISbYvMHzVRNNx5kN+9RZAXEaadhWVA== + "@swc/core-linux-arm-gnueabihf@1.15.30": version "1.15.30" resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.30.tgz#abce7de734301109a7df23c22f6b6d233e3b9de9" integrity sha512-YANuFUo48kIT6plJgCD0keae9HFXfjxsbvsgevqc0hr/07X/p7sAWTFOGYEc2SXcASaK7UvuQqzlbW8pr7R79g== +"@swc/core-linux-arm-gnueabihf@1.15.32": + version "1.15.32" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.32.tgz#70e70ad6ad961055f4a9be9e4947e455c18239e6" + integrity sha512-oOoxLweljlc0A4X8ybsgxV7cVaYTwBOg2iMDJcFR3Sr48C+lsv9VzSmqdK/IVIXF4W4GjLc3VqTAdSMXlfVLuQ== + "@swc/core-linux-arm64-gnu@1.15.30": version "1.15.30" resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.30.tgz#9a4e418cdbbfe64506dd12469a553c07e1924fef" integrity sha512-VndG8jaR4ugY6u+iVOT0Q+d2fZd7sLgjPgN8W/Le+3EbZKl+cRfFxV7Eoz4gfLqhmneZPdcIzf9T3LkgkmqNLg== +"@swc/core-linux-arm64-gnu@1.15.32": + version "1.15.32" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.32.tgz#7b82e2cc5995e8f919e29f6ce702285f5f1c3ad1" + integrity sha512-oDzEkdl6D6BAWdMtU5KGO7y3HR5fJcvByNLyEk9+ugj8nP5Ovb7P4kBcStBXc4MPExFGQryehiINMlmY8HlclA== + "@swc/core-linux-arm64-musl@1.15.30": version "1.15.30" resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.30.tgz#4cd68ccb2af71c3ec539b15aa15c8fd304833d26" integrity sha512-1SYGs2l0Yyyi0pR/P/NKz/x0kqxkoiw+BXeJjLUdecSk/KasncWlJrc6hOvFSgKHOBrzgM5jwuluKtlT8dnrcA== +"@swc/core-linux-arm64-musl@1.15.32": + version "1.15.32" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.32.tgz#16c581b9f859b0175a8bab5cbf694bef7dbf95b8" + integrity sha512-omcqjoZP/b8D8PuczVoRwJieC6ibj7qIxTftNYokz4/aSmKFHvsd7nIFfPk5ZvtzncbH4AY7+Dkr/Lp2gWxYeA== + "@swc/core-linux-ppc64-gnu@1.15.30": version "1.15.30" resolved "https://registry.yarnpkg.com/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.30.tgz#561997d3c5f392db7e3473cb4bbc43e6d6b1160c" integrity sha512-TXREtiXeRhbfDFbmhnkIsXpKfzbfT73YkV2ZF6w0sfxgjC5zI2ZAbaCOq25qxvegofj2K93DtOpm9RLaBgqR2g== +"@swc/core-linux-ppc64-gnu@1.15.32": + version "1.15.32" + resolved "https://registry.yarnpkg.com/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.32.tgz#420f7744dae327c8e4917c87ced5c1b3e0a38f96" + integrity sha512-KGkTMyz/Tbn3PBNu0AVZ4GTDFKnICrYcTiNPZq8DrvK42pnFsf3GNDrIG9E5AtQlTmC0YigkWKmu0eMcfTrmgA== + "@swc/core-linux-s390x-gnu@1.15.30": version "1.15.30" resolved "https://registry.yarnpkg.com/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.30.tgz#d6f1d5dceca794909305584cb69f80dd91820410" integrity sha512-DCR2YYeyd6DQE4OuDhImouuNcjXEiEdnn1Y0DyGteugPEDvVuvYk8Xddi+4o2SgWH6jiW8/I+3emZvbep1NC+g== +"@swc/core-linux-s390x-gnu@1.15.32": + version "1.15.32" + resolved "https://registry.yarnpkg.com/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.32.tgz#9b563a3a73c544f29454e53894bfe533b9a27ffe" + integrity sha512-G3Aa4tVS/3OGZBkoNIwUF9F6RAy+Osb4GOlo62SinLmDiErz/ykmM7KH0wkz6l9kM8jJq1HyAM6atJTUEbBk7g== + "@swc/core-linux-x64-gnu@1.15.30": version "1.15.30" resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.30.tgz#c3e91c60f265a62cec60145f0d2d931feb1cf41a" integrity sha512-5Pizw3NgfOJ5BJOBK8TIRa59xFW2avESTOBDPTAYwZYa1JNDs+KMF9lUfjJiJLM5HiMs/wPheA9eiT0q9m2AoA== +"@swc/core-linux-x64-gnu@1.15.32": + version "1.15.32" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.32.tgz#615c7bcc1890379dffcc74b6780e2277e65f4b61" + integrity sha512-ERsjfGcj6CBmj3vJnGDO8m8rTvw6RqMcWo1dogOtNx3/+/0+NNpJiXDobJrr1GwInI/BHAEkvSFIH6d2LqPcUQ== + "@swc/core-linux-x64-musl@1.15.30": version "1.15.30" resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.30.tgz#3fd112e617a951438f73930b514adf19375067fb" integrity sha512-qyqydP/wyH8alcIP4a2hnGSjHLJjm9H7yDFup+CPy9oTahFgLLwnNcv5UHXqO2Qs3AIND+cls5f/Bb6hqpxdgA== +"@swc/core-linux-x64-musl@1.15.32": + version "1.15.32" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.32.tgz#038604d25bdebb1d1ad780d827a44654fa4b5bdd" + integrity sha512-N4Ggahe/8SUbTX50P6EdhbW9YWcgbZVb52R4cq6MK+zsoMjRq7rGvV5ztA05QnbaCYqMYx8rTY7KAIA3Crdo4Q== + "@swc/core-win32-arm64-msvc@1.15.30": version "1.15.30" resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.30.tgz#d005dce92e4ec1b0a7898667c9cf5e5215e4631c" integrity sha512-CaQENgDHVGOg1mSF5sQVgvfFHG9kjMor2rkLMLeLOkfZYNj13ppnJ9+lfaBZLZUMMbnlGQnavCJb8PVBUOso7Q== +"@swc/core-win32-arm64-msvc@1.15.32": + version "1.15.32" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.32.tgz#c82006e6ef92a998e96d2160b1657f5334af4d54" + integrity sha512-01yN0o9jvo8xBTP12aPK2wW8b41jmOlGbDDlAnoynotc4pO6xA0zby9f1z6j++qXDpGBttLySq1omgVrlQKYcw== + "@swc/core-win32-ia32-msvc@1.15.30": version "1.15.30" resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.30.tgz#67ebfaa22266835a3d82776014c2f428346062bd" integrity sha512-30VdLeGk6fugiUs/kUdJ/pAg7z/zpvVbR11RH60jZ0Z42WIeIniYx0rLEWN7h/pKJ3CopqsQ3RsogCAkRKiA2g== +"@swc/core-win32-ia32-msvc@1.15.32": + version "1.15.32" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.32.tgz#e2ae1c95bd6599322bc6e9a82685b7537a193f7b" + integrity sha512-fLagI9XZYNpTcmlqAcp3KBtmj7E19WCmYD80Jxj1Kn5tGNa7yxNLd3NNdWxuZGUPl5iC0/KqZru7g08gF6Fsrw== + "@swc/core-win32-x64-msvc@1.15.30": version "1.15.30" resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.30.tgz#cb602b53f9cdcdfb580cecdb02b536339d4b004b" integrity sha512-4iObHPR+Q4oDY110EF5SF5eIaaVJNpMdG9C0q3Q92BsJ5y467uHz7sYQhP60WYlLFsLQ1el2YrIPUItUAQGOKg== +"@swc/core-win32-x64-msvc@1.15.32": + version "1.15.32" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.32.tgz#2535c791821054072a511dee0d13e5de9c5cd29b" + integrity sha512-gbc2bQ/T2CiR+w0OvcVKwLOFAcPZBvmWmolbwpg1E8UrpeC03DGtyMUApOHNXNYWA3SHFrYXCQtosrcMza1YFg== + "@swc/core@^1.15.6": version "1.15.30" resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.15.30.tgz#2f77d5ed3b0df964aac8aaa251dc43ed822100cc" @@ -11166,6 +12798,27 @@ "@swc/core-win32-ia32-msvc" "1.15.30" "@swc/core-win32-x64-msvc" "1.15.30" +"@swc/core@^1.3.46": + version "1.15.32" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.15.32.tgz#2333d66f4b8e7c4fded087ead13c135ff84ab9d6" + integrity sha512-/eWL0n43D64QWEUHLtTE+jDqjkJhyidjkDhv6f0uJohOUAhywxQ9wXYp845DNNds0JpCdI4Uo0a9bl+vbXf+ew== + dependencies: + "@swc/counter" "^0.1.3" + "@swc/types" "^0.1.26" + optionalDependencies: + "@swc/core-darwin-arm64" "1.15.32" + "@swc/core-darwin-x64" "1.15.32" + "@swc/core-linux-arm-gnueabihf" "1.15.32" + "@swc/core-linux-arm64-gnu" "1.15.32" + "@swc/core-linux-arm64-musl" "1.15.32" + "@swc/core-linux-ppc64-gnu" "1.15.32" + "@swc/core-linux-s390x-gnu" "1.15.32" + "@swc/core-linux-x64-gnu" "1.15.32" + "@swc/core-linux-x64-musl" "1.15.32" + "@swc/core-win32-arm64-msvc" "1.15.32" + "@swc/core-win32-ia32-msvc" "1.15.32" + "@swc/core-win32-x64-msvc" "1.15.32" + "@swc/counter@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" @@ -11185,7 +12838,7 @@ dependencies: tslib "^2.8.0" -"@swc/jest@^0.2.39": +"@swc/jest@^0.2.22", "@swc/jest@^0.2.39": version "0.2.39" resolved "https://registry.yarnpkg.com/@swc/jest/-/jest-0.2.39.tgz#482bee0adb0726fab1487a4f902a278ec563a6b7" integrity sha512-eyokjOwYd0Q8RnMHri+8/FS1HIrIUKK/sRrFp8c1dThUOfNeCWbLmBP1P5VsKdvmkd25JaH+OKYwEYiAYg9YAA== @@ -11475,6 +13128,39 @@ resolved "https://registry.npmmirror.com/@types/aws-lambda/-/aws-lambda-8.10.133.tgz#cc21de2edc623f0fd9a5290674c4b9f30971bc58" integrity sha512-sr852MAL/79rjDelXP6ZuJ6GwOvXIRrFAoC8a+w91mZ5XR71CuzSgo1d0+pG1qgfPhjFgaibu7SWaoC5BA7pyQ== +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74" + integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q== + dependencies: + "@babel/types" "^7.28.2" + "@types/body-parser@*": version "1.19.5" resolved "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" @@ -11887,6 +13573,13 @@ resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.16.tgz#8ebe53d69efada7044454e3305c19017d97ced2a" integrity sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg== +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + "@types/hast@^2.0.0": version "2.3.9" resolved "https://registry.npmmirror.com/@types/hast/-/hast-2.3.9.tgz#a9a1b5bbce46e8a1312e977364bacabc8e93d2cf" @@ -11933,7 +13626,7 @@ dependencies: "@types/node" "*" -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.6": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1", "@types/istanbul-lib-coverage@^2.0.6": version "2.0.6" resolved "https://registry.npmmirror.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== @@ -11960,6 +13653,14 @@ expect "^29.0.0" pretty-format "^29.0.0" +"@types/jest@^29.5.11": + version "29.5.14" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.14.tgz#2b910912fa1d6856cadcd0c1f95af7df1d6049e5" + integrity sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + "@types/js-cookie@^2.2.6": version "2.2.7" resolved "https://registry.npmmirror.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3" @@ -11975,6 +13676,15 @@ resolved "https://registry.npmmirror.com/@types/js-yaml/-/js-yaml-4.0.9.tgz#cd82382c4f902fed9691a2ed79ec68c5898af4c2" integrity sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg== +"@types/jsdom@^20.0.0": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" + integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ== + dependencies: + "@types/node" "*" + "@types/tough-cookie" "*" + parse5 "^7.0.0" + "@types/json-schema@*", "@types/json-schema@^7.0.11", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" @@ -12143,7 +13853,7 @@ resolved "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== -"@types/prop-types@^15.7.12": +"@types/prop-types@^15.7.12", "@types/prop-types@^15.7.15": version "15.7.15" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7" integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw== @@ -12177,11 +13887,16 @@ resolved "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/react-dom@*", "@types/react-dom@<18.0.0", "@types/react-dom@^18", "@types/react-dom@^18.0.0": +"@types/react-dom@*", "@types/react-dom@^18.0.0": version "18.3.7" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.7.tgz#b89ddf2cd83b4feafcc4e2ea41afdfb95a0d194f" integrity sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ== +"@types/react-dom@<18.0.0": + version "17.0.26" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.26.tgz#fa7891ba70fd39ddbaa7e85b6ff9175bb546bc1b" + integrity sha512-Z+2VcYXJwOqQ79HreLU/1fyQ88eXSSFh6I3JdrEHQIfYSI0kCQpTGvOrbE6jFGGYXKsHuwY9tBa/w5Uo6KzrEg== + "@types/react-redux@^7.1.20": version "7.1.33" resolved "https://registry.npmmirror.com/@types/react-redux/-/react-redux-7.1.33.tgz#53c5564f03f1ded90904e3c90f77e4bd4dc20b15" @@ -12206,7 +13921,12 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^16.13.1 || ^17.0.0 || ^18.0.0", "@types/react@^18": +"@types/react-transition-group@^4.4.12": + version "4.4.12" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" + integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== + +"@types/react@*", "@types/react@^16.13.1 || ^17.0.0 || ^18.0.0": version "18.3.28" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.28.tgz#0a85b1a7243b4258d9f626f43797ba18eb5f8781" integrity sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw== @@ -12301,6 +14021,13 @@ dependencies: "@types/node" "*" +"@types/set-cookie-parser@^2.4.10": + version "2.4.10" + resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.10.tgz#ad3a807d6d921db9720621ea3374c5d92020bcbc" + integrity sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw== + dependencies: + "@types/node" "*" + "@types/sockjs@^0.3.36": version "0.3.36" resolved "https://registry.npmmirror.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" @@ -12335,6 +14062,11 @@ resolved "https://registry.npmmirror.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== +"@types/statuses@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.6.tgz#66748315cc9a96d63403baa8671b2c124f8633aa" + integrity sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA== + "@types/stream-buffers@^3.0.3": version "3.0.8" resolved "https://registry.yarnpkg.com/@types/stream-buffers/-/stream-buffers-3.0.8.tgz#9981c092b72c7e1889e3724db40338f503aeac62" @@ -12814,6 +14546,11 @@ a-sync-waterfall@^1.0.0: resolved "https://registry.npmmirror.com/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz#75b6b6aa72598b497a125e7a2770f14f4c8a1fa7" integrity sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA== +abab@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + abbrev@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" @@ -12826,7 +14563,7 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" -accepts@^1.3.8, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: +accepts@^1.3.5, accepts@^1.3.8, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -12834,6 +14571,14 @@ accepts@^1.3.8, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" +acorn-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== + dependencies: + acorn "^8.1.0" + acorn-walk "^8.0.2" + acorn-import-phases@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7" @@ -12844,19 +14589,19 @@ acorn-jsx@^5.3.2: resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn-walk@^8.3.4: +acorn-walk@^8.0.2, acorn-walk@^8.3.4: version "8.3.5" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.5.tgz#8a6b8ca8fc5b34685af15dabb44118663c296496" integrity sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw== dependencies: acorn "^8.11.0" -acorn@^8.11.0, acorn@^8.15.0, acorn@^8.16.0: +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.1.0, acorn@^8.11.0, acorn@^8.15.0, acorn@^8.16.0, acorn@^8.8.1: version "8.16.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== @@ -13074,7 +14819,7 @@ any-promise@^1.0.0: resolved "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== -anymatch@~3.1.2: +anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -13562,7 +15307,7 @@ axios@^1.0.0: form-data "^4.0.0" proxy-from-env "^1.1.0" -axios@^1.12.0, axios@^1.15.0: +axios@^1.12.0, axios@^1.15.0, axios@^1.7.4: version "1.15.2" resolved "https://registry.yarnpkg.com/axios/-/axios-1.15.2.tgz#eb8fb6d30349abace6ade5b4cb4d9e8a0dc23e5b" integrity sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A== @@ -13581,6 +15326,40 @@ b4a@^1.6.4: resolved "https://registry.npmmirror.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9" integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + babel-plugin-macros@^3.1.0: version "3.1.0" resolved "https://registry.npmmirror.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" @@ -13599,6 +15378,35 @@ babel-polyfill@^6.26.0: core-js "^2.5.0" regenerator-runtime "^0.10.5" +babel-preset-current-node-syntax@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz#20730d6cdc7dda5d89401cab10ac6a32067acde6" + integrity sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" @@ -14030,7 +15838,7 @@ browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.4: node-releases "^2.0.14" update-browserslist-db "^1.0.13" -browserslist@^4.28.1: +browserslist@^4.24.0, browserslist@^4.28.1: version "4.28.2" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.2.tgz#f50b65362ef48974ca9f50b3680566d786b811d2" integrity sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg== @@ -14041,6 +15849,13 @@ browserslist@^4.28.1: node-releases "^2.0.36" update-browserslist-db "^1.2.3" +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + btoa-lite@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" @@ -14174,6 +15989,14 @@ cacache@^18.0.0: tar "^6.1.11" unique-filename "^3.0.0" +cache-content-type@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" + integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA== + dependencies: + mime-types "^2.1.18" + ylru "^1.2.0" + cacheable-lookup@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385" @@ -14248,6 +16071,16 @@ camelcase@5.0.0: resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -14423,6 +16256,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +cjs-module-lexer@^1.0.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" + integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== + classcat@^5.0.3: version "5.0.5" resolved "https://registry.yarnpkg.com/classcat/-/classcat-5.0.5.tgz#8c209f359a93ac302404a10161b501eba9c09c77" @@ -14496,6 +16334,11 @@ cli-width@^3.0.0: resolved "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + client-only@^0.0.1: version "0.0.1" resolved "https://registry.npmmirror.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" @@ -14549,6 +16392,11 @@ clz-buffer@^1.0.0: resolved "https://registry.yarnpkg.com/clz-buffer/-/clz-buffer-1.0.0.tgz#f8cab8e31d5746b5eacd9fe5c4d9505700f3a03f" integrity sha512-ApZYoWy06SfeIaJG/oBecF9ZBOYkP6uz31FYJF8gtGGacqz+YgD5kZuo5XBkgqI3tmL0E/vxyZ5q0PYgXjtxWg== +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + code-block-writer@^13.0.3: version "13.0.3" resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-13.0.3.tgz#90f8a84763a5012da7af61319dd638655ae90b5b" @@ -14590,6 +16438,11 @@ codeowners-utils@^1.0.2: ignore "^5.1.4" locate-path "^5.0.0" +collect-v8-coverage@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80" + integrity sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw== + color-convert@^1.9.0, color-convert@^1.9.3: version "1.9.3" resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -14876,14 +16729,14 @@ constants-browserify@^1.0.0: resolved "https://registry.npmmirror.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== -content-disposition@0.5.4, content-disposition@~0.5.4: +content-disposition@0.5.4, content-disposition@~0.5.2, content-disposition@~0.5.4: version "0.5.4" resolved "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" -content-type@^1.0.5, content-type@~1.0.4, content-type@~1.0.5: +content-type@^1.0.4, content-type@^1.0.5, content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== @@ -14893,6 +16746,11 @@ convert-source-map@^1.5.0: resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + cookie-parser@^1.4.5: version "1.4.6" resolved "https://registry.npmmirror.com/cookie-parser/-/cookie-parser-1.4.6.tgz#3ac3a7d35a7a03bbc7e365073a26074824214594" @@ -14936,12 +16794,17 @@ cookie@^0.7.0, cookie@~0.7.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== +cookie@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.1.1.tgz#3bb9bdfc82369db9c2f69c93c9c3ceb310c88b3c" + integrity sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ== + cookiejar@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== -cookies@~0.9.1: +cookies@~0.9.0, cookies@~0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.9.1.tgz#3ffed6f60bb4fb5f146feeedba50acc418af67e3" integrity sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw== @@ -15106,6 +16969,19 @@ create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + create-require@^1.1.0, create-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -15157,6 +17033,13 @@ cross-fetch@^4.0.0: dependencies: node-fetch "^2.6.12" +cross-fetch@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.1.0.tgz#8f69355007ee182e47fa692ecbaa37a52e43c3d2" + integrity sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw== + dependencies: + node-fetch "^2.7.0" + cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -15323,6 +17206,23 @@ csso@^4.2.0: dependencies: css-tree "^1.1.2" +cssom@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" + integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + cssstyle@^6.0.1: version "6.2.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-6.2.0.tgz#c41b59955c19c7a1223352d67ca462750204ad0f" @@ -15343,7 +17243,7 @@ csstype@^3.0.2, csstype@^3.1.2: resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== -csstype@^3.1.3, csstype@^3.2.2: +csstype@^3.1.3, csstype@^3.2.2, csstype@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== @@ -15466,6 +17366,15 @@ data-uri-to-buffer@^6.0.2: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== +data-urls@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" + integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== + dependencies: + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + data-urls@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-7.0.0.tgz#6dce8b63226a1ecfdd907ce18a8ccfb1eee506d3" @@ -15561,7 +17470,7 @@ debug@^4.3.6, debug@^4.4.3: dependencies: ms "^2.1.3" -decimal.js@^10.4.3, decimal.js@^10.6.0: +decimal.js@^10.4.2, decimal.js@^10.4.3, decimal.js@^10.6.0: version "10.6.0" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg== @@ -15580,6 +17489,11 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" +dedent@^1.0.0: + version "1.7.2" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.7.2.tgz#34e2264ab538301e27cf7b07bf2369c19baa8dd9" + integrity sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA== + deep-equal@^1.1.0: version "1.1.2" resolved "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.2.tgz#78a561b7830eef3134c7f6f3a3d6af272a678761" @@ -15731,7 +17645,7 @@ denque@^2.1.0: resolved "https://registry.npmmirror.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== -depd@2.0.0, depd@~2.0.0: +depd@2.0.0, depd@^2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -15786,6 +17700,11 @@ detect-libc@^2.0.0: resolved "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + detect-node-es@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" @@ -15972,6 +17891,13 @@ domelementtype@^2.0.1, domelementtype@^2.2.0: resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== + dependencies: + webidl-conversions "^7.0.0" + domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" resolved "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" @@ -16108,6 +18034,11 @@ elliptic@^6.6.1: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -16133,16 +18064,16 @@ enabled@2.0.x: resolved "https://registry.npmmirror.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== +encodeurl@^1.0.2, encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + encodeurl@^2.0.0, encodeurl@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - encoding@^0.1.13: version "0.1.13" resolved "https://registry.npmmirror.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -16187,6 +18118,11 @@ entities@^4.4.0: resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== +entities@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" + integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== + entities@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/entities/-/entities-8.0.0.tgz#c1df5fe3602429747fa233d0dd26f142f0ce4743" @@ -16506,6 +18442,38 @@ esbuild@^0.20.0: "@esbuild/win32-ia32" "0.20.2" "@esbuild/win32-x64" "0.20.2" +esbuild@^0.25.0: + version "0.25.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.12.tgz#97a1d041f4ab00c2fce2f838d2b9969a2d2a97a5" + integrity sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.12" + "@esbuild/android-arm" "0.25.12" + "@esbuild/android-arm64" "0.25.12" + "@esbuild/android-x64" "0.25.12" + "@esbuild/darwin-arm64" "0.25.12" + "@esbuild/darwin-x64" "0.25.12" + "@esbuild/freebsd-arm64" "0.25.12" + "@esbuild/freebsd-x64" "0.25.12" + "@esbuild/linux-arm" "0.25.12" + "@esbuild/linux-arm64" "0.25.12" + "@esbuild/linux-ia32" "0.25.12" + "@esbuild/linux-loong64" "0.25.12" + "@esbuild/linux-mips64el" "0.25.12" + "@esbuild/linux-ppc64" "0.25.12" + "@esbuild/linux-riscv64" "0.25.12" + "@esbuild/linux-s390x" "0.25.12" + "@esbuild/linux-x64" "0.25.12" + "@esbuild/netbsd-arm64" "0.25.12" + "@esbuild/netbsd-x64" "0.25.12" + "@esbuild/openbsd-arm64" "0.25.12" + "@esbuild/openbsd-x64" "0.25.12" + "@esbuild/openharmony-arm64" "0.25.12" + "@esbuild/sunos-x64" "0.25.12" + "@esbuild/win32-arm64" "0.25.12" + "@esbuild/win32-ia32" "0.25.12" + "@esbuild/win32-x64" "0.25.12" + esbuild@^0.27.0: version "0.27.7" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.7.tgz#bcadce22b2f3fd76f257e3a64f83a64986fea11f" @@ -16585,7 +18553,7 @@ escodegen@^1.8.1: optionalDependencies: source-map "~0.6.1" -escodegen@^2.1.0: +escodegen@^2.0.0, escodegen@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== @@ -16934,6 +18902,11 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + expand-template@^2.0.3: version "2.0.3" resolved "https://registry.npmmirror.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" @@ -16946,7 +18919,7 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^29.0.0: +expect@^29.0.0, expect@^29.7.0: version "29.7.0" resolved "https://registry.npmmirror.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== @@ -17202,6 +19175,18 @@ fast-shallow-equal@^1.0.0: resolved "https://registry.npmmirror.com/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b" integrity sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw== +fast-string-truncated-width@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz#23afe0da67d752ca0727538f1e6967759728ce49" + integrity sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g== + +fast-string-width@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/fast-string-width/-/fast-string-width-3.0.2.tgz#16dbabb491ce5585b5ecb675b65c165d71688eeb" + integrity sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg== + dependencies: + fast-string-truncated-width "^3.0.2" + fast-text-encoding@^1.0.0: version "1.0.6" resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz#0aa25f7f638222e3396d72bf936afcf1d42d6867" @@ -17212,7 +19197,14 @@ fast-uri@^3.0.1: resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== -fast-xml-builder@^1.1.4: +fast-wrap-ansi@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/fast-wrap-ansi/-/fast-wrap-ansi-0.2.0.tgz#c0ae3f3982d061c3d657ec927196fbb47e22fe64" + integrity sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w== + dependencies: + fast-string-width "^3.0.2" + +fast-xml-builder@^1.1.4, fast-xml-builder@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/fast-xml-builder/-/fast-xml-builder-1.1.5.tgz#50188e1452a5fa095f415d3e63dcac0a1dbcbf11" integrity sha512-4TJn/8FKLeslLAH3dnohXqE3QSoxkhvaMzepOIZytwJXZO69Bfz0HBdDHzOTOon6G59Zrk6VQ2bEiv1t61rfkA== @@ -17235,6 +19227,16 @@ fast-xml-parser@5.5.8: path-expression-matcher "^1.2.0" strnum "^2.2.0" +fast-xml-parser@5.7.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.7.2.tgz#fecd0b054c6c132fc03dab994a413da781e0eb9f" + integrity sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w== + dependencies: + "@nodable/entities" "^2.1.0" + fast-xml-builder "^1.1.5" + path-expression-matcher "^1.5.0" + strnum "^2.2.3" + fast-xml-parser@^4.3.0: version "4.3.3" resolved "https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-4.3.3.tgz#aeaf5778392329f17168c40c51bcbfec8ff965be" @@ -17268,6 +19270,13 @@ faye-websocket@^0.11.3: dependencies: websocket-driver ">=0.5.1" +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + fbemitter@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" @@ -17420,7 +19429,7 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.1.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -17754,7 +19763,7 @@ fsevents@2.3.2: resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fsevents@~2.3.2: +fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.3" resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== @@ -17833,6 +19842,11 @@ generic-pool@3.9.0: resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4" integrity sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g== +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -18061,7 +20075,7 @@ glob@^13.0.0: minipass "^7.1.3" path-scurry "^2.0.2" -glob@^7.1.3, glob@^7.1.6, glob@^7.1.7: +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7: version "7.2.3" resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -18276,6 +20290,11 @@ graphql@^16.0.0, graphql@^16.8.1: resolved "https://registry.npmmirror.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== +graphql@^16.13.2: + version "16.13.2" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.13.2.tgz#4d2b73df5796b201f1bc2765f5d7067f689cb55f" + integrity sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig== + gtoken@^7.0.0: version "7.0.1" resolved "https://registry.npmmirror.com/gtoken/-/gtoken-7.0.1.tgz#b64bd01d88268ea3a3572c9076a85d1c48f1a455" @@ -18556,6 +20575,14 @@ headers-polyfill@3.2.5: resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.2.5.tgz#6e67d392c9d113d37448fe45014e0afdd168faed" integrity sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA== +headers-polyfill@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-5.0.1.tgz#9554eb2892b666db1c7a3380a91b6cfd467a6b19" + integrity sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA== + dependencies: + "@types/set-cookie-parser" "^2.4.10" + set-cookie-parser "^3.0.1" + helmet@^6.0.0: version "6.2.0" resolved "https://registry.npmmirror.com/helmet/-/helmet-6.2.0.tgz#c29d62014be4c70b8ef092c9c5e54c8c26b8e16e" @@ -18636,6 +20663,13 @@ hpagent@^1.2.0: resolved "https://registry.npmmirror.com/hpagent/-/hpagent-1.2.0.tgz#0ae417895430eb3770c03443456b8d90ca464903" integrity sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA== +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== + dependencies: + whatwg-encoding "^2.0.0" + html-encoding-sniffer@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz#f8d9390b3b348b50d4f61c16dd2ef5c05980a882" @@ -18653,6 +20687,11 @@ html-entities@^2.4.0: resolved "https://registry.npmmirror.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + html-minifier-terser@^6.0.2: version "6.1.0" resolved "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" @@ -18692,7 +20731,7 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" -http-assert@^1.5.0: +http-assert@^1.3.0, http-assert@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.5.0.tgz#c389ccd87ac16ed2dfa6246fd73b926aa00e6b8f" integrity sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w== @@ -18730,6 +20769,17 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-errors@^1.6.3, http-errors@~1.8.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + http-errors@^2.0.0, http-errors@~2.0.0, http-errors@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" @@ -18751,17 +20801,6 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" -http-errors@~1.8.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" @@ -18914,7 +20953,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.6.2, iconv-lite@^0.6.3: +iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -19004,6 +21043,14 @@ import-from@^3.0.0: dependencies: resolve-from "^5.0.0" +import-local@^3.0.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -19411,6 +21458,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + is-generator-function@^1.0.10, is-generator-function@^1.0.7: version "1.0.10" resolved "https://registry.npmmirror.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" @@ -19777,12 +21829,12 @@ isobject@^3.0.1: resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isolated-vm@5.0.1, isolated-vm@^6.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/isolated-vm/-/isolated-vm-5.0.1.tgz#d87b12cf8889e351cb1598a4aeea00bb458bf20c" - integrity sha512-hs7+ff59Z2zDvavfcjuot/r1gm6Bmpt+GoZxmVfxUmXaX5scOvUq/Rnme+mUtSh5lW41hH8gAuvk/yTJDYO8Fg== +isolated-vm@^6.0.1: + version "6.1.2" + resolved "https://registry.yarnpkg.com/isolated-vm/-/isolated-vm-6.1.2.tgz#812c655f9dc4e1328a766d520cff6c3a88ee911b" + integrity sha512-GGfsHqtlZiiurZaxB/3kY7LLAXR3sgzDul0fom4cSyBjx6ZbjpTrFWiH3z/nUfLJGJ8PIq9LQmQFiAxu24+I7A== dependencies: - prebuild-install "^7.1.1" + node-gyp-build "^4.8.4" isomorphic-dompurify@^2.14.0: version "2.36.0" @@ -19836,6 +21888,59 @@ isstream@~0.1.2: resolved "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-instrument@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" + integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + iterall@^1.2.1, iterall@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" @@ -19871,6 +21976,86 @@ jackspeak@^3.1.2: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + create-jest "^29.7.0" + exit "^0.1.2" + import-local "^3.0.2" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + jest-css-modules@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/jest-css-modules/-/jest-css-modules-2.1.0.tgz#9c25ebe9d0214d8f55861a442268fdd4b01b4781" @@ -19888,11 +22073,82 @@ jest-diff@^29.7.0: jest-get-type "^29.6.3" pretty-format "^29.7.0" +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-jsdom@^29.0.2: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz#d206fa3551933c3fd519e5dfdb58a0f5139a837f" + integrity sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/jsdom" "^20.0.0" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + jsdom "^20.0.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + jest-get-type@^29.6.3: version "29.6.3" resolved "https://registry.npmmirror.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + jest-matcher-utils@^29.7.0: version "29.7.0" resolved "https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" @@ -19918,11 +22174,134 @@ jest-message-util@^29.7.0: slash "^3.0.0" stack-utils "^2.0.3" +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + jest-regex-util@30.0.1: version "30.0.1" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-30.0.1.tgz#f17c1de3958b67dfe485354f5a10093298f2a49b" integrity sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" + +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.0.2, jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + natural-compare "^1.4.0" + pretty-format "^29.7.0" + semver "^7.5.3" + jest-util@^29.7.0: version "29.7.0" resolved "https://registry.npmmirror.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" @@ -19935,6 +22314,32 @@ jest-util@^29.7.0: graceful-fs "^4.2.9" picomatch "^2.2.3" +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.7.0" + +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -19954,6 +22359,16 @@ jest-worker@^29.7.0: merge-stream "^2.0.0" supports-color "^8.0.0" +jest@^29.0.0, jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" + import-local "^3.0.2" + jest-cli "^29.7.0" + jiti@2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.2.tgz#d19b7732ebb6116b06e2038da74a55366faef560" @@ -20024,6 +22439,14 @@ js-yaml@^3.10.0, js-yaml@^3.6.1, js-yaml@^3.8.3: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.13.1: + version "3.14.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.2.tgz#77485ce1dd7f33c061fd1b16ecea23b55fcb04b0" + integrity sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^4.0.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -20041,6 +22464,38 @@ jsbn@~0.1.0: resolved "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== +jsdom@^20.0.0: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" + integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== + dependencies: + abab "^2.0.6" + acorn "^8.8.1" + acorn-globals "^7.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.2" + decimal.js "^10.4.2" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.2" + parse5 "^7.1.1" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + ws "^8.11.0" + xml-name-validator "^4.0.0" + jsdom@^28.0.0: version "28.1.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-28.1.0.tgz#ac4203e58fd24d7b0f34359ab00d6d9caebd4b62" @@ -20078,6 +22533,11 @@ jsep@^1.4.0: resolved "https://registry.yarnpkg.com/jsep/-/jsep-1.4.0.tgz#19feccbfa51d8a79f72480b4b8e40ce2e17152f0" integrity sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + json-bigint@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" @@ -20171,7 +22631,7 @@ json5@^1.0.1, json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.1.3: +json5@^2.1.2, json5@^2.1.3, json5@^2.2.3: version "2.2.3" resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -20469,6 +22929,43 @@ koa-compose@^4.1.0: resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== +koa-convert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-2.0.0.tgz#86a0c44d81d40551bae22fee6709904573eea4f5" + integrity sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA== + dependencies: + co "^4.6.0" + koa-compose "^4.1.0" + +koa@2.15.4: + version "2.15.4" + resolved "https://registry.yarnpkg.com/koa/-/koa-2.15.4.tgz#7000b3d8354558671adb1ba1b1c09bedb5f8da75" + integrity sha512-7fNBIdrU2PEgLljXoPWoyY4r1e+ToWCmzS/wwMPbUNs7X+5MMET1ObhJBlUkF5uZG9B6QhM2zS1TsH6adegkiQ== + dependencies: + accepts "^1.3.5" + cache-content-type "^1.0.0" + content-disposition "~0.5.2" + content-type "^1.0.4" + cookies "~0.9.0" + debug "^4.3.2" + delegates "^1.0.0" + depd "^2.0.0" + destroy "^1.0.4" + encodeurl "^1.0.2" + escape-html "^1.0.3" + fresh "~0.5.2" + http-assert "^1.3.0" + http-errors "^1.6.3" + is-generator-function "^1.0.7" + koa-compose "^4.1.0" + koa-convert "^2.0.0" + on-finished "^2.3.0" + only "~0.0.2" + parseurl "^1.3.2" + statuses "^1.5.0" + type-is "^1.6.16" + vary "^1.1.2" + koa@3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/koa/-/koa-3.0.3.tgz#40a97b6da0c0d49a704af82db2b3e5a618ed9042" @@ -20933,6 +23430,13 @@ magic-string@^0.30.3: dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + make-error@^1.1.1: version "1.3.6" resolved "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" @@ -20956,6 +23460,13 @@ make-fetch-happen@^13.0.0: promise-retry "^2.0.1" ssri "^10.0.0" +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + markdown-it@^14.1.0: version "14.1.1" resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.1.tgz#856f90b66fc39ae70affd25c1b18b581d7deee1f" @@ -21586,7 +24097,7 @@ mime-db@^1.54.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== -mime-types@^2.0.8, mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@^2.1.35, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.0.8, mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@^2.1.35, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -21938,6 +24449,30 @@ msw@^1.0.0: type-fest "^2.19.0" yargs "^17.3.1" +msw@^2.14.2: + version "2.14.2" + resolved "https://registry.yarnpkg.com/msw/-/msw-2.14.2.tgz#f42e948fd031995b2884fec5c26bdfc0900efd54" + integrity sha512-D2bTe0tpuf9nw4DA39wFaqUD/hRPKj0DKpo2lAqu+A47Ifg4+h0hbfn6QxVOsiUY2uhgEN6TTpGSHDsc+ysYNg== + dependencies: + "@inquirer/confirm" "^6.0.11" + "@mswjs/interceptors" "^0.41.3" + "@open-draft/deferred-promise" "^3.0.0" + "@types/statuses" "^2.0.6" + cookie "^1.1.1" + graphql "^16.13.2" + headers-polyfill "^5.0.1" + is-node-process "^1.2.0" + outvariant "^1.4.3" + path-to-regexp "^6.3.0" + picocolors "^1.1.1" + rettime "^0.11.7" + statuses "^2.0.2" + strict-event-emitter "^0.5.1" + tough-cookie "^6.0.1" + type-fest "^5.5.0" + until-async "^3.0.2" + yargs "^17.7.2" + multer@^2.0.2: version "2.1.1" resolved "https://registry.yarnpkg.com/multer/-/multer-2.1.1.tgz#122d819244fbdfee1efddd9147426691014385b7" @@ -21961,6 +24496,11 @@ mute-stream@0.0.8: resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +mute-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-3.0.0.tgz#cd8014dd2acb72e1e91bb67c74f0019e620ba2d1" + integrity sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw== + mysql2@^3.0.0: version "3.10.0" resolved "https://registry.npmmirror.com/mysql2/-/mysql2-3.10.0.tgz#5109449fda3dc03fb7d6bdf2cf91f97477081987" @@ -22239,6 +24779,11 @@ node-hex@^1.0.1: resolved "https://registry.yarnpkg.com/node-hex/-/node-hex-1.0.1.tgz#606208e91f9c02b9b81531b692b9f1da4860fb24" integrity sha512-iwpZdvW6Umz12ICmu9IYPRxg0tOLGmU3Tq2tKetejCj3oZd7b2nUXwP3a7QA5M9glWy8wlPS1G3RwM/CdsUbdQ== +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + node-releases@^2.0.14: version "2.0.14" resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" @@ -22358,6 +24903,11 @@ nunjucks@^3.2.3: asap "^2.0.3" commander "^5.1.0" +nwsapi@^2.2.2: + version "2.2.23" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.23.tgz#59712c3a88e6de2bb0b6ccc1070397267019cf6c" + integrity sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ== + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -22514,7 +25064,7 @@ oidc-token-hash@^5.0.3: resolved "https://registry.npmmirror.com/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz#9a229f0a1ce9d4fc89bcaee5478c97a889e7b7b6" integrity sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw== -on-finished@2.4.1, on-finished@^2.4.1, on-finished@~2.4.1: +on-finished@2.4.1, on-finished@^2.3.0, on-finished@^2.4.1, on-finished@~2.4.1: version "2.4.1" resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -22559,6 +25109,11 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +only@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" + integrity sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ== + ono@^7.1.3: version "7.1.3" resolved "https://registry.npmmirror.com/ono/-/ono-7.1.3.tgz#a054e96a388f566a6c4c95e1e92b9b253722d286" @@ -22720,6 +25275,11 @@ outvariant@^1.2.1, outvariant@^1.4.0: resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.2.tgz#f54f19240eeb7f15b28263d5147405752d8e2066" integrity sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ== +outvariant@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.3.tgz#221c1bfc093e8fec7075497e7799fdbf43d14873" + integrity sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA== + own-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" @@ -22965,6 +25525,13 @@ parse5@^6.0.0, parse5@^6.0.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^7.0.0, parse5@^7.1.1: + version "7.3.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" + integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== + dependencies: + entities "^6.0.0" + parse5@^8.0.0: version "8.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-8.0.1.tgz#f43bcd2cd683efe084075333e9ce0da7d06da31e" @@ -22972,7 +25539,7 @@ parse5@^8.0.0: dependencies: entities "^8.0.0" -parseurl@^1.3.3, parseurl@~1.3.2, parseurl@~1.3.3: +parseurl@^1.3.2, parseurl@^1.3.3, parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== @@ -23030,7 +25597,7 @@ path-exists@^4.0.0: resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-expression-matcher@^1.1.3, path-expression-matcher@^1.2.0: +path-expression-matcher@^1.1.3, path-expression-matcher@^1.2.0, path-expression-matcher@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz#3b98545dc88ffebb593e2d8458d0929da9275f4a" integrity sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ== @@ -23084,6 +25651,11 @@ path-to-regexp@^6.2.0: resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== +path-to-regexp@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4" + integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== + path-to-regexp@^8.0.0, path-to-regexp@^8.3.0: version "8.4.2" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.4.2.tgz#795c420c4f7ca45c5b887366f622ee0c9852cccd" @@ -23304,6 +25876,18 @@ pirates@^4.0.1, pirates@^4.0.6: resolved "https://registry.npmmirror.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== +pirates@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + pkg-dir@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" @@ -23805,7 +26389,7 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prompts@^2.4.2: +prompts@^2.0.1, prompts@^2.4.2: version "2.4.2" resolved "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== @@ -23927,6 +26511,13 @@ psl@^1.1.28: resolved "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +psl@^1.1.33: + version "1.15.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== + dependencies: + punycode "^2.3.1" + public-encrypt@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -23967,6 +26558,11 @@ pure-color@^1.2.0: resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== +pure-rand@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== + qs@6.11.0: version "6.11.0" resolved "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" @@ -23988,7 +26584,7 @@ qs@^6.11.0: dependencies: side-channel "^1.0.6" -qs@^6.12.2, qs@^6.12.3, qs@^6.14.1: +qs@^6.12.2, qs@^6.12.3, qs@^6.14.0, qs@^6.14.1: version "6.15.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.1.tgz#bdb55aed06bfac257a90c44a446a73fba5575c8f" integrity sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg== @@ -24113,6 +26709,11 @@ rate-limiter-flexible@^4.0.1: resolved "https://registry.yarnpkg.com/rate-limiter-flexible/-/rate-limiter-flexible-4.0.1.tgz#79b0ce111abe9c5da41d6fddf7cca93cedd3a8fc" integrity sha512-2/dGHpDFpeA0+755oUkW+EKyklqLS9lu0go9pDsbhqQjZcxfRyJ6LA4JI0+HAdZ2bemD/oOjUeZQB2lCZqXQfQ== +rate-limiter-flexible@^8.0.1: + version "8.3.0" + resolved "https://registry.yarnpkg.com/rate-limiter-flexible/-/rate-limiter-flexible-8.3.0.tgz#3dd39ff8e4fb0fbee653bbea440039796a7caebf" + integrity sha512-mzwlfipDLlRinPgELqVDJetke6Snq26nL565m8nLWXIcWgosYSeNRgqwh7ZrZ4MfYs8CNfmLvR5SBVz3rISQsQ== + raw-body@2.5.1: version "2.5.1" resolved "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" @@ -24449,7 +27050,7 @@ react-is@^18.0.0, react-is@^18.2.0: resolved "https://registry.npmmirror.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-is@^19.0.0: +react-is@^19.0.0, react-is@^19.2.4: version "19.2.5" resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.2.5.tgz#7e7b54143e9313fed787b23fd4295d5a23872ad9" integrity sha512-Dn0t8IQhCmeIT3wu+Apm1/YVsJXsGWi6k4sPdnBIdqMVtHtv0IGi6dcpNpNkNac0zB2uUAqNX3MHzN8c+z2rwQ== @@ -25002,9 +27603,9 @@ replace-in-file@^7.1.0: glob "^8.1.0" yargs "^17.7.2" -request@^2.88.0: +request@^2.88.0, request@^2.88.2: version "2.88.2" - resolved "https://registry.npmmirror.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" @@ -25058,6 +27659,13 @@ resolve-alpn@^1.2.0: resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" @@ -25081,6 +27689,11 @@ resolve-pkg-maps@^1.0.0: resolved "https://registry.npmmirror.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== +resolve.exports@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" + integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== + resolve@1.22.8, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.4: version "1.22.8" resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" @@ -25149,6 +27762,11 @@ retry@^0.12.0: resolved "https://registry.npmmirror.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== +rettime@^0.11.7: + version "0.11.8" + resolved "https://registry.yarnpkg.com/rettime/-/rettime-0.11.8.tgz#a32793a84c7fe8fc19c8410c52ee64fb0b7fba92" + integrity sha512-0fERGXktJTyJ+h8fBEiPxHPEFOu0h15JY7JtwrOVqR5K+vb99ho6IyOo7ekLS3h4sJCzIDy4VWKIbZUfe9njmg== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -25514,7 +28132,7 @@ semver@^5.0.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.3.1: +semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -25626,6 +28244,11 @@ set-cookie-parser@^2.4.6: resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== +set-cookie-parser@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-3.1.0.tgz#e0b1d94c8660c68e6a24dc4e2b5c9e955ccf7e28" + integrity sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw== + set-function-length@^1.1.1: version "1.2.0" resolved "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" @@ -25803,12 +28426,12 @@ side-channel@^1.1.0: side-channel-map "^1.0.1" side-channel-weakmap "^1.0.2" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -25948,6 +28571,14 @@ source-map-js@^1.2.1: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -26161,12 +28792,12 @@ statuses@2.0.1: resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0, statuses@~1.5.0: version "1.5.0" resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -statuses@^2.0.1, statuses@~2.0.1, statuses@~2.0.2: +statuses@^2.0.1, statuses@^2.0.2, statuses@~2.0.1, statuses@~2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== @@ -26269,11 +28900,24 @@ strict-event-emitter@^0.4.3: resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz#ff347c8162b3e931e3ff5f02cfce6772c3b07eb3" integrity sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg== +strict-event-emitter@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93" + integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== + string-hash@^1.1.1: version "1.1.3" resolved "https://registry.npmmirror.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" integrity sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A== +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -26450,6 +29094,11 @@ strip-bom@^3.0.0: resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -26477,7 +29126,7 @@ strnum@^1.0.5: resolved "https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== -strnum@^2.2.0: +strnum@^2.2.0, strnum@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.2.3.tgz#0119fce02749a11bb126a4d686ac5dbdf6e57586" integrity sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg== @@ -26715,6 +29364,11 @@ symbol-tree@^3.2.4: resolved "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +tagged-tag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/tagged-tag/-/tagged-tag-1.0.0.tgz#a0b5917c2864cba54841495abfa3f6b13edcf4d6" + integrity sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng== + tapable@^1.0.0: version "1.1.3" resolved "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -26901,6 +29555,15 @@ terser@^5.31.1: commander "^2.20.0" source-map-support "~0.5.20" +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + testcontainers@^11.9.0: version "11.14.0" resolved "https://registry.yarnpkg.com/testcontainers/-/testcontainers-11.14.0.tgz#ee4262acede48788018adc38f902bda86bd21585" @@ -27044,6 +29707,11 @@ tmp@^0.2.5: resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + to-buffer@^1.2.0, to-buffer@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.2.tgz#ffe59ef7522ada0a2d1cb5dfe03bb8abc3cdc133" @@ -27088,7 +29756,17 @@ tosource@^2.0.0-alpha.3: resolved "https://registry.npmmirror.com/tosource/-/tosource-2.0.0-alpha.3.tgz#ef385dac9092e009bf25c018838ddaae436daeb6" integrity sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug== -tough-cookie@^6.0.0: +tough-cookie@^4.1.2: + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tough-cookie@^6.0.0, tough-cookie@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-6.0.1.tgz#a495f833836609ed983c19bc65639cfbceb54c76" integrity sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw== @@ -27103,6 +29781,13 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" +tr46@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== + dependencies: + punycode "^2.1.1" + tr46@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-6.0.0.tgz#f5a1ae546a0adb32a277a2278d0d17fa2f9093e6" @@ -27322,6 +30007,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + type-fest@^0.13.1: version "0.13.1" resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" @@ -27347,12 +30037,19 @@ type-fest@^4.3.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== +type-fest@^5.5.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.6.0.tgz#502f7a003b7309e96a7e17052cc2ab2c7e5c7a31" + integrity sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA== + dependencies: + tagged-tag "^1.0.0" + type-flag@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/type-flag/-/type-flag-4.2.0.tgz#c92fd04b09309d66277a57d84a3f538b890307d8" integrity sha512-6h6QpSh5glA+BrMCq8FINo4o/BqSHNQdfIPpeSBt0s/6mynPaQWWZL+RHaYm95htTbid/spUbJer1yOCsA6ezQ== -type-is@^1.6.18, type-is@~1.6.18: +type-is@^1.6.16, type-is@^1.6.18, type-is@~1.6.18: version "1.6.18" resolved "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -27667,6 +30364,11 @@ universalify@^0.1.0: resolved "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + universalify@^2.0.0: version "2.0.1" resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" @@ -27682,6 +30384,11 @@ unraw@^3.0.0: resolved "https://registry.npmmirror.com/unraw/-/unraw-3.0.0.tgz#73443ed70d2ab09ccbac2b00525602d5991fbbe3" integrity sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg== +until-async@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/until-async/-/until-async-3.0.2.tgz#447f1531fdd7bb2b4c7a98869bdb1a4c2a23865f" + integrity sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw== + upath@2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" @@ -27722,7 +30429,7 @@ urijs@^1.19.10, urijs@^1.19.11: resolved "https://registry.npmmirror.com/urijs/-/urijs-1.19.11.tgz#204b0d6b605ae80bea54bea39280cdb7c9f923cc" integrity sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ== -url-parse@^1.5.10: +url-parse@^1.5.10, url-parse@^1.5.3: version "1.5.10" resolved "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== @@ -27890,6 +30597,15 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +v8-to-istanbul@^9.0.1: + version "9.3.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + valid-url@^1.0.9: version "1.0.9" resolved "https://registry.npmmirror.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" @@ -27993,6 +30709,13 @@ w3c-keyname@^2.2.4: resolved "https://registry.npmmirror.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5" integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ== +w3c-xmlserializer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== + dependencies: + xml-name-validator "^4.0.0" + w3c-xmlserializer@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" @@ -28000,6 +30723,13 @@ w3c-xmlserializer@^5.0.0: dependencies: xml-name-validator "^5.0.0" +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + watchpack@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102" @@ -28056,6 +30786,11 @@ webidl-conversions@^3.0.0: resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + webidl-conversions@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-8.0.1.tgz#0657e571fe6f06fcb15ca50ed1fdbcb495cd1686" @@ -28179,11 +30914,31 @@ websocket-extensions@>=0.1.1: resolved "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== + dependencies: + iconv-lite "0.6.3" + +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + whatwg-mimetype@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz#d8232895dbd527ceaee74efd4162008fb8a8cf48" integrity sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw== +whatwg-url@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" + whatwg-url@^16.0.0: version "16.0.1" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-16.0.1.tgz#047f7f4bd36ef76b7198c172d1b1cebc66f764dd" @@ -28400,6 +31155,14 @@ wrappy@1: resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + ws@*, ws@^8.18.0, ws@^8.18.2, ws@^8.8.0: version "8.20.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.20.0.tgz#4cd9532358eba60bc863aad1623dfb045a4d4af8" @@ -28432,6 +31195,11 @@ xml-but-prettier@^1.0.1: dependencies: repeat-string "^1.5.2" +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + xml-name-validator@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" @@ -28566,7 +31334,7 @@ yawn-yaml@^2.3.0: lodash "^4.17.21" yaml-js "^0.3.1" -ylru@^1.3.2: +ylru@^1.2.0, ylru@^1.3.2: version "1.4.0" resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.4.0.tgz#0cf0aa57e9c24f8a2cbde0cc1ca2c9592ac4e0f6" integrity sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA== From 4fca13af99bc8ee8dddc5f018715bae179bf65e0 Mon Sep 17 00:00:00 2001 From: Pankaj Walke Date: Thu, 30 Apr 2026 18:18:06 +0000 Subject: [PATCH 3/4] fix: pin msw to v1 for compatibility with mock handlers The mock service worker handlers use MSW v1 API (rest, setupWorker). Pin msw to ^1.0.0 to prevent CI from resolving v2 which has breaking API changes (rest -> http, setupWorker moved to msw/browser). Signed-off-by: Pankaj Walke --- packages/app/package.json | 2 +- yarn.lock | 318 +++----------------------------------- 2 files changed, 20 insertions(+), 300 deletions(-) diff --git a/packages/app/package.json b/packages/app/package.json index d03260c..a5b457e 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -54,7 +54,7 @@ "@mui/material": "^9.0.0", "@roadiehq/backstage-plugin-argo-cd": "^2.12.5", "@terasky/backstage-plugin-kro-resources-frontend": "^0.2.1", - "msw": "^2.14.2", + "msw": "^1.0.0", "react": "^18.0.2", "react-dom": "^18.0.2", "react-router-dom": "^6.3.0" diff --git a/yarn.lock b/yarn.lock index 8357095..37fbbca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2732,7 +2732,7 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.18.9", "@babel/runtime@^7.20.13", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.26.0", "@babel/runtime@^7.28.4", "@babel/runtime@^7.29.2": +"@babel/runtime@^7.18.9", "@babel/runtime@^7.20.13", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.26.0", "@babel/runtime@^7.28.4": version "7.29.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.2.tgz#9a6e2d05f4b6692e1801cd4fb176ad823930ed5e" integrity sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g== @@ -6049,7 +6049,7 @@ "@emotion/weak-memoize" "^0.3.1" stylis "4.2.0" -"@emotion/cache@^11.13.5", "@emotion/cache@^11.14.0": +"@emotion/cache@^11.13.5": version "11.14.0" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== @@ -6984,42 +6984,6 @@ resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== -"@inquirer/ansi@^2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@inquirer/ansi/-/ansi-2.0.5.tgz#7b7e121f6a0c40128711daf20325e6ff2cdff8b7" - integrity sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw== - -"@inquirer/confirm@^6.0.11": - version "6.0.12" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-6.0.12.tgz#7a317aec813214cec2f5339b9fa0926c20bf0dbe" - integrity sha512-h9FgGun3QwVYNj5TWIZZ+slii73bMoBFjPfVIGtnFuL4t8gBiNDV9PcSfIzkuxvgquJKt9nr1QzszpBzTbH8Og== - dependencies: - "@inquirer/core" "^11.1.9" - "@inquirer/type" "^4.0.5" - -"@inquirer/core@^11.1.9": - version "11.1.9" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-11.1.9.tgz#97f099f5217f50f168c12db00ac07f51ab550fbb" - integrity sha512-BDE4fG22uYh1bGSifcj7JSx119TVYNViMhMu85usp4Fswrzh6M0DV3yld64jA98uOAa2GSQ4Bg4bZRm2d2cwSg== - dependencies: - "@inquirer/ansi" "^2.0.5" - "@inquirer/figures" "^2.0.5" - "@inquirer/type" "^4.0.5" - cli-width "^4.1.0" - fast-wrap-ansi "^0.2.0" - mute-stream "^3.0.0" - signal-exit "^4.1.0" - -"@inquirer/figures@^2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-2.0.5.tgz#d12f4889ac6ea7731ebc52bd9c066ca51d8fdee7" - integrity sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ== - -"@inquirer/type@^4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-4.0.5.tgz#a02d90e5da8a36dce27ac8e7237a50c99a9003a3" - integrity sha512-aetVUNeKNc/VriqXlw1NRSW0zhMBB0W4bNbWRJgzRl/3d0QNDQFfk0GO5SDdtjMZVg6o8ZKEiadd7SCCzoOn5Q== - "@internationalized/date@^3.12.0", "@internationalized/date@^3.12.1": version "3.12.1" resolved "https://registry.yarnpkg.com/@internationalized/date/-/date-3.12.1.tgz#6e07ff34fafcba9a155cb8d4e0505f362e57a56b" @@ -8407,28 +8371,11 @@ strict-event-emitter "^0.2.4" web-encoding "^1.1.5" -"@mswjs/interceptors@^0.41.3": - version "0.41.7" - resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.41.7.tgz#403b9830e2ccfdb6557ea19450bfa9d264220c8e" - integrity sha512-D0nkS5+sx87mYpxFqASImCineYoEl9wGlUPrzkuS0ohzG8wfophLpE+I76qGJ0slLAVI19do5SI9pWJNCVf4fg== - dependencies: - "@open-draft/deferred-promise" "^2.2.0" - "@open-draft/logger" "^0.3.0" - "@open-draft/until" "^2.0.0" - is-node-process "^1.2.0" - outvariant "^1.4.3" - strict-event-emitter "^0.5.1" - "@mui/core-downloads-tracker@^5.18.0": version "5.18.0" resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.18.0.tgz#85019a8704b0f63305fc5600635ee663810f2b66" integrity sha512-jbhwoQ1AY200PSSOrNXmrFCaSDSJWP7qk6urkTmIirvRXDROkqe+QwcLlUiw/PrREwsIF/vm3/dAXvjlMHF0RA== -"@mui/core-downloads-tracker@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-9.0.0.tgz#b2df0488117bc892d08715de7857fc7d8637dfc0" - integrity sha512-uwQNGkhv0lf7ufxw6QXev77BW6pWbW+7uxYjU5+rfp4lBkFtMEgJCsarTM3Tn+i0lGx6+Ol2u88JdGXr0GDskA== - "@mui/icons-material@^5.0.0": version "5.18.0" resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.18.0.tgz#97d87f1b7bee5fa7b9ba844518631de3112c1e57" @@ -8436,7 +8383,7 @@ dependencies: "@babel/runtime" "^7.23.9" -"@mui/material@^5.12.2": +"@mui/material@^5.12.2", "@mui/material@^5.15.6", "@mui/material@^9.0.0": version "5.18.0" resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.18.0.tgz#71e72d52338252edc6f8d9461e04fdf0d61905cd" integrity sha512-bbH/HaJZpFtXGvWg3TsBWG4eyt3gah3E7nCNU8GLyRjVoWcA91Vm/T+sjHfUcwgJSw9iLtucfHBoq+qW/T30aA== @@ -8454,24 +8401,6 @@ react-is "^19.0.0" react-transition-group "^4.4.5" -"@mui/material@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-9.0.0.tgz#30d19aa0ccf3b1868179870ced72d720e347a95a" - integrity sha512-+VP/oQCDhDR87NQQgXnNBG8dwy6GNuQLnenS1pZvkbn2dKFSxRSRMybTpH9xUxXP+316mlYDy5CSbYtusnCWtw== - dependencies: - "@babel/runtime" "^7.29.2" - "@mui/core-downloads-tracker" "^9.0.0" - "@mui/system" "^9.0.0" - "@mui/types" "^9.0.0" - "@mui/utils" "^9.0.0" - "@popperjs/core" "^2.11.8" - "@types/react-transition-group" "^4.4.12" - clsx "^2.1.1" - csstype "^3.2.3" - prop-types "^15.8.1" - react-is "^19.2.4" - react-transition-group "^4.4.5" - "@mui/private-theming@^5.17.1": version "5.17.1" resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.17.1.tgz#b4b6fbece27830754ef78186e3f1307dca42f295" @@ -8481,15 +8410,6 @@ "@mui/utils" "^5.17.1" prop-types "^15.8.1" -"@mui/private-theming@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-9.0.0.tgz#2617a4fa2045e0644429556afebe87aeaa0ea966" - integrity sha512-JtuZoaiCqwD6vjgYu6Xp3T7DZkrxJlgtDz5yESzhI34fEX5hHMh2VJUbuL9UOg8xrfIFMrq6dcYoH/7Zi4G0RA== - dependencies: - "@babel/runtime" "^7.29.2" - "@mui/utils" "^9.0.0" - prop-types "^15.8.1" - "@mui/styled-engine@^5.18.0": version "5.18.0" resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.18.0.tgz#914cca1385bb33ce0cde31721f529c8bd7fa301c" @@ -8501,18 +8421,6 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/styled-engine@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-9.0.0.tgz#ab7b1c25c0193a796ced29da3662191d53ae339b" - integrity sha512-9RLGdX4Jg0aQPRuvqh/OLzYSPlgd5zyEw5/1HIRfdavSiOd03WtUaGZH9/w1RoTYuRKwpgy0hpIFaMHIqPVIWg== - dependencies: - "@babel/runtime" "^7.29.2" - "@emotion/cache" "^11.14.0" - "@emotion/serialize" "^1.3.3" - "@emotion/sheet" "^1.4.0" - csstype "^3.2.3" - prop-types "^15.8.1" - "@mui/system@^5.18.0": version "5.18.0" resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.18.0.tgz#e55331203a40584b26c5a855a07949ac8973bfb6" @@ -8527,27 +8435,6 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-9.0.0.tgz#a95509127a7df264692105abebaf5a4a965401d5" - integrity sha512-YnC5Zg6j04IxiLc/boAKs0464jfZlLFVa7mf5E8lF0XOtZVUvG6R6gJK50lgUYdaaLdyLfxF6xR7LaPuEpeT/g== - dependencies: - "@babel/runtime" "^7.29.2" - "@mui/private-theming" "^9.0.0" - "@mui/styled-engine" "^9.0.0" - "@mui/types" "^9.0.0" - "@mui/utils" "^9.0.0" - clsx "^2.1.1" - csstype "^3.2.3" - prop-types "^15.8.1" - -"@mui/types@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-9.0.0.tgz#92d8c64e72cb863ee59108cb20cc476d648a3ab9" - integrity sha512-i1cuFCAWN44b3AJWO7mh7tuh1sqbQSeVr/94oG0TX5uXivac8XalgE4/6fQZcmGZigzbQ35IXxj/4jLpRIBYZg== - dependencies: - "@babel/runtime" "^7.29.2" - "@mui/types@~7.2.15": version "7.2.24" resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.24.tgz#5eff63129d9c29d80bbf2d2e561bd0690314dec2" @@ -8575,18 +8462,6 @@ prop-types "^15.8.1" react-is "^19.0.0" -"@mui/utils@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-9.0.0.tgz#25b563ccbf537feba5f89c37a00cb8e6eea45ad0" - integrity sha512-bQcqyg/gjULUqTuyUjSAFr6LQGLvtkNtDbJerAtoUn9kGZ0hg5QJiN1PLHMLbeFpe3te1831uq7GFl2ITokGdg== - dependencies: - "@babel/runtime" "^7.29.2" - "@mui/types" "^9.0.0" - "@types/prop-types" "^15.7.15" - clsx "^2.1.1" - prop-types "^15.8.1" - react-is "^19.2.4" - "@n1ru4l/push-pull-async-iterable-iterator@^3.1.0": version "3.2.0" resolved "https://registry.npmmirror.com/@n1ru4l/push-pull-async-iterable-iterator/-/push-pull-async-iterable-iterator-3.2.0.tgz#c15791112db68dd9315d329d652b7e797f737655" @@ -9077,34 +8952,11 @@ "@octokit/webhooks-types" "7.1.0" aggregate-error "^3.1.0" -"@open-draft/deferred-promise@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz#4a822d10f6f0e316be4d67b4d4f8c9a124b073bd" - integrity sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA== - -"@open-draft/deferred-promise@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-3.0.0.tgz#9725acc5afe8ecde690e9e198a094859fdbf2e45" - integrity sha512-XW375UK8/9SqUVNVa6M0yEy8+iTi4QN5VZ7aZuRFQmy76LRwI9wy5F4YIBU6T+eTe2/DNDo8tqu8RHlwLHM6RA== - -"@open-draft/logger@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@open-draft/logger/-/logger-0.3.0.tgz#2b3ab1242b360aa0adb28b85f5d7da1c133a0954" - integrity sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ== - dependencies: - is-node-process "^1.2.0" - outvariant "^1.4.0" - "@open-draft/until@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca" integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q== -"@open-draft/until@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda" - integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== - "@openapi-contrib/openapi-schema-to-json-schema@~3.2.0": version "3.2.0" resolved "https://registry.npmmirror.com/@openapi-contrib/openapi-schema-to-json-schema/-/openapi-schema-to-json-schema-3.2.0.tgz#c4c92edd4478b5ecb3d99c29ecb355118259dccc" @@ -13853,7 +13705,7 @@ resolved "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== -"@types/prop-types@^15.7.12", "@types/prop-types@^15.7.15": +"@types/prop-types@^15.7.12": version "15.7.15" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7" integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw== @@ -13887,16 +13739,11 @@ resolved "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/react-dom@*", "@types/react-dom@^18.0.0": +"@types/react-dom@*", "@types/react-dom@<18.0.0", "@types/react-dom@^18", "@types/react-dom@^18.0.0": version "18.3.7" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.7.tgz#b89ddf2cd83b4feafcc4e2ea41afdfb95a0d194f" integrity sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ== -"@types/react-dom@<18.0.0": - version "17.0.26" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.26.tgz#fa7891ba70fd39ddbaa7e85b6ff9175bb546bc1b" - integrity sha512-Z+2VcYXJwOqQ79HreLU/1fyQ88eXSSFh6I3JdrEHQIfYSI0kCQpTGvOrbE6jFGGYXKsHuwY9tBa/w5Uo6KzrEg== - "@types/react-redux@^7.1.20": version "7.1.33" resolved "https://registry.npmmirror.com/@types/react-redux/-/react-redux-7.1.33.tgz#53c5564f03f1ded90904e3c90f77e4bd4dc20b15" @@ -13921,12 +13768,7 @@ dependencies: "@types/react" "*" -"@types/react-transition-group@^4.4.12": - version "4.4.12" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" - integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== - -"@types/react@*", "@types/react@^16.13.1 || ^17.0.0 || ^18.0.0": +"@types/react@*", "@types/react@^16.13.1 || ^17.0.0 || ^18.0.0", "@types/react@^18": version "18.3.28" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.28.tgz#0a85b1a7243b4258d9f626f43797ba18eb5f8781" integrity sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw== @@ -14021,13 +13863,6 @@ dependencies: "@types/node" "*" -"@types/set-cookie-parser@^2.4.10": - version "2.4.10" - resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.10.tgz#ad3a807d6d921db9720621ea3374c5d92020bcbc" - integrity sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw== - dependencies: - "@types/node" "*" - "@types/sockjs@^0.3.36": version "0.3.36" resolved "https://registry.npmmirror.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" @@ -14062,11 +13897,6 @@ resolved "https://registry.npmmirror.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== -"@types/statuses@^2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.6.tgz#66748315cc9a96d63403baa8671b2c124f8633aa" - integrity sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA== - "@types/stream-buffers@^3.0.3": version "3.0.8" resolved "https://registry.yarnpkg.com/@types/stream-buffers/-/stream-buffers-3.0.8.tgz#9981c092b72c7e1889e3724db40338f503aeac62" @@ -14839,6 +14669,7 @@ apg-lite@^1.0.3, apg-lite@^1.0.4: "@backstage-community/plugin-tech-radar" "^1.17.0" "@backstage/app-defaults" "^1.7.6" "@backstage/catalog-model" "^1.7.7" + "@backstage/cli" "^0.34.6" "@backstage/core-app-api" "^1.19.6" "@backstage/core-compat-api" "^0.5.9" "@backstage/core-components" "^0.18.8" @@ -14871,8 +14702,10 @@ apg-lite@^1.0.3, apg-lite@^1.0.4: "@internal/plugin-argo-workflows" "^0.1.0" "@internal/plugin-terraform" "^0.1.0" "@mui/icons-material" "^5.0.0" + "@mui/material" "^9.0.0" "@roadiehq/backstage-plugin-argo-cd" "^2.12.5" "@terasky/backstage-plugin-kro-resources-frontend" "^0.2.1" + msw "^1.0.0" react "^18.0.2" react-dom "^18.0.2" react-router-dom "^6.3.0" @@ -16334,11 +16167,6 @@ cli-width@^3.0.0: resolved "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -cli-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" - integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== - client-only@^0.0.1: version "0.0.1" resolved "https://registry.npmmirror.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" @@ -16794,11 +16622,6 @@ cookie@^0.7.0, cookie@~0.7.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== -cookie@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.1.1.tgz#3bb9bdfc82369db9c2f69c93c9c3ceb310c88b3c" - integrity sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ== - cookiejar@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" @@ -17243,7 +17066,7 @@ csstype@^3.0.2, csstype@^3.1.2: resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== -csstype@^3.1.3, csstype@^3.2.2, csstype@^3.2.3: +csstype@^3.1.3, csstype@^3.2.2: version "3.2.3" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== @@ -19175,18 +18998,6 @@ fast-shallow-equal@^1.0.0: resolved "https://registry.npmmirror.com/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b" integrity sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw== -fast-string-truncated-width@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz#23afe0da67d752ca0727538f1e6967759728ce49" - integrity sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g== - -fast-string-width@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/fast-string-width/-/fast-string-width-3.0.2.tgz#16dbabb491ce5585b5ecb675b65c165d71688eeb" - integrity sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg== - dependencies: - fast-string-truncated-width "^3.0.2" - fast-text-encoding@^1.0.0: version "1.0.6" resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz#0aa25f7f638222e3396d72bf936afcf1d42d6867" @@ -19197,13 +19008,6 @@ fast-uri@^3.0.1: resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== -fast-wrap-ansi@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/fast-wrap-ansi/-/fast-wrap-ansi-0.2.0.tgz#c0ae3f3982d061c3d657ec927196fbb47e22fe64" - integrity sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w== - dependencies: - fast-string-width "^3.0.2" - fast-xml-builder@^1.1.4, fast-xml-builder@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/fast-xml-builder/-/fast-xml-builder-1.1.5.tgz#50188e1452a5fa095f415d3e63dcac0a1dbcbf11" @@ -20290,11 +20094,6 @@ graphql@^16.0.0, graphql@^16.8.1: resolved "https://registry.npmmirror.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== -graphql@^16.13.2: - version "16.13.2" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.13.2.tgz#4d2b73df5796b201f1bc2765f5d7067f689cb55f" - integrity sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig== - gtoken@^7.0.0: version "7.0.1" resolved "https://registry.npmmirror.com/gtoken/-/gtoken-7.0.1.tgz#b64bd01d88268ea3a3572c9076a85d1c48f1a455" @@ -20575,14 +20374,6 @@ headers-polyfill@3.2.5: resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.2.5.tgz#6e67d392c9d113d37448fe45014e0afdd168faed" integrity sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA== -headers-polyfill@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-5.0.1.tgz#9554eb2892b666db1c7a3380a91b6cfd467a6b19" - integrity sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA== - dependencies: - "@types/set-cookie-parser" "^2.4.10" - set-cookie-parser "^3.0.1" - helmet@^6.0.0: version "6.2.0" resolved "https://registry.npmmirror.com/helmet/-/helmet-6.2.0.tgz#c29d62014be4c70b8ef092c9c5e54c8c26b8e16e" @@ -21829,12 +21620,12 @@ isobject@^3.0.1: resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isolated-vm@^6.0.1: - version "6.1.2" - resolved "https://registry.yarnpkg.com/isolated-vm/-/isolated-vm-6.1.2.tgz#812c655f9dc4e1328a766d520cff6c3a88ee911b" - integrity sha512-GGfsHqtlZiiurZaxB/3kY7LLAXR3sgzDul0fom4cSyBjx6ZbjpTrFWiH3z/nUfLJGJ8PIq9LQmQFiAxu24+I7A== +isolated-vm@5.0.1, isolated-vm@^6.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/isolated-vm/-/isolated-vm-5.0.1.tgz#d87b12cf8889e351cb1598a4aeea00bb458bf20c" + integrity sha512-hs7+ff59Z2zDvavfcjuot/r1gm6Bmpt+GoZxmVfxUmXaX5scOvUq/Rnme+mUtSh5lW41hH8gAuvk/yTJDYO8Fg== dependencies: - node-gyp-build "^4.8.4" + prebuild-install "^7.1.1" isomorphic-dompurify@^2.14.0: version "2.36.0" @@ -24449,30 +24240,6 @@ msw@^1.0.0: type-fest "^2.19.0" yargs "^17.3.1" -msw@^2.14.2: - version "2.14.2" - resolved "https://registry.yarnpkg.com/msw/-/msw-2.14.2.tgz#f42e948fd031995b2884fec5c26bdfc0900efd54" - integrity sha512-D2bTe0tpuf9nw4DA39wFaqUD/hRPKj0DKpo2lAqu+A47Ifg4+h0hbfn6QxVOsiUY2uhgEN6TTpGSHDsc+ysYNg== - dependencies: - "@inquirer/confirm" "^6.0.11" - "@mswjs/interceptors" "^0.41.3" - "@open-draft/deferred-promise" "^3.0.0" - "@types/statuses" "^2.0.6" - cookie "^1.1.1" - graphql "^16.13.2" - headers-polyfill "^5.0.1" - is-node-process "^1.2.0" - outvariant "^1.4.3" - path-to-regexp "^6.3.0" - picocolors "^1.1.1" - rettime "^0.11.7" - statuses "^2.0.2" - strict-event-emitter "^0.5.1" - tough-cookie "^6.0.1" - type-fest "^5.5.0" - until-async "^3.0.2" - yargs "^17.7.2" - multer@^2.0.2: version "2.1.1" resolved "https://registry.yarnpkg.com/multer/-/multer-2.1.1.tgz#122d819244fbdfee1efddd9147426691014385b7" @@ -24496,11 +24263,6 @@ mute-stream@0.0.8: resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mute-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-3.0.0.tgz#cd8014dd2acb72e1e91bb67c74f0019e620ba2d1" - integrity sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw== - mysql2@^3.0.0: version "3.10.0" resolved "https://registry.npmmirror.com/mysql2/-/mysql2-3.10.0.tgz#5109449fda3dc03fb7d6bdf2cf91f97477081987" @@ -25275,11 +25037,6 @@ outvariant@^1.2.1, outvariant@^1.4.0: resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.2.tgz#f54f19240eeb7f15b28263d5147405752d8e2066" integrity sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ== -outvariant@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.3.tgz#221c1bfc093e8fec7075497e7799fdbf43d14873" - integrity sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA== - own-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" @@ -25651,11 +25408,6 @@ path-to-regexp@^6.2.0: resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== -path-to-regexp@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4" - integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== - path-to-regexp@^8.0.0, path-to-regexp@^8.3.0: version "8.4.2" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.4.2.tgz#795c420c4f7ca45c5b887366f622ee0c9852cccd" @@ -27050,7 +26802,7 @@ react-is@^18.0.0, react-is@^18.2.0: resolved "https://registry.npmmirror.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-is@^19.0.0, react-is@^19.2.4: +react-is@^19.0.0: version "19.2.5" resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.2.5.tgz#7e7b54143e9313fed787b23fd4295d5a23872ad9" integrity sha512-Dn0t8IQhCmeIT3wu+Apm1/YVsJXsGWi6k4sPdnBIdqMVtHtv0IGi6dcpNpNkNac0zB2uUAqNX3MHzN8c+z2rwQ== @@ -27762,11 +27514,6 @@ retry@^0.12.0: resolved "https://registry.npmmirror.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== -rettime@^0.11.7: - version "0.11.8" - resolved "https://registry.yarnpkg.com/rettime/-/rettime-0.11.8.tgz#a32793a84c7fe8fc19c8410c52ee64fb0b7fba92" - integrity sha512-0fERGXktJTyJ+h8fBEiPxHPEFOu0h15JY7JtwrOVqR5K+vb99ho6IyOo7ekLS3h4sJCzIDy4VWKIbZUfe9njmg== - reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -28244,11 +27991,6 @@ set-cookie-parser@^2.4.6: resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== -set-cookie-parser@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-3.1.0.tgz#e0b1d94c8660c68e6a24dc4e2b5c9e955ccf7e28" - integrity sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw== - set-function-length@^1.1.1: version "1.2.0" resolved "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" @@ -28431,7 +28173,7 @@ signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1, signal-exit@^4.1.0: +signal-exit@^4.0.1: version "4.1.0" resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -28797,7 +28539,7 @@ statuses@2.0.1: resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -statuses@^2.0.1, statuses@^2.0.2, statuses@~2.0.1, statuses@~2.0.2: +statuses@^2.0.1, statuses@~2.0.1, statuses@~2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== @@ -28900,11 +28642,6 @@ strict-event-emitter@^0.4.3: resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz#ff347c8162b3e931e3ff5f02cfce6772c3b07eb3" integrity sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg== -strict-event-emitter@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93" - integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== - string-hash@^1.1.1: version "1.1.3" resolved "https://registry.npmmirror.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" @@ -29364,11 +29101,6 @@ symbol-tree@^3.2.4: resolved "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -tagged-tag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/tagged-tag/-/tagged-tag-1.0.0.tgz#a0b5917c2864cba54841495abfa3f6b13edcf4d6" - integrity sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng== - tapable@^1.0.0: version "1.1.3" resolved "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -29766,7 +29498,7 @@ tough-cookie@^4.1.2: universalify "^0.2.0" url-parse "^1.5.3" -tough-cookie@^6.0.0, tough-cookie@^6.0.1: +tough-cookie@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-6.0.1.tgz#a495f833836609ed983c19bc65639cfbceb54c76" integrity sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw== @@ -30037,13 +29769,6 @@ type-fest@^4.3.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== -type-fest@^5.5.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.6.0.tgz#502f7a003b7309e96a7e17052cc2ab2c7e5c7a31" - integrity sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA== - dependencies: - tagged-tag "^1.0.0" - type-flag@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/type-flag/-/type-flag-4.2.0.tgz#c92fd04b09309d66277a57d84a3f538b890307d8" @@ -30384,11 +30109,6 @@ unraw@^3.0.0: resolved "https://registry.npmmirror.com/unraw/-/unraw-3.0.0.tgz#73443ed70d2ab09ccbac2b00525602d5991fbbe3" integrity sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg== -until-async@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/until-async/-/until-async-3.0.2.tgz#447f1531fdd7bb2b4c7a98869bdb1a4c2a23865f" - integrity sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw== - upath@2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" From 415a32b5a6174ed97384985ea7863b805b90bf46 Mon Sep 17 00:00:00 2001 From: Pankaj Walke Date: Thu, 30 Apr 2026 19:07:35 +0000 Subject: [PATCH 4/4] fix: resolve dependency warnings for future compatibility - Add @backstage/cli-defaults devDependency (prevents CLI fallback removal breakage) - Add react-router and react-router-dom ^6.30.2 resolutions (resolves ~40 peer dep warnings) - Update internal plugin React peer deps from ^16/^17 to ^17/^18 Signed-off-by: Pankaj Walke --- package.json | 5 ++++- plugins/apache-spark/package.json | 2 +- plugins/argo-workflows/package.json | 2 +- plugins/cnoe-ui/package.json | 2 +- plugins/terraform/package.json | 2 +- yarn.lock | 32 ++++++++++++++--------------- 6 files changed, 24 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index ebcda46..59c8b50 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ }, "devDependencies": { "@backstage/cli": "^0.36.0", + "@backstage/cli-defaults": "^0.1.0", "@playwright/test": "^1.59.1", "@spotify/prettier-config": "^15.0.0", "concurrently": "^8.0.0", @@ -42,7 +43,9 @@ "@types/react": "^18", "@types/react-dom": "^18", "isolated-vm": "5.0.1", - "@mui/material": "^5.15.6" + "@mui/material": "^5.15.6", + "react-router": "^6.30.2", + "react-router-dom": "^6.30.2" }, "prettier": "@spotify/prettier-config" } diff --git a/plugins/apache-spark/package.json b/plugins/apache-spark/package.json index b235c62..7d7570e 100644 --- a/plugins/apache-spark/package.json +++ b/plugins/apache-spark/package.json @@ -50,7 +50,7 @@ "yaml": "^2.3.0" }, "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" + "react": "^17.0.0 || ^18.0.0" }, "devDependencies": { "@backstage/cli": "^0.36.0", diff --git a/plugins/argo-workflows/package.json b/plugins/argo-workflows/package.json index bbd7b3e..a8ebdf6 100644 --- a/plugins/argo-workflows/package.json +++ b/plugins/argo-workflows/package.json @@ -50,7 +50,7 @@ "request": "^2.88.2" }, "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" + "react": "^17.0.0 || ^18.0.0" }, "devDependencies": { "@backstage/cli": "^0.36.0", diff --git a/plugins/cnoe-ui/package.json b/plugins/cnoe-ui/package.json index 0bed70b..8edac1f 100644 --- a/plugins/cnoe-ui/package.json +++ b/plugins/cnoe-ui/package.json @@ -49,7 +49,7 @@ "react-use": "^17.2.4" }, "peerDependencies": { - "react": "^17.0.0 || ^18.0.2" + "react": "^17.0.0 || ^18.0.0" }, "devDependencies": { "@backstage/cli": "^0.36.0", diff --git a/plugins/terraform/package.json b/plugins/terraform/package.json index 58f63e7..200e69c 100644 --- a/plugins/terraform/package.json +++ b/plugins/terraform/package.json @@ -50,7 +50,7 @@ "react-use": "^17.2.4" }, "peerDependencies": { - "react": "^16.13.1 || ^17.0.0", + "react": "^17.0.0 || ^18.0.0", "react-router-dom": "^7.14.2" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 37fbbca..2ae7664 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3359,7 +3359,7 @@ global-agent "^3.0.0" undici "^7.24.5" -"@backstage/cli-defaults@^0.1.1": +"@backstage/cli-defaults@^0.1.0", "@backstage/cli-defaults@^0.1.1": version "0.1.1" resolved "https://registry.yarnpkg.com/@backstage/cli-defaults/-/cli-defaults-0.1.1.tgz#bac2c80830d23127a61877aedf764fc284534ce9" integrity sha512-6ehdl1UthXsotp2VQA6KlCfweBdVNXuX73JLsC6wSOiG2E36tnnoGg2jHnrJrNju5+3oYvi/+qnEuvAvEO+B6A== @@ -9798,10 +9798,10 @@ generic-pool "3.9.0" yallist "4.0.0" -"@remix-run/router@1.14.2": - version "1.14.2" - resolved "https://registry.npmmirror.com/@remix-run/router/-/router-1.14.2.tgz#4d58f59908d9197ba3179310077f25c88e49ed17" - integrity sha512-ACXpdMM9hmKZww21yEqWwiLws/UPLhNKvimN8RrYSqPSvB3ov7sLvAcfvaxePeLvccTQKGdkDIhLYApZVDFuKg== +"@remix-run/router@1.23.2": + version "1.23.2" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.23.2.tgz#156c4b481c0bee22a19f7924728a67120de06971" + integrity sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w== "@remixicon/react@^4.6.0": version "4.9.0" @@ -26905,20 +26905,20 @@ react-resizable@^3.0.4, react-resizable@^3.0.5: prop-types "15.x" react-draggable "^4.0.3" -react-router-dom@^6.3.0: - version "6.21.3" - resolved "https://registry.npmmirror.com/react-router-dom/-/react-router-dom-6.21.3.tgz#ef3a7956a3699c7b82c21fcb3dbc63c313ed8c5d" - integrity sha512-kNzubk7n4YHSrErzjLK72j0B5i969GsuCGazRl3G6j1zqZBLjuSlYBdVdkDOgzGdPIffUOc9nmgiadTEVoq91g== +react-router-dom@^6.3.0, react-router-dom@^6.30.2: + version "6.30.3" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.30.3.tgz#42ae6dc4c7158bfb0b935f162b9621b29dddf740" + integrity sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag== dependencies: - "@remix-run/router" "1.14.2" - react-router "6.21.3" + "@remix-run/router" "1.23.2" + react-router "6.30.3" -react-router@6.21.3: - version "6.21.3" - resolved "https://registry.npmmirror.com/react-router/-/react-router-6.21.3.tgz#8086cea922c2bfebbb49c6594967418f1f167d70" - integrity sha512-a0H638ZXULv1OdkmiK6s6itNhoy33ywxmUFT/xtSoVyf9VnC7n7+VT4LjVzdIHSaF5TIh9ylUgxMXksHTgGrKg== +react-router@6.30.3, react-router@^6.30.2: + version "6.30.3" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.30.3.tgz#994b3ccdbe0e81fe84d4f998100f62584dfbf1cf" + integrity sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw== dependencies: - "@remix-run/router" "1.14.2" + "@remix-run/router" "1.23.2" react-side-effect@^2.1.0: version "2.1.2"

-yCMtQlAD1iz`crdz9Wyl#DL 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 Mk-1^v9#ZK40~wO2g#Z8m literal 0 HcmV?d00001 diff --git a/packages/app/public/img/cnoe/logo-dark-no-name.png b/packages/app/public/img/cnoe/logo-dark-no-name.png new file mode 100644 index 0000000000000000000000000000000000000000..31b4ffe183bf8aa491a0b7ff2cf96e94d8c0be7f GIT binary patch literal 35658 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 literal 0 HcmV?d00001 diff --git a/packages/app/public/img/cnoe/logo-dark.png b/packages/app/public/img/cnoe/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7143248447424f7004b899da721b82e6fb63dbb3 GIT binary patch literal 41824 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 z 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