From 7f1648802b360e3bd6060f52df646487bbfec699 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Wed, 26 Apr 2023 12:58:56 -0400 Subject: [PATCH] Major Release v36.0.0 - Improved Typing, and API support (16.0) (#2258) Adding extensive typing support Unified browser and Node.JS implementations Adding support of Gitlab API 16.0 --- .all-contributorsrc | 420 +- .autorc.yml | 66 +- .circleci/config.yml | 458 - .circleci/shutdown.sh | 21 - .codeclimate.yml | 27 +- .eslintignore | 13 + .eslintrc.yml | 29 +- .gitignore | 12 +- .gitlab-ci.yml | 362 + .husky/pre-commit | 1 + .huskyrc.yml | 2 - .lintstagedrc.yml | 4 - .prettierignore | 4 +- .prettierrc.yml | 9 - .yarn/releases/yarn-3.4.1.cjs | 873 + .yarnrc.yml | 3 + LICENSE.md | 2 +- README.md | 732 +- codecov.yml | 43 - docs/FAQ.md | 28 + docs/TESTING.md | 40 + global.d.ts | 1 + jest.config.base.js | 24 - jest.config.base.mjs | 16 + jest.config.js | 6 - jest.setup.ts | 2 + lerna.json | 2 +- lint-staged.config.base.mjs | 8 + nx.json | 38 + package.json | 95 +- packages/browser/CHANGELOG.md | 844 - packages/browser/README.md | 39 - packages/browser/jest.config.js | 7 - packages/browser/package.json | 65 - packages/browser/rollup.config.js | 46 - packages/browser/src/KyRequester.ts | 75 - packages/browser/src/index.ts | 116 - .../test/integration/assets/test-import.html | 12 - packages/browser/test/integration/index.ts | 72 - packages/browser/test/unit/KyRequester.ts | 183 - packages/browser/test/unit/index.ts | 11 - packages/browser/tsconfig.json | 11 - packages/cli/README.md | 211 +- packages/cli/jest.config.js | 6 - packages/cli/jest.config.mjs | 6 + packages/cli/lint-staged.config.mjs | 1 + packages/cli/package.json | 85 +- packages/cli/rollup.config.js | 24 - packages/cli/src/cli.ts | 102 +- packages/cli/test/e2e/index.ts | 11 + packages/cli/test/e2e/resources/Projects.ts | 16 + packages/cli/test/integration/index.ts | 311 + .../test/integration/resources/Projects.ts | 22 - packages/cli/test/unit/index.ts | 370 - packages/cli/tsconfig.json | 10 +- packages/core/README.md | 199 +- packages/core/jest.config.js | 6 - packages/core/jest.config.mjs | 6 + packages/core/lint-staged.config.mjs | 1 + packages/core/package.json | 103 +- packages/core/rollup.config.js | 37 - packages/core/scripts/generate.ts | 69 +- packages/core/scripts/tsconfig.json | 8 - packages/core/src/index.ts | 8 - .../core/src/infrastructure/RequestHelper.ts | 517 +- packages/core/src/infrastructure/Utils.ts | 78 +- packages/core/src/resources/Agents.ts | 129 + .../core/src/resources/AlertManagement.ts | 81 + .../src/resources/ApplicationAppearance.ts | 63 + .../src/resources/ApplicationPlanLimits.ts | 87 + .../core/src/resources/ApplicationSettings.ts | 316 +- .../src/resources/ApplicationStatistics.ts | 25 + packages/core/src/resources/Applications.ts | 47 + packages/core/src/resources/AuditEvents.ts | 71 + packages/core/src/resources/Avatar.ts | 16 + packages/core/src/resources/Branches.ts | 52 +- .../core/src/resources/BroadcastMessages.ts | 39 +- .../core/src/resources/CommitDiscussions.ts | 66 +- packages/core/src/resources/Commits.ts | 261 +- packages/core/src/resources/Composer.ts | 136 + packages/core/src/resources/Conan.ts | 287 + .../core/src/resources/ContainerRegistry.ts | 116 +- .../src/resources/DashboardAnnotations.ts | 43 + packages/core/src/resources/Debian.ts | 132 + .../core/src/resources/DependencyProxy.ts | 12 + packages/core/src/resources/DeployKeys.ts | 94 +- packages/core/src/resources/DeployTokens.ts | 128 + packages/core/src/resources/Deployments.ts | 117 +- .../core/src/resources/DockerfileTemplates.ts | 2 +- packages/core/src/resources/Environments.ts | 129 +- .../core/src/resources/EpicAwardEmojis.ts | 47 + .../core/src/resources/EpicDiscussions.ts | 57 +- packages/core/src/resources/EpicIssues.ts | 46 +- .../core/src/resources/EpicLabelEvents.ts | 33 + packages/core/src/resources/EpicLinks.ts | 117 + packages/core/src/resources/EpicNotes.ts | 51 +- packages/core/src/resources/Epics.ts | 120 +- .../src/resources/ErrorTrackingClientKeys.ts | 51 + .../src/resources/ErrorTrackingSettings.ts | 61 + packages/core/src/resources/Events.ts | 35 +- packages/core/src/resources/Experiments.ts | 38 + .../src/resources/ExternalStatusChecks.ts | 144 + .../src/resources/FeatureFlagUserLists.ts | 85 + packages/core/src/resources/FeatureFlags.ts | 80 +- packages/core/src/resources/FreezePeriods.ts | 65 +- packages/core/src/resources/GeoNodes.ts | 98 +- .../src/resources/GitLabCIYMLTemplates.ts | 2 +- .../core/src/resources/GitignoreTemplates.ts | 2 +- packages/core/src/resources/Gitlab.ts | 644 +- packages/core/src/resources/GitlabPages.ts | 12 + packages/core/src/resources/GoProxy.ts | 61 + .../core/src/resources/GroupAccessRequests.ts | 33 +- .../core/src/resources/GroupAccessTokens.ts | 44 + .../src/resources/GroupActivityAnalytics.ts | 65 + packages/core/src/resources/GroupBadges.ts | 55 +- .../src/resources/GroupCustomAttributes.ts | 40 +- .../core/src/resources/GroupDORA4Metrics.ts | 9 + .../core/src/resources/GroupDeployTokens.ts | 31 - packages/core/src/resources/GroupHooks.ts | 58 + .../core/src/resources/GroupImportExports.ts | 40 + .../core/src/resources/GroupInvitations.ts | 50 + .../core/src/resources/GroupIssueBoards.ts | 91 +- .../core/src/resources/GroupIterations.ts | 24 + packages/core/src/resources/GroupLDAPLinks.ts | 52 + packages/core/src/resources/GroupLabels.ts | 74 +- .../core/src/resources/GroupMemberRoles.ts | 53 + packages/core/src/resources/GroupMembers.ts | 187 +- .../core/src/resources/GroupMilestones.ts | 79 +- .../resources/GroupProtectedEnvironments.ts | 63 + packages/core/src/resources/GroupPushRules.ts | 33 + .../src/resources/GroupRelationExports.ts | 45 + packages/core/src/resources/GroupReleases.ts | 22 + .../resources/GroupRepositoryStorageMoves.ts | 42 + packages/core/src/resources/GroupRunners.ts | 9 - .../core/src/resources/GroupSAMLIdentities.ts | 39 + packages/core/src/resources/GroupSAMLLinks.ts | 73 + .../core/src/resources/GroupSCIMIdentities.ts | 35 + packages/core/src/resources/GroupVariables.ts | 65 +- packages/core/src/resources/GroupWikis.ts | 57 + packages/core/src/resources/Groups.ts | 421 +- packages/core/src/resources/Helm.ts | 51 + packages/core/src/resources/Import.ts | 76 + .../resources/InstanceLevelCICDVariables.ts | 73 + packages/core/src/resources/Integrations.ts | 107 + .../core/src/resources/IssueAwardEmojis.ts | 38 +- .../core/src/resources/IssueDiscussions.ts | 57 +- .../src/resources/IssueIterationEvents.ts | 32 + .../core/src/resources/IssueLabelEvents.ts | 32 + packages/core/src/resources/IssueLinks.ts | 91 + .../src/resources/IssueMilestoneEvents.ts | 32 + .../src/resources/IssueNoteAwardEmojis.ts | 36 +- packages/core/src/resources/IssueNotes.ts | 48 +- .../core/src/resources/IssueStateEvents.ts | 32 + .../core/src/resources/IssueWeightEvents.ts | 32 + packages/core/src/resources/Issues.ts | 417 +- .../core/src/resources/IssuesStatistics.ts | 46 +- packages/core/src/resources/JobArtifacts.ts | 96 + packages/core/src/resources/Jobs.ts | 235 +- packages/core/src/resources/Keys.ts | 38 +- packages/core/src/resources/Labels.ts | 50 - packages/core/src/resources/License.ts | 43 +- .../core/src/resources/LicenseTemplates.ts | 20 +- packages/core/src/resources/LinkedEpics.ts | 75 + packages/core/src/resources/Lint.ts | 56 +- packages/core/src/resources/Markdown.ts | 8 +- packages/core/src/resources/Maven.ts | 40 + .../src/resources/MergeRequestApprovals.ts | 324 +- .../src/resources/MergeRequestAwardEmojis.ts | 38 +- .../resources/MergeRequestContextCommits.ts | 64 + .../src/resources/MergeRequestDiscussions.ts | 111 +- .../src/resources/MergeRequestDraftNotes.ts | 121 + .../src/resources/MergeRequestLabelEvents.ts | 32 + .../resources/MergeRequestMilestoneEvents.ts | 34 + .../core/src/resources/MergeRequestNotes.ts | 58 +- packages/core/src/resources/MergeRequests.ts | 612 +- packages/core/src/resources/MergeTrains.ts | 69 + packages/core/src/resources/Metadata.ts | 22 + packages/core/src/resources/Migrations.ts | 112 + packages/core/src/resources/NPM.ts | 109 + packages/core/src/resources/Namespaces.ts | 38 +- .../src/resources/NotificationSettings.ts | 114 +- packages/core/src/resources/NuGet.ts | 210 + .../core/src/resources/PackageRegistry.ts | 77 +- packages/core/src/resources/Packages.ts | 97 +- packages/core/src/resources/PagesDomains.ts | 55 +- .../src/resources/PersonalAccessTokens.ts | 95 + .../resources/PipelineScheduleVariables.ts | 80 +- .../core/src/resources/PipelineSchedules.ts | 115 +- .../src/resources/PipelineTriggerTokens.ts | 103 + packages/core/src/resources/Pipelines.ts | 222 +- .../core/src/resources/ProductAnalytics.ts | 49 + .../src/resources/ProjectAccessRequests.ts | 33 +- .../core/src/resources/ProjectAccessTokens.ts | 44 + packages/core/src/resources/ProjectAliases.ts | 49 + packages/core/src/resources/ProjectBadges.ts | 69 +- .../src/resources/ProjectCustomAttributes.ts | 40 +- .../core/src/resources/ProjectDORA4Metrics.ts | 9 + .../core/src/resources/ProjectDeployTokens.ts | 31 - packages/core/src/resources/ProjectHooks.ts | 103 +- .../core/src/resources/ProjectImportExport.ts | 112 +- .../core/src/resources/ProjectInvitations.ts | 50 + .../core/src/resources/ProjectIssueBoards.ts | 121 +- .../core/src/resources/ProjectIterations.ts | 24 + packages/core/src/resources/ProjectLabels.ts | 78 + packages/core/src/resources/ProjectMembers.ts | 53 +- .../core/src/resources/ProjectMilestones.ts | 92 +- .../resources/ProjectProtectedEnvironments.ts | 63 + .../core/src/resources/ProjectPushRules.ts | 33 + .../src/resources/ProjectRelationsExport.ts | 76 + .../core/src/resources/ProjectReleases.ts | 168 + .../src/resources/ProjectRemoteMirrors.ts | 111 + .../ProjectRepositoryStorageMoves.ts | 42 + .../resources/ProjectSnippetAwardEmojis.ts | 46 +- .../resources/ProjectSnippetDiscussions.ts | 57 +- .../core/src/resources/ProjectSnippetNotes.ts | 58 +- .../core/src/resources/ProjectSnippets.ts | 124 +- .../core/src/resources/ProjectStatistics.ts | 23 + .../core/src/resources/ProjectTemplates.ts | 49 + .../core/src/resources/ProjectVariables.ts | 68 +- .../src/resources/ProjectVulnerabilities.ts | 83 + packages/core/src/resources/ProjectWikis.ts | 57 + packages/core/src/resources/Projects.ts | 743 +- .../core/src/resources/ProtectedBranches.ts | 92 +- packages/core/src/resources/ProtectedTags.ts | 64 +- packages/core/src/resources/PushRules.ts | 53 - packages/core/src/resources/PyPI.ts | 64 + packages/core/src/resources/ReleaseLinks.ts | 48 +- packages/core/src/resources/Releases.ts | 90 - packages/core/src/resources/Repositories.ts | 171 +- .../core/src/resources/RepositoryFiles.ts | 98 +- .../src/resources/RepositorySubmodules.ts | 28 +- packages/core/src/resources/ResourceGroups.ts | 66 + packages/core/src/resources/RubyGems.ts | 40 + packages/core/src/resources/Runners.ts | 189 +- packages/core/src/resources/Search.ts | 191 +- packages/core/src/resources/SecureFiles.ts | 98 + packages/core/src/resources/ServiceData.ts | 27 + packages/core/src/resources/Services.ts | 97 - packages/core/src/resources/SidekiqMetrics.ts | 17 +- packages/core/src/resources/SidekiqQueues.ts | 32 + .../SnippetRepositoryStorageMoves.ts | 56 + packages/core/src/resources/Snippets.ts | 106 +- packages/core/src/resources/Suggestions.ts | 36 + packages/core/src/resources/SystemHooks.ts | 79 +- packages/core/src/resources/Tags.ts | 74 +- packages/core/src/resources/TodoLists.ts | 88 + packages/core/src/resources/Todos.ts | 85 - packages/core/src/resources/Topics.ts | 97 + packages/core/src/resources/Triggers.ts | 84 - .../src/resources/UserCustomAttributes.ts | 40 +- packages/core/src/resources/UserEmails.ts | 55 +- packages/core/src/resources/UserGPGKeys.ts | 46 +- .../src/resources/UserImpersonationTokens.ts | 48 +- packages/core/src/resources/UserSSHKeys.ts | 71 +- .../resources/UserStarredMetricsDashboard.ts | 38 + packages/core/src/resources/Users.ts | 431 +- packages/core/src/resources/Version.ts | 13 - .../src/resources/VulnerabilityFindings.ts | 81 - packages/core/src/resources/Wikis.ts | 45 - packages/core/src/resources/index.ts | 218 +- packages/core/src/resources/types.ts | 149 - .../src/templates/ResourceAccessRequests.ts | 43 +- .../src/templates/ResourceAccessTokens.ts | 81 + .../core/src/templates/ResourceAwardEmojis.ts | 74 +- packages/core/src/templates/ResourceBadges.ts | 82 +- .../src/templates/ResourceCustomAttributes.ts | 50 +- .../src/templates/ResourceDORA4Metrics.ts | 37 + .../src/templates/ResourceDeployTokens.ts | 65 - .../core/src/templates/ResourceDiscussions.ts | 106 +- packages/core/src/templates/ResourceHooks.ts | 114 + .../core/src/templates/ResourceInvitations.ts | 85 + .../core/src/templates/ResourceIssueBoards.ts | 119 +- .../src/templates/ResourceIterationEvents.ts | 57 + .../core/src/templates/ResourceIterations.ts | 49 + .../core/src/templates/ResourceLabelEvents.ts | 57 + packages/core/src/templates/ResourceLabels.ts | 90 +- .../core/src/templates/ResourceMembers.ts | 82 +- .../src/templates/ResourceMilestoneEvents.ts | 57 + .../core/src/templates/ResourceMilestones.ts | 119 +- .../src/templates/ResourceNoteAwardEmojis.ts | 66 +- packages/core/src/templates/ResourceNotes.ts | 61 +- .../ResourceProtectedEnvironments.ts | 107 + .../core/src/templates/ResourcePushRules.ts | 66 + .../ResourceRepositoryStorageMoves.ts | 80 + .../core/src/templates/ResourceStateEvents.ts | 56 + .../core/src/templates/ResourceTemplates.ts | 31 +- .../core/src/templates/ResourceVariables.ts | 80 +- .../src/templates/ResourceWeightEvents.ts | 54 + packages/core/src/templates/ResourceWikis.ts | 96 + packages/core/src/templates/index.ts | 15 +- packages/core/src/templates/types.ts | 13 - packages/core/src/types.ts | 13 - packages/core/test/__mocks__/RequestHelper.ts | 1 - packages/core/test/e2e/map.ts | 190 + .../test/integration/infratructure/Utils.ts | 11 - .../test/unit/infrastructure/RequestHelper.ts | 300 +- .../core/test/unit/infrastructure/Utils.ts | 25 +- .../unit/resources/ApplicationSettings.ts | 14 +- packages/core/test/unit/resources/Branches.ts | 26 - .../test/unit/resources/BroadcastMessages.ts | 10 - .../test/unit/resources/CommitDiscussions.ts | 26 - packages/core/test/unit/resources/Commits.ts | 36 +- .../test/unit/resources/ContainerRegistry.ts | 28 +- .../core/test/unit/resources/DeployKeys.ts | 21 +- .../core/test/unit/resources/DeployTokens.ts | 83 + .../core/test/unit/resources/Deployments.ts | 14 +- .../core/test/unit/resources/Environments.ts | 15 +- .../test/unit/resources/EpicDiscussions.ts | 26 - .../core/test/unit/resources/EpicIssues.ts | 14 +- .../core/test/unit/resources/EpicLinks.ts | 73 + .../core/test/unit/resources/EpicNotes.ts | 26 - packages/core/test/unit/resources/Epics.ts | 10 - .../core/test/unit/resources/FeatureFlags.ts | 24 +- .../core/test/unit/resources/FreezePeriods.ts | 12 +- packages/core/test/unit/resources/General.ts | 19 + packages/core/test/unit/resources/GeoNodes.ts | 42 +- .../test/unit/resources/GitignoreTemplates.ts | 26 - packages/core/test/unit/resources/Gitlab.ts | 1 - .../core/test/unit/resources/GroupBadges.ts | 26 - .../core/test/unit/resources/GroupHooks.ts | 91 + .../core/test/unit/resources/GroupMembers.ts | 10 +- .../core/test/unit/resources/GroupRunners.ts | 41 - packages/core/test/unit/resources/Groups.ts | 32 +- .../core/test/unit/resources/IssueLinks.ts | 29 + packages/core/test/unit/resources/Issues.ts | 38 +- .../test/unit/resources/IssuesStatistics.ts | 10 - .../core/test/unit/resources/JobArtifacts.ts | 152 + packages/core/test/unit/resources/Jobs.ts | 150 +- packages/core/test/unit/resources/License.ts | 14 +- .../unit/resources/MergeRequestApprovals.ts | 96 +- .../core/test/unit/resources/MergeRequests.ts | 64 +- .../unit/resources/NotificationSettings.ts | 37 +- .../test/unit/resources/PackageRegistry.ts | 22 +- packages/core/test/unit/resources/Packages.ts | 18 +- .../core/test/unit/resources/PagesDomains.ts | 10 - .../resources/PipelineScheduleVariables.ts | 33 +- .../test/unit/resources/PipelineSchedules.ts | 10 - .../core/test/unit/resources/Pipelines.ts | 28 +- .../core/test/unit/resources/ProjectHooks.ts | 22 +- .../unit/resources/ProjectImportExport.ts | 44 +- .../{Releases.ts => ProjectReleases.ts} | 26 +- .../test/unit/resources/ProjectSnippets.ts | 27 +- .../core/test/unit/resources/ProjectWikis.ts | 63 + packages/core/test/unit/resources/Projects.ts | 13 +- .../test/unit/resources/ProtectedBranches.ts | 62 +- .../core/test/unit/resources/PushRules.ts | 64 - .../core/test/unit/resources/ReleaseLinks.ts | 10 - .../test/unit/resources/RepositoryFiles.ts | 56 +- .../unit/resources/RepositorySubmodules.ts | 12 +- packages/core/test/unit/resources/Runners.ts | 34 +- packages/core/test/unit/resources/Search.ts | 24 +- packages/core/test/unit/resources/Snippets.ts | 27 +- .../core/test/unit/resources/SystemHooks.ts | 22 +- packages/core/test/unit/resources/Tags.ts | 16 +- .../core/test/unit/resources/TodoLists.ts | 45 + packages/core/test/unit/resources/Todos.ts | 93 - packages/core/test/unit/resources/Triggers.ts | 92 - .../core/test/unit/resources/UserEmails.ts | 10 - .../core/test/unit/resources/UserGPGKeys.ts | 10 - .../core/test/unit/resources/UserSSHKeys.ts | 60 +- packages/core/test/unit/resources/Users.ts | 80 +- packages/core/test/unit/resources/Wikis.ts | 67 - .../unit/templates/ResourceAccessRequests.ts | 20 +- .../unit/templates/ResourceAccessTokens.ts | 84 + .../unit/templates/ResourceAwardEmojis.ts | 30 +- .../test/unit/templates/ResourceBadges.ts | 17 +- .../templates/ResourceCustomAttributes.ts | 14 +- .../unit/templates/ResourceDeployTokens.ts | 73 - .../unit/templates/ResourceDiscussions.ts | 18 +- .../unit/templates/ResourceIssueBoards.ts | 46 +- .../test/unit/templates/ResourceLabels.ts | 14 +- .../test/unit/templates/ResourceMembers.ts | 14 +- .../test/unit/templates/ResourceMilestones.ts | 24 +- .../unit/templates/ResourceNoteAwardEmojis.ts | 30 +- .../core/test/unit/templates/ResourceNotes.ts | 12 +- .../test/unit/templates/ResourceTemplates.ts | 4 +- .../test/unit/templates/ResourceVariables.ts | 21 +- packages/core/tsconfig.json | 10 +- packages/node/CHANGELOG.md | 766 - packages/node/README.md | 39 - packages/node/jest.config.js | 6 - packages/node/package.json | 57 - packages/node/rollup.config.js | 31 - packages/node/src/GotRequester.ts | 107 - packages/node/src/index.ts | 116 - .../test/integration/resources/Projects.ts | 57 - packages/node/test/unit/GotRequester.ts | 201 - packages/node/test/unit/index.ts | 11 - packages/node/tsconfig.json | 9 - packages/requester-utils/README.md | 184 +- packages/requester-utils/jest.config.js | 6 - packages/requester-utils/jest.config.mjs | 6 + .../requester-utils/lint-staged.config.mjs | 1 + packages/requester-utils/package.json | 82 +- packages/requester-utils/rollup.config.js | 27 - packages/requester-utils/src/BaseResource.ts | 11 +- .../requester-utils/src/RequesterUtils.ts | 130 +- .../requester-utils/test/unit/BaseResource.ts | 22 +- .../test/unit/RequesterUtils.ts | 150 +- packages/requester-utils/tsconfig.json | 10 +- packages/rest/CHANGELOG.md | 0 packages/rest/README.md | 371 + packages/rest/jest.config.mjs | 6 + packages/rest/lint-staged.config.mjs | 1 + packages/rest/package.json | 69 + packages/rest/playwright.config.mjs | 19 + packages/rest/src/Requester.ts | 126 + packages/rest/src/index.ts | 189 + .../test/e2e/browser/assets/test-import.html | 26 + packages/rest/test/e2e/browser/index.ts | 200 + .../test/e2e/browser/resources/Projects.ts | 65 + .../integration/nodejs}/resources/Issues.ts | 33 +- .../integration/nodejs}/resources/Lint.ts | 39 +- .../integration/nodejs/resources/Projects.ts | 64 + packages/rest/test/unit/Requester.ts | 325 + packages/rest/test/unit/index.ts | 8 + packages/rest/tsconfig.json | 9 + prettier.config.cjs | 15 + .../auto-before-commit-changelog-plugin.js | 3 +- scripts/docker-compose.yml | 12 +- scripts/shutdown.sh | 8 + tsconfig.json => tsconfig.base.json | 12 +- yarn.lock | 21551 +++++++++------- 423 files changed, 33991 insertions(+), 20840 deletions(-) delete mode 100644 .circleci/config.yml delete mode 100644 .circleci/shutdown.sh create mode 100644 .eslintignore create mode 100644 .gitlab-ci.yml create mode 100755 .husky/pre-commit delete mode 100644 .huskyrc.yml delete mode 100644 .lintstagedrc.yml delete mode 100644 .prettierrc.yml create mode 100755 .yarn/releases/yarn-3.4.1.cjs create mode 100644 .yarnrc.yml delete mode 100644 codecov.yml create mode 100644 docs/FAQ.md create mode 100644 docs/TESTING.md create mode 100644 global.d.ts delete mode 100644 jest.config.base.js create mode 100644 jest.config.base.mjs delete mode 100644 jest.config.js create mode 100644 jest.setup.ts create mode 100644 lint-staged.config.base.mjs create mode 100644 nx.json delete mode 100644 packages/browser/CHANGELOG.md delete mode 100644 packages/browser/README.md delete mode 100644 packages/browser/jest.config.js delete mode 100644 packages/browser/package.json delete mode 100644 packages/browser/rollup.config.js delete mode 100644 packages/browser/src/KyRequester.ts delete mode 100644 packages/browser/src/index.ts delete mode 100644 packages/browser/test/integration/assets/test-import.html delete mode 100644 packages/browser/test/integration/index.ts delete mode 100644 packages/browser/test/unit/KyRequester.ts delete mode 100644 packages/browser/test/unit/index.ts delete mode 100644 packages/browser/tsconfig.json delete mode 100644 packages/cli/jest.config.js create mode 100644 packages/cli/jest.config.mjs create mode 100644 packages/cli/lint-staged.config.mjs delete mode 100644 packages/cli/rollup.config.js create mode 100644 packages/cli/test/e2e/index.ts create mode 100644 packages/cli/test/e2e/resources/Projects.ts create mode 100644 packages/cli/test/integration/index.ts delete mode 100644 packages/cli/test/integration/resources/Projects.ts delete mode 100644 packages/cli/test/unit/index.ts delete mode 100644 packages/core/jest.config.js create mode 100644 packages/core/jest.config.mjs create mode 100644 packages/core/lint-staged.config.mjs delete mode 100644 packages/core/rollup.config.js delete mode 100644 packages/core/scripts/tsconfig.json create mode 100644 packages/core/src/resources/Agents.ts create mode 100644 packages/core/src/resources/AlertManagement.ts create mode 100644 packages/core/src/resources/ApplicationAppearance.ts create mode 100644 packages/core/src/resources/ApplicationPlanLimits.ts create mode 100644 packages/core/src/resources/ApplicationStatistics.ts create mode 100644 packages/core/src/resources/Applications.ts create mode 100644 packages/core/src/resources/AuditEvents.ts create mode 100644 packages/core/src/resources/Avatar.ts create mode 100644 packages/core/src/resources/Composer.ts create mode 100644 packages/core/src/resources/Conan.ts create mode 100644 packages/core/src/resources/DashboardAnnotations.ts create mode 100644 packages/core/src/resources/Debian.ts create mode 100644 packages/core/src/resources/DependencyProxy.ts create mode 100644 packages/core/src/resources/DeployTokens.ts create mode 100644 packages/core/src/resources/EpicAwardEmojis.ts create mode 100644 packages/core/src/resources/EpicLabelEvents.ts create mode 100644 packages/core/src/resources/EpicLinks.ts create mode 100644 packages/core/src/resources/ErrorTrackingClientKeys.ts create mode 100644 packages/core/src/resources/ErrorTrackingSettings.ts create mode 100644 packages/core/src/resources/Experiments.ts create mode 100644 packages/core/src/resources/ExternalStatusChecks.ts create mode 100644 packages/core/src/resources/FeatureFlagUserLists.ts create mode 100644 packages/core/src/resources/GitlabPages.ts create mode 100644 packages/core/src/resources/GoProxy.ts create mode 100644 packages/core/src/resources/GroupAccessTokens.ts create mode 100644 packages/core/src/resources/GroupActivityAnalytics.ts create mode 100644 packages/core/src/resources/GroupDORA4Metrics.ts delete mode 100644 packages/core/src/resources/GroupDeployTokens.ts create mode 100644 packages/core/src/resources/GroupHooks.ts create mode 100644 packages/core/src/resources/GroupImportExports.ts create mode 100644 packages/core/src/resources/GroupInvitations.ts create mode 100644 packages/core/src/resources/GroupIterations.ts create mode 100644 packages/core/src/resources/GroupLDAPLinks.ts create mode 100644 packages/core/src/resources/GroupMemberRoles.ts create mode 100644 packages/core/src/resources/GroupProtectedEnvironments.ts create mode 100644 packages/core/src/resources/GroupPushRules.ts create mode 100644 packages/core/src/resources/GroupRelationExports.ts create mode 100644 packages/core/src/resources/GroupReleases.ts create mode 100644 packages/core/src/resources/GroupRepositoryStorageMoves.ts delete mode 100644 packages/core/src/resources/GroupRunners.ts create mode 100644 packages/core/src/resources/GroupSAMLIdentities.ts create mode 100644 packages/core/src/resources/GroupSAMLLinks.ts create mode 100644 packages/core/src/resources/GroupSCIMIdentities.ts create mode 100644 packages/core/src/resources/GroupWikis.ts create mode 100644 packages/core/src/resources/Helm.ts create mode 100644 packages/core/src/resources/Import.ts create mode 100644 packages/core/src/resources/InstanceLevelCICDVariables.ts create mode 100644 packages/core/src/resources/Integrations.ts create mode 100644 packages/core/src/resources/IssueIterationEvents.ts create mode 100644 packages/core/src/resources/IssueLabelEvents.ts create mode 100644 packages/core/src/resources/IssueLinks.ts create mode 100644 packages/core/src/resources/IssueMilestoneEvents.ts create mode 100644 packages/core/src/resources/IssueStateEvents.ts create mode 100644 packages/core/src/resources/IssueWeightEvents.ts create mode 100644 packages/core/src/resources/JobArtifacts.ts delete mode 100644 packages/core/src/resources/Labels.ts create mode 100644 packages/core/src/resources/LinkedEpics.ts create mode 100644 packages/core/src/resources/Maven.ts create mode 100644 packages/core/src/resources/MergeRequestContextCommits.ts create mode 100644 packages/core/src/resources/MergeRequestDraftNotes.ts create mode 100644 packages/core/src/resources/MergeRequestLabelEvents.ts create mode 100644 packages/core/src/resources/MergeRequestMilestoneEvents.ts create mode 100644 packages/core/src/resources/MergeTrains.ts create mode 100644 packages/core/src/resources/Metadata.ts create mode 100644 packages/core/src/resources/Migrations.ts create mode 100644 packages/core/src/resources/NPM.ts create mode 100644 packages/core/src/resources/NuGet.ts create mode 100644 packages/core/src/resources/PersonalAccessTokens.ts create mode 100644 packages/core/src/resources/PipelineTriggerTokens.ts create mode 100644 packages/core/src/resources/ProductAnalytics.ts create mode 100644 packages/core/src/resources/ProjectAccessTokens.ts create mode 100644 packages/core/src/resources/ProjectAliases.ts create mode 100644 packages/core/src/resources/ProjectDORA4Metrics.ts delete mode 100644 packages/core/src/resources/ProjectDeployTokens.ts create mode 100644 packages/core/src/resources/ProjectInvitations.ts create mode 100644 packages/core/src/resources/ProjectIterations.ts create mode 100644 packages/core/src/resources/ProjectLabels.ts create mode 100644 packages/core/src/resources/ProjectProtectedEnvironments.ts create mode 100644 packages/core/src/resources/ProjectPushRules.ts create mode 100644 packages/core/src/resources/ProjectRelationsExport.ts create mode 100644 packages/core/src/resources/ProjectReleases.ts create mode 100644 packages/core/src/resources/ProjectRemoteMirrors.ts create mode 100644 packages/core/src/resources/ProjectRepositoryStorageMoves.ts create mode 100644 packages/core/src/resources/ProjectStatistics.ts create mode 100644 packages/core/src/resources/ProjectTemplates.ts create mode 100644 packages/core/src/resources/ProjectVulnerabilities.ts create mode 100644 packages/core/src/resources/ProjectWikis.ts delete mode 100644 packages/core/src/resources/PushRules.ts create mode 100644 packages/core/src/resources/PyPI.ts delete mode 100644 packages/core/src/resources/Releases.ts create mode 100644 packages/core/src/resources/ResourceGroups.ts create mode 100644 packages/core/src/resources/RubyGems.ts create mode 100644 packages/core/src/resources/SecureFiles.ts create mode 100644 packages/core/src/resources/ServiceData.ts delete mode 100644 packages/core/src/resources/Services.ts create mode 100644 packages/core/src/resources/SidekiqQueues.ts create mode 100644 packages/core/src/resources/SnippetRepositoryStorageMoves.ts create mode 100644 packages/core/src/resources/Suggestions.ts create mode 100644 packages/core/src/resources/TodoLists.ts delete mode 100644 packages/core/src/resources/Todos.ts create mode 100644 packages/core/src/resources/Topics.ts delete mode 100644 packages/core/src/resources/Triggers.ts create mode 100644 packages/core/src/resources/UserStarredMetricsDashboard.ts delete mode 100644 packages/core/src/resources/Version.ts delete mode 100644 packages/core/src/resources/VulnerabilityFindings.ts delete mode 100644 packages/core/src/resources/Wikis.ts delete mode 100644 packages/core/src/resources/types.ts create mode 100644 packages/core/src/templates/ResourceAccessTokens.ts create mode 100644 packages/core/src/templates/ResourceDORA4Metrics.ts delete mode 100644 packages/core/src/templates/ResourceDeployTokens.ts create mode 100644 packages/core/src/templates/ResourceHooks.ts create mode 100644 packages/core/src/templates/ResourceInvitations.ts create mode 100644 packages/core/src/templates/ResourceIterationEvents.ts create mode 100644 packages/core/src/templates/ResourceIterations.ts create mode 100644 packages/core/src/templates/ResourceLabelEvents.ts create mode 100644 packages/core/src/templates/ResourceMilestoneEvents.ts create mode 100644 packages/core/src/templates/ResourceProtectedEnvironments.ts create mode 100644 packages/core/src/templates/ResourcePushRules.ts create mode 100644 packages/core/src/templates/ResourceRepositoryStorageMoves.ts create mode 100644 packages/core/src/templates/ResourceStateEvents.ts create mode 100644 packages/core/src/templates/ResourceWeightEvents.ts create mode 100644 packages/core/src/templates/ResourceWikis.ts delete mode 100644 packages/core/src/templates/types.ts delete mode 100644 packages/core/src/types.ts create mode 100644 packages/core/test/e2e/map.ts delete mode 100644 packages/core/test/integration/infratructure/Utils.ts delete mode 100644 packages/core/test/unit/resources/CommitDiscussions.ts create mode 100644 packages/core/test/unit/resources/DeployTokens.ts delete mode 100644 packages/core/test/unit/resources/EpicDiscussions.ts create mode 100644 packages/core/test/unit/resources/EpicLinks.ts delete mode 100644 packages/core/test/unit/resources/EpicNotes.ts create mode 100644 packages/core/test/unit/resources/General.ts delete mode 100644 packages/core/test/unit/resources/GitignoreTemplates.ts delete mode 100644 packages/core/test/unit/resources/GroupBadges.ts create mode 100644 packages/core/test/unit/resources/GroupHooks.ts delete mode 100644 packages/core/test/unit/resources/GroupRunners.ts create mode 100644 packages/core/test/unit/resources/IssueLinks.ts create mode 100644 packages/core/test/unit/resources/JobArtifacts.ts rename packages/core/test/unit/resources/{Releases.ts => ProjectReleases.ts} (67%) create mode 100644 packages/core/test/unit/resources/ProjectWikis.ts delete mode 100644 packages/core/test/unit/resources/PushRules.ts create mode 100644 packages/core/test/unit/resources/TodoLists.ts delete mode 100644 packages/core/test/unit/resources/Todos.ts delete mode 100644 packages/core/test/unit/resources/Triggers.ts delete mode 100644 packages/core/test/unit/resources/Wikis.ts create mode 100644 packages/core/test/unit/templates/ResourceAccessTokens.ts delete mode 100644 packages/core/test/unit/templates/ResourceDeployTokens.ts delete mode 100644 packages/node/CHANGELOG.md delete mode 100644 packages/node/README.md delete mode 100644 packages/node/jest.config.js delete mode 100644 packages/node/package.json delete mode 100644 packages/node/rollup.config.js delete mode 100644 packages/node/src/GotRequester.ts delete mode 100644 packages/node/src/index.ts delete mode 100644 packages/node/test/integration/resources/Projects.ts delete mode 100644 packages/node/test/unit/GotRequester.ts delete mode 100644 packages/node/test/unit/index.ts delete mode 100644 packages/node/tsconfig.json delete mode 100644 packages/requester-utils/jest.config.js create mode 100644 packages/requester-utils/jest.config.mjs create mode 100644 packages/requester-utils/lint-staged.config.mjs delete mode 100644 packages/requester-utils/rollup.config.js create mode 100644 packages/rest/CHANGELOG.md create mode 100644 packages/rest/README.md create mode 100644 packages/rest/jest.config.mjs create mode 100644 packages/rest/lint-staged.config.mjs create mode 100644 packages/rest/package.json create mode 100644 packages/rest/playwright.config.mjs create mode 100644 packages/rest/src/Requester.ts create mode 100644 packages/rest/src/index.ts create mode 100644 packages/rest/test/e2e/browser/assets/test-import.html create mode 100644 packages/rest/test/e2e/browser/index.ts create mode 100644 packages/rest/test/e2e/browser/resources/Projects.ts rename packages/{node/test/integration => rest/test/integration/nodejs}/resources/Issues.ts (51%) rename packages/{node/test/integration => rest/test/integration/nodejs}/resources/Lint.ts (60%) create mode 100644 packages/rest/test/integration/nodejs/resources/Projects.ts create mode 100644 packages/rest/test/unit/Requester.ts create mode 100644 packages/rest/test/unit/index.ts create mode 100644 packages/rest/tsconfig.json create mode 100644 prettier.config.cjs create mode 100644 scripts/shutdown.sh rename tsconfig.json => tsconfig.base.json (72%) diff --git a/.all-contributorsrc b/.all-contributorsrc index 7a11fbb28..4b741c584 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -4,11 +4,17 @@ "repoType": "github", "repoHost": "https://github.com", "files": [ - "README.md" + "README.md", + "packages/rest/README.md", + "packages/core/README.md", + "packages/cli/README.md", + "packages/requester-utils/README.md" ], - "imageSize": 50, + "imageSize": 25, "commit": false, + "wrapperTemplate": "

<%= bodyContent %>

", "commitConvention": "angular", + "contributorTemplate": "\">&h=<%= options.imageSize %>&w=<%= options.imageSize %>&fit=cover&mask=circle&maxage=7d\" alt=\"<%= contributor.name %>\"/>", "contributors": [ { "login": "jdalrymple", @@ -26,6 +32,54 @@ "infra" ] }, + { + "login": "dylandesrosier", + "name": "Dylan DesRosier", + "avatar_url": "https://avatars.githubusercontent.com/u/13701258?v=4", + "profile": "https://github.com/dylandesrosier", + "contributions": [ + "code", + "review", + "maintenance", + "bug", + "ideas", + "doc", + "infra" + ] + }, + { + "login": "mikew", + "name": "Mike Wyatt", + "avatar_url": "https://avatars.githubusercontent.com/u/4729?v=4", + "profile": "https://github.com/mikew", + "contributions": [ + "code", + "review", + "maintenance", + "bug", + "ideas", + "doc", + "infra" + ] + }, + { + "login": "coryzibell", + "name": "Cory Zibeill", + "avatar_url": "https://avatars.githubusercontent.com/u/7986014?v=4", + "profile": "https://github.com/coryzibell", + "contributions": [ + "code" + ] + }, + { + "login": "shadygrove", + "name": "Martin Bour", + "avatar_url": "https://avatars.githubusercontent.com/u/5209850?v=4", + "profile": "https://github.com/shadygrove", + "contributions": [ + "code" + ] + }, { "login": "akira345", "name": "akira345", @@ -43,7 +97,6 @@ "avatar_url": "https://avatars2.githubusercontent.com/u/1861546?v=4", "profile": "https://birukov.me", "contributions": [ - "review", "code" ] }, @@ -65,7 +118,6 @@ "avatar_url": "https://avatars3.githubusercontent.com/u/563373?v=4", "profile": "https://github.com/Musinux", "contributions": [ - "review", "code" ] }, @@ -75,9 +127,6 @@ "avatar_url": "https://avatars3.githubusercontent.com/u/1697162?v=4", "profile": "http://www.arsdehnel.net", "contributions": [ - "review", - "maintenance", - "bug", "code" ] }, @@ -106,7 +155,6 @@ "avatar_url": "https://avatars2.githubusercontent.com/u/9075163?v=4", "profile": "http://www.giuseppeangri.com", "contributions": [ - "review", "code" ] }, @@ -177,7 +225,6 @@ "avatar_url": "https://avatars2.githubusercontent.com/u/277927?v=4", "profile": "https://dylanmtaylor.com", "contributions": [ - "doc", "code" ] }, @@ -280,7 +327,11 @@ "contributions": [ "doc", "test", - "code" + "code", + "ideas", + "review", + "bug", + "infra" ] }, { @@ -474,60 +525,357 @@ ] }, { - "login": "pataar", - "name": "pataar", - "avatar_url": "https://avatars.githubusercontent.com/u/3403851?v=4", - "profile": "https://github.com/pataar", + "login": "christophlehmann", + "name": "Christoph Lehmann", + "avatar_url": "https://avatars.githubusercontent.com/u/4953689?v=4", + "profile": "https://github.com/christophlehmann", + "contributions": [ + "code" + ] + }, + { + "login": "FrankV01", + "name": "Frank V", + "avatar_url": "https://avatars.githubusercontent.com/u/253471?v=4", + "profile": "https://theopensourceu.org/", + "contributions": [ + "code" + ] + }, + { + "login": "Salimlou", + "name": "Salim Benabbou", + "avatar_url": "https://avatars.githubusercontent.com/u/357286?v=4", + "profile": "https://github.com/Salimlou", + "contributions": [ + "code" + ] + }, + { + "login": "tvtamas", + "name": "Tamás Török-Vistai", + "avatar_url": "https://avatars.githubusercontent.com/u/1945260?v=4", + "profile": "https://github.com/tvtamas", + "contributions": [ + "code" + ] + }, + { + "login": "MartinBenninger", + "name": "Martin Benninger", + "avatar_url": "https://avatars.githubusercontent.com/u/20296116?v=4", + "profile": "https://github.com/MartinBenninger", + "contributions": [ + "code" + ] + }, + { + "login": "fewieden", + "name": "fewieden", + "avatar_url": "https://avatars.githubusercontent.com/u/9334168?v=4", + "profile": "https://github.com/fewieden", + "contributions": [ + "code" + ] + }, + { + "login": "comster", + "name": "Jeff Pelton", + "avatar_url": "https://avatars.githubusercontent.com/u/36627?v=4", + "profile": "https://www.jeffpelton.com/", + "contributions": [ + "code" + ] + }, + { + "login": "claude-abounegm", + "name": "Claude Abounegm", + "avatar_url": "https://avatars.githubusercontent.com/u/11809881?v=4", + "profile": "https://github.com/claude-abounegm", + "contributions": [ + "code" + ] + }, + { + "login": "Marethyu1", + "name": "Stefan Hall", + "avatar_url": "https://avatars.githubusercontent.com/u/17978203?v=4", + "profile": "https://github.com/Marethyu1", "contributions": [ "code" ] }, { - "login": "eltociear", - "name": "Ikko Ashimine", - "avatar_url": "https://avatars.githubusercontent.com/u/22633385?v=4", - "profile": "https://bandism.net/", + "login": "Mr-Wallet", + "name": "Jordan Wallet", + "avatar_url": "https://avatars.githubusercontent.com/u/799000?v=4", + "profile": "https://github.com/Mr-Wallet", "contributions": [ "code", - "test" + "ideas", + "review", + "bug", + "infra" + ] + }, + { + "login": "zhao0", + "name": "zhao0", + "avatar_url": "https://avatars.githubusercontent.com/u/7556666?v=4", + "profile": "https://github.com/zhao0", + "contributions": [ + "code" + ] + }, + { + "login": "jgrosso", + "name": "Joshua Grosso", + "avatar_url": "https://avatars.githubusercontent.com/u/4530584?v=4", + "profile": "https://www.linkedin.com/in/joshuagrosso", + "contributions": [ + "code" + ] + }, + { + "login": "yonguelink", + "name": "Isaac Ouellet Therrien", + "avatar_url": "https://avatars.githubusercontent.com/u/9469187?v=4", + "profile": "https://github.com/yonguelink", + "contributions": [ + "code" + ] + }, + { + "login": "Sharma-Rajat", + "name": "Rajat Sharma", + "avatar_url": "https://avatars.githubusercontent.com/u/24895138?v=4", + "profile": "https://wearecws.com/", + "contributions": [ + "review" + ] + }, + { + "login": "Casz", + "name": "Cesar B.", + "avatar_url": "https://avatars.githubusercontent.com/u/65105345?v=4", + "profile": "https://github.com/Casz", + "contributions": [ + "code", + "ideas", + "review", + "bug", + "infra" + ] + }, + { + "login": "IKatsuba", + "name": "Igor Katsuba", + "avatar_url": "https://avatars.githubusercontent.com/u/10637135?v=4", + "profile": "https://blog.katsuba.dev/", + "contributions": [ + "code" + ] + }, + { + "login": "Continuities", + "name": "Michael Townsend", + "avatar_url": "https://avatars.githubusercontent.com/u/4884483?v=4", + "profile": "http://www.doublespeakgames.com/", + "contributions": [ + "code" + ] + }, + { + "login": "bodtx", + "name": "bodtx", + "avatar_url": "https://avatars.githubusercontent.com/u/1039550?v=4", + "profile": "https://github.com/bodtx", + "contributions": [ + "code" + ] + }, + { + "login": "arthot", + "name": "Artem", + "avatar_url": "https://avatars.githubusercontent.com/u/1815294?v=4", + "profile": "https://github.com/arthot", + "contributions": [ + "code" + ] + }, + { + "login": "MunifTanjim", + "name": "Munif Tanjim", + "avatar_url": "https://avatars.githubusercontent.com/u/8050659?v=4", + "profile": "https://muniftanjim.dev/", + "contributions": [ + "code" + ] + }, + { + "login": "qkdreyer", + "name": "Quentin Dreyer", + "avatar_url": "https://avatars.githubusercontent.com/u/717869?v=4", + "profile": "https://www.qkdreyer.dev/", + "contributions": [ + "code" + ] + }, + { + "login": "maclennann", + "name": "Norm MacLennan", + "avatar_url": "https://avatars.githubusercontent.com/u/192728?v=4", + "profile": "https://iwritethe.codes/", + "contributions": [ + "code" + ] + }, + { + "login": "jnovick", + "name": "jnovick", + "avatar_url": "https://avatars.githubusercontent.com/u/7881319?v=4", + "profile": "https://github.com/jnovick", + "contributions": [ + "code" + ] + }, + { + "login": "mozinator", + "name": "Fabian Aussems", + "avatar_url": "https://avatars.githubusercontent.com/u/57530?v=4", + "profile": "https://www.fabianaussems.com/", + "contributions": [ + "code" + ] + }, + { + "login": "mima0815", + "name": "Michael Matzka", + "avatar_url": "https://avatars.githubusercontent.com/u/14311597?v=4", + "profile": "https://github.com/mima0815", + "contributions": [ + "code" + ] + }, + { + "login": "CraigAllardyce", + "name": "CraigAllardyce", + "avatar_url": "https://avatars.githubusercontent.com/u/9052289?v=4", + "profile": "https://github.com/CraigAllardyce", + "contributions": [ + "code" + ] + }, + { + "login": "brunobastosg", + "name": "Bruno Guimarães", + "avatar_url": "https://avatars.githubusercontent.com/u/320122?v=4", + "profile": "https://github.com/brunobastosg", + "contributions": [ + "code" + ] + }, + { + "login": "leipert", + "name": "Lukas Eipert", + "avatar_url": "https://avatars.githubusercontent.com/u/2906107?v=4", + "profile": "http://leipert.io/", + "contributions": [ + "code" + ] + }, + { + "login": "maximilian-krauss", + "name": "Maximilian Krauß", + "avatar_url": "https://avatars.githubusercontent.com/u/914671?v=4", + "profile": "https://max.krauss.io/", + "contributions": [ + "code", + "bug", + "review" + ] + }, + { + "login": "evolution-gaming", + "name": "Evolution Engineering", + "avatar_url": "https://avatars.githubusercontent.com/u/15799569?v=4", + "profile": "https://eng.evolution.com/", + "contributions": [ + "code" + ] + }, + { + "login": "Neonox31", + "name": "WEBER Logan", + "avatar_url": "https://avatars.githubusercontent.com/u/1135958?v=4", + "profile": "https://github.com/Neonox31", + "contributions": [ + "code" + ] + }, + { + "login": "MrCheater", + "name": "Anton Zhukov", + "avatar_url": "https://avatars.githubusercontent.com/u/5055654?v=4", + "profile": "https://t.me/mister_cheater", + "contributions": [ + "code" + ] + }, + { + "login": "beaverusiv", + "name": "Nicholas Loomans", + "avatar_url": "https://avatars.githubusercontent.com/u/4149031?v=4", + "profile": "https://github.com/beaverusiv", + "contributions": [ + "code" + ] + }, + { + "login": "icedream", + "name": "Carl Kittelberger", + "avatar_url": "https://avatars.githubusercontent.com/u/807772?v=4", + "profile": "https://icedream.pw/", + "contributions": [ + "code" ] }, { - "login": "BilalAslam1", - "name": "Bilal Aslam", - "avatar_url": "https://avatars.githubusercontent.com/u/27581495?v=4", - "profile": "https://github.com/BilalAslam1", + "login": "Vrtak-CZ", + "name": "Patrik Votoček", + "avatar_url": "https://avatars.githubusercontent.com/u/112567?v=4", + "profile": "https://patrik.votocek.cz/", "contributions": [ "code" ] }, { - "login": "siosio34", - "name": "youngje", - "avatar_url": "https://avatars.githubusercontent.com/u/7166022?v=4", - "profile": "https://github.com/siosio34", + "login": "Kyr", + "name": "Kyrylo Fedorov", + "avatar_url": "https://avatars.githubusercontent.com/u/426462?v=4", + "profile": "https://kyr.github.io/CV/", "contributions": [ "code" ] }, { - "login": "soullivaneuh", - "name": "Sullivan SENECHAL", - "avatar_url": "https://avatars.githubusercontent.com/u/1698357?v=4", - "profile": "https://keybase.io/soullivaneuh", + "login": "claudio-vellage", + "name": "Claudio Vellage", + "avatar_url": "https://avatars.githubusercontent.com/u/28930612?v=4", + "profile": "https://github.com/claudio-vellage", "contributions": [ "code" ] }, { - "login": "DerHerrGammler", - "name": "Felix Herold", - "avatar_url": "https://avatars.githubusercontent.com/u/30802629?v=4", - "profile": "https://github.com/DerHerrGammler", + "login": "seb0uil", + "name": "Seb0uil", + "avatar_url": "https://avatars.githubusercontent.com/u/5122626?v=4", + "profile": "https://github.com/seb0uil", "contributions": [ "code" ] } ], - "contributorsPerLine": 7 + "contributorsPerLine": 26 } diff --git a/.autorc.yml b/.autorc.yml index ffab00ac4..ea3a083a2 100644 --- a/.autorc.yml +++ b/.autorc.yml @@ -6,58 +6,60 @@ plugins: - first-time-contributor - all-contributors - ./scripts/auto-before-commit-changelog-plugin.js + - - omit-release-notes + - username: + - coqbot + - - omit-commits + - username: + - coqbot + +prereleaseBranches: + - next + +noDefaultLabels: true labels: - name: breaking changelogTitle: 💥 Breaking Change - description: Increment the major version when merged + description: Changes are not backwards compatible releaseType: major - - name: feature - changelogTitle: 💥 Feature - description: A new feature addtion + - name: type:feature + changelogTitle: ✨ Feature + description: Changes add a new feature releaseType: minor - - name: enhancement - changelogTitle: 🚀 Enhancement - description: Increment the minor version when merged + - name: type:bug + changelogTitle: 🐛 Bug Fix + description: Changes fix a minor bug releaseType: minor - - name: bug - changelogTitle: 🐛 Bug Fix - description: Fixing a minor bug + - name: type:hot fix + changelogTitle: 🚑 Hot Fix + description: Changes fix a critical bug releaseType: minor - - name: patch - changelogTitle: 🤷 Misc - description: Increment the patch version when merged + - name: type:technical debt + changelogTitle: 🔨 Technical Debt + description: Changes only affect the internal code, improving performance/quality releaseType: patch - - name: security - changelogTitle: 🏿‍♀️ Security + - name: type:security + changelogTitle: 🔒 Security description: Changes improve the code security releaseType: patch - - name: technical debt - changelogTitle: 👷🏼‍♀️ Technical Debt - description: Changes only affect the internal code, improving performance/quaility + - name: type:dependencies + changelogTitle: ↕️ Dependencies + description: Changes upgrade or remove dependencies releaseType: patch - - name: dependencies - changelogTitle: 🔩 Dependencies - description: Dependencies Updates + - name: type:testing + changelogTitle: 🚨 Tests + description: Changes affect test code releaseType: none - - name: test - changelogTitle: 🔩 Tests - description: Test Updates - releaseType: none - - - name: documentation - changelogTitle: 📝 Documentation + - name: type:documentation + changelogTitle: 📚 Documentation description: Changes only affect the documentation releaseType: none - - - name: skip-release - description: Preserve the current version when merged - releaseType: skip diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index d0f7fd181..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,458 +0,0 @@ -version: 2.1 -workflows: - main: - jobs: - - install - - build: - requires: - - install - - lint-src: - name: 'Lint Src' - requires: - - install - - lint-docs: - name: 'Lint Docs' - requires: - - install - - test-unit-cli: - name: 'Unit Test CLI Src' - requires: - - install - - test-unit-core: - name: 'Unit Test Core Src' - requires: - - install - - test-unit-node: - name: 'Unit Test Node Src' - requires: - - install - - test-unit-browser: - name: 'Unit Test Browser Src' - requires: - - install - - test-unit-requester-utils: - name: 'Unit Test Requester-Utils Src' - requires: - - install - - - test-integration: - name: 'Run Integration Tests?' - type: approval - - - test-integration-setup: - name: 'Setup Integration Test Resources' - requires: - - Run Integration Tests? - - - test-integration-core: - name: 'Integration Test Core Release' - requires: - - build - - 'Setup Integration Test Resources' - - - test-integration-browser: - name: 'Integration Test Browser Release' - requires: - - build - - 'Setup Integration Test Resources' - - - test-integration-cli: - name: 'Integration Test CLI Release' - requires: - - build - - 'Setup Integration Test Resources' - - - test-integration-node: - name: 'Integration Test Node Release' - requires: - - build - - 'Setup Integration Test Resources' - - - test-delegator: - requires: - - build - - 'Setup Integration Test Resources' - - - teardown: - name: 'Teardown Integration Test Resources' - requires: - - test-delegator - - - canary: - name: 'Deploy Canary Build' - filters: - branches: - ignore: master - requires: - - Lint Src - - Lint Docs - - Unit Test CLI Src - - Unit Test Core Src - - Unit Test Node Src - - Unit Test Browser Src - - Unit Test Requester-Utils Src - - Integration Test Browser Release - - Integration Test Node Release - - Integration Test CLI Release - - Integration Test Core Release - - - release: - name: 'Deploy Build' - filters: - branches: - only: master - requires: - - Lint Src - - Lint Docs - - Unit Test CLI Src - - Unit Test Core Src - - Unit Test Node Src - - Unit Test Browser Src - - Unit Test Requester-Utils Src - - Integration Test Browser Release - - Integration Test Node Release - - Integration Test CLI Release - - Integration Test Core Release - -jobs: - #Link and Install all required dependancies - install: - docker: - - image: node:lts - environment: - PLAYWRIGHT_BROWSERS_PATH: 0 - steps: - - checkout - - run: yarn --frozen-lockfile - - save_cache: - name: Save yarn package cache - key: yarn-{{ checksum "yarn.lock" }} - paths: - - packages/core/node_modules/ - - packages/cli/node_modules/ - - packages/browser/node_modules/ - - packages/node/node_modules/ - - packages/requester-utils/node_modules/ - - node_modules/ - - ~/.cache/yarn - - build: - docker: - - image: node:lts-alpine - steps: - - checkout - - restore_cache: - name: Restore yarn package cache - keys: - - yarn-{{ checksum "yarn.lock" }} - - run: yarn build - - persist_to_workspace: - root: . - paths: - - packages/core/dist/ - - packages/cli/dist/ - - packages/browser/dist/ - - packages/node/dist/ - - packages/requester-utils/dist/ - - - store_artifacts: - path: packages/core/dist/ - - store_artifacts: - path: packages/cli/dist/ - - store_artifacts: - path: packages/node/dist/ - - store_artifacts: - path: packages/browser/dist/ - - store_artifacts: - path: packages/requester-utils/dist/ - - # # Lint all code, tests and supporting documentation (README, CHANGELOG etc) - lint-src: - docker: - - image: node:lts-alpine - steps: - - checkout - - restore_cache: - name: Restore yarn package cache - keys: - - yarn-{{ checksum "yarn.lock" }} - - run: yarn lint - - lint-docs: - docker: - - image: node:lts-alpine - steps: - - checkout - - restore_cache: - name: Restore yarn package cache - keys: - - yarn-{{ checksum "yarn.lock" }} - - run: yarn lint - - test-unit-cli: - docker: - - image: node:lts-alpine - steps: - - checkout - - restore_cache: - name: Restore yarn package cache - keys: - - yarn-{{ checksum "yarn.lock" }} - - run: yarn workspace @gitbeaker/cli test:unit && yarn codecov -F cli - - test-unit-core: - docker: - - image: node:lts-alpine - steps: - - checkout - - restore_cache: - name: Restore yarn package cache - keys: - - yarn-{{ checksum "yarn.lock" }} - - run: yarn workspace @gitbeaker/core test:unit && yarn codecov -F core - - test-unit-node: - docker: - - image: node:lts-alpine - steps: - - checkout - - restore_cache: - name: Restore yarn package cache - keys: - - yarn-{{ checksum "yarn.lock" }} - - run: yarn workspace @gitbeaker/node test:unit && yarn codecov -F node - - test-unit-browser: - docker: - - image: mcr.microsoft.com/playwright:bionic - environment: - PLAYWRIGHT_BROWSERS_PATH: 0 - steps: - - checkout - - restore_cache: - name: Restore yarn package cache - keys: - - yarn-{{ checksum "yarn.lock" }} - - run: yarn workspace @gitbeaker/browser test:unit && yarn codecov -F browser - - test-unit-requester-utils: - docker: - - image: node:lts-alpine - steps: - - checkout - - restore_cache: - name: Restore yarn package cache - keys: - - yarn-{{ checksum "yarn.lock" }} - - run: yarn workspace @gitbeaker/requester-utils test:unit && yarn codecov -F requester-utils - - # Setup Integration test resources - test-integration-setup: - docker: - - image: gcr.io/google.com/cloudsdktool/cloud-sdk:alpine - steps: - - checkout - # Instll missing pkgs - - run: apk add jq curl - - - run: | - echo $GCLOUD_SERVICE_KEY | base64 -d | gcloud auth activate-service-account --key-file=- - gcloud --quiet config set project ${GOOGLE_PROJECT_ID} - - # Spin up container - - run: | - CONTAINER_NAME=gitlab-${CIRCLE_WORKFLOW_ID} - - GITLAB_URL=$(gcloud compute instances create-with-container $CONTAINER_NAME \ - --project gitbeaker \ - --machine-type=e2-standard-2 \ - --zone=northamerica-northeast1-b \ - --tags http-server,https-server \ - --container-image docker.io/gitlab/gitlab-ce:latest \ - --container-command '/bin/sh' \ - --container-arg="-c" \ - --container-arg="printf '#!/usr/bin/env ruby \nu = User.first \nu.admin = true \nu.save! \nt = PersonalAccessToken.new({ user: u, name: \"gitbeaker\", scopes: [\"api\", \"read_user\"]}) \nt.set_token(\"superduperstrongtoken\") \nt.save! \nputs t.token\n' > /opt/gitlab/embedded/service/gitlab-rails/db/fixtures/production/40_access_token.rb && /assets/wrapper" \ - --container-env ^~^GITLAB_ROOT_PASSWORD=password~PERSONAL_ACCESS_TOKEN=superduperstrongtoken~GITLAB_OMNIBUS_CONFIG="gitlab_rails['monitoring_whitelist'] = ['0.0.0.0/0', '172.17.0.1'];" \ - --metadata SELF_DESTRUCT_INTERVAL_MINUTES=15 \ - --metadata-from-file startup-script=.circleci/shutdown.sh \ - --format='get(networkInterfaces[0].accessConfigs[0].natIP)'\ - | head -2 | tail -1 ) - - echo "export GITLAB_URL=http://${GITLAB_URL}" >> /tmp/variables.env - echo "export GITLAB_PERSONAL_ACCESS_TOKEN=superduperstrongtoken" >> /tmp/variables.env - - echo "Waiting for service to start" - sleep 180 - while [[ "$(curl --fail --silent -X GET "$GITLAB_URL/-/readiness?all=1" --insecure | jq -r '.master_check[0].status')" != "ok" ]]; do echo "Polling service - not alive yet"; sleep 10; done; - echo "Service is up and running!" - - - save_cache: - name: Save env cache - key: env-{{ .Environment.CIRCLE_WORKFLOW_ID }} - paths: - - /tmp/variables.env - - test-integration-core: - docker: - - image: node:lts-alpine - steps: - - checkout - - restore_cache: - name: Restore yarn package cache - keys: - - yarn-{{ checksum "yarn.lock" }} - - attach_workspace: - at: . - - run: yarn workspace @gitbeaker/core test:integration - - test-integration-browser: - docker: - - image: mcr.microsoft.com/playwright:bionic - environment: - PLAYWRIGHT_BROWSERS_PATH: 0 - steps: - - checkout - - attach_workspace: - at: . - - restore_cache: - name: Restore yarn package cache - keys: - - yarn-{{ checksum "yarn.lock" }} - - restore_cache: - name: Restore env vars - keys: - - env-{{ .Environment.CIRCLE_WORKFLOW_ID }} - - run: | - cat /tmp/variables.env >> $BASH_ENV - source $BASH_ENV - yarn workspace @gitbeaker/browser test:integration - - test-integration-cli: - docker: - - image: node:lts-alpine - steps: - - checkout - - attach_workspace: - at: . - - restore_cache: - name: Restore yarn package cache - keys: - - yarn-{{ checksum "yarn.lock" }} - - restore_cache: - name: Restore env vars - keys: - - env-{{ .Environment.CIRCLE_WORKFLOW_ID }} - - run: | - cat /tmp/variables.env >> $BASH_ENV - source $BASH_ENV - yarn workspace @gitbeaker/cli test:integration - - test-integration-node: - docker: - - image: node:lts-alpine - steps: - - checkout - - attach_workspace: - at: . - - restore_cache: - name: Restore yarn package cache - keys: - - yarn-{{ checksum "yarn.lock" }} - - restore_cache: - name: Restore env vars - keys: - - env-{{ .Environment.CIRCLE_WORKFLOW_ID }} - - run: | - cat /tmp/variables.env >> $BASH_ENV - source $BASH_ENV - yarn workspace @gitbeaker/node test:integration - - # Teardown integration test resources - test-delegator: - docker: - - image: alpine:latest - steps: - - run: apk add --no-cache curl jq - - run: | - sleep 100 - while [[ $(curl --location --request GET "https://circleci.com/api/v2/workflow/$CIRCLE_WORKFLOW_ID/job" --header "Circle-Token: $CCI_TOKEN"| jq -r '.items[]|select(.name | startswith("test-integration"))|.status' | grep -c "running") -gt 0 ]] - do - sleep 100 - done - - run: echo "All Integration Tests Stages have now completed" - - teardown: - docker: - - image: gcr.io/google.com/cloudsdktool/cloud-sdk:alpine - steps: - - run: - when: always - command: | - echo $GCLOUD_SERVICE_KEY | base64 -d | gcloud auth activate-service-account --key-file=- - gcloud --quiet config set project ${GOOGLE_PROJECT_ID} - gcloud compute instances delete gitlab-${CIRCLE_WORKFLOW_ID} - - # Canary - canary: - docker: - - image: node:lts-alpine - steps: - - checkout - - attach_workspace: - at: . - - restore_cache: - name: Restore yarn package cache - keys: - - yarn-{{ checksum "yarn.lock" }} - - run: | - NUM_RELEASES=$(find packages -maxdepth 2 -name '*dist*' -type d -print | wc -l) - - if [[ $NUM_RELEASES -eq 5 ]] - then - echo "Release files are present. Continuing deployment" - else - echo "Release files are missing. Halting deployment" - circleci step halt - fi - - run: | - apk add --no-cache git openssh - - - npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN - npm config set always-auth=true - - if yarn auto label --pr $CIRCLE_PR_NUMBER | grep 'canary'; then - echo "canary label found, starting canary deployment!" - yarn auto canary - else - echo "Skipping, canary label isn't present." - fi - - # Release - release: - docker: - - image: node:lts-alpine - steps: - - checkout - - attach_workspace: - at: . - - restore_cache: - name: Restore yarn package cache - keys: - - yarn-{{ checksum "yarn.lock" }} - - run: | - NUM_RELEASES=$(find packages -maxdepth 2 -name '*dist*' -type d -print | wc -l) - - if [[ $NUM_RELEASES -eq 5 ]] - then - echo "Release files are present. Continuing deployment" - else - echo "Release files are missing. Halting deployment" - circleci step halt - fi - - run: | - apk add --no-cache git openssh - - npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN - npm config set always-auth=true - yarn release diff --git a/.circleci/shutdown.sh b/.circleci/shutdown.sh deleted file mode 100644 index e1b411482..000000000 --- a/.circleci/shutdown.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -# use this as a startup script for a compute instance and it will self-destruct after specified interval -# (default = 20 min) - -# retrieve interval from metadata service (if available) -TIMEOUT_FROM_METADATA=$(curl -H Metadata-Flavor:Google http://metadata.google.internal/computeMetadata/v1/instance/attributes/SELF_DESTRUCT_INTERVAL_MINUTES -s) - -echo "TIMEOUT" -echo $TIMEOUT_FROM_METADATA - -if [ -z "$TIMEOUT_FROM_METADATA" ] -then - TIMEOUT=20 -else - TIMEOUT=$TIMEOUT_FROM_METADATA -fi - -# schedule the instance to delete itself -echo "gcloud compute instances delete $(hostname) --zone \ -$(curl -H Metadata-Flavor:Google http://metadata.google.internal/computeMetadata/v1/instance/zone -s | cut -d/ -f4) -q" | at Now + $TIMEOUT Minutes diff --git a/.codeclimate.yml b/.codeclimate.yml index 7394089ce..c596d0aa3 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -1,22 +1,15 @@ -engines: - tslint: - enabled: true - config: tslint.json - shellcheck: - enabled: true - duplication: - enabled: true - config: - languages: - typescript: - mass_threshold: 70 - count_threshold: 3 +version: '2' -ratings: - paths: - - '**.ts' +checks: + similar-code: + enable: false + file-lines: + enable: false + method-count: + enable: false -exclude_paths: +exclude_patterns: - node_modules - coverage - dist + - test diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..a741ebf28 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,13 @@ +node_modules +npm-debug.log +dist +coverage +reports +.rpt2_cache +.idea +.DS_Store +yarn-error.log +.env +.npmrc +.turbo +scripts diff --git a/.eslintrc.yml b/.eslintrc.yml index 3add7a57a..f1ff6d26f 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -19,26 +19,24 @@ extends: parser: '@typescript-eslint/parser' parserOptions: - project: './tsconfig.json' - tsconfigRootDir: './' + project: + - './tsconfig.json' plugins: - '@typescript-eslint' - prettier - import - -ignorePatterns: - - node_modules - - dist - - '**/scripts/*.ts' + - jest + - jest-extended rules: - import/no-default-export: error + import/no-default-export: off import/prefer-default-export: off import/no-extraneous-dependencies: - error - devDependencies: - - 'scripts/*.js' + - '**/*.config.ts' + - '**/scripts/*.[tj]s' - '**/test/**/*.ts' import/extensions: - error @@ -62,6 +60,18 @@ rules: camelcase: - error + sort-imports: + - error + - ignoreCase: false + ignoreDeclarationSort: true + ignoreMemberSort: false + memberSyntaxSortOrder: + - none + - all + - multiple + - single + allowSeparatedGroups: true + overrides: - files: - '**/*.ts' @@ -79,6 +89,7 @@ overrides: global-require: off jest/no-mocks-import: off jest/unbound-method: error + max-classes-per-file: off - files: - '**/__mocks__/**/*.ts' diff --git a/.gitignore b/.gitignore index fb6c40903..da704150e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,19 @@ node_modules npm-debug.log dist coverage +reports .rpt2_cache .idea .DS_Store yarn-error.log .env -.npmrc \ No newline at end of file +.npmrc +.turbo + +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 000000000..09a3d226f --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,362 @@ +stages: + - install + - build + - lint + - format + - test + - release + +# Fallback variables +variables: + PLAYWRIGHT_VERSION: $CI_JOB_IMAGE + TEST_ID: $CI_JOB_ID + +# Cache Config +.cache:install:modules: &cacheinstallmodules + key: + files: + - yarn.lock + paths: + - node_modules + +.cache:install:yarn: &cacheinstallyarn + key: yarn-$CI_JOB_IMAGE + paths: + - .yarn + +.cache:install:browsers: &cachebrowsers + key: playwright-$PLAYWRIGHT_VERSION + paths: + - ~/.cache/ms-playwright + +.cache:build: &cachebuild + key: build-$CI_JOB_IMAGE + paths: + - node_modules/.cache/nx + +.cache:lint: &cachelint + key: lint-$CI_JOB_IMAGE + paths: + - node_modules/.cache/nx + +.cache:test: &cachetest + key: test-$CI_JOB_IMAGE + paths: + - node_modules/.cache/nx + +#Link and Install all required dependancies +install: + image: node:18-alpine + stage: install + before_script: + - apk add --no-cache libc6-compat jq + - echo "PLAYWRIGHT_VERSION=$(yarn info @playwright/test -A --json | jq ".children.Version")" >> install.env + script: + - yarn + cache: + - <<: *cacheinstallmodules + policy: pull-push + - <<: *cacheinstallyarn + policy: pull-push + artifacts: + reports: + dotenv: install.env + +build: + stage: build + image: node:18-alpine + needs: + - install + cache: + - <<: *cacheinstallmodules + policy: pull + - <<: *cacheinstallyarn + policy: pull + - <<: *cachebuild + policy: pull-push + before_script: + - apk add --no-cache libc6-compat git + script: + - yarn build + artifacts: + paths: + - packages/core/dist/ + - packages/cli/dist/ + - packages/rest/dist/ + - packages/requester-utils/dist/ + expire_in: 1h + +# Lint all code, tests and supporting documentation (README, CHANGELOG etc) +lint: + stage: lint + image: node:18-alpine + needs: + - install + cache: + - <<: *cacheinstallmodules + policy: pull + - <<: *cacheinstallyarn + policy: pull + - <<: *cachelint + policy: pull-push + before_script: + - apk add --no-cache libc6-compat + script: yarn lint + +format: + stage: format + image: node:18-alpine + needs: + - install + cache: + - <<: *cacheinstallmodules + policy: pull + - <<: *cacheinstallyarn + policy: pull + before_script: + - apk add --no-cache libc6-compat + script: yarn format + +# Tests +.test:base: + stage: test + image: node:18-alpine + needs: + - install + cache: + - <<: *cacheinstallmodules + policy: pull + - <<: *cacheinstallyarn + policy: pull + - <<: *cachetest + policy: pull-push + before_script: + - apk add --no-cache libc6-compat + coverage: /All files[^|]*\|[^|]*\s+([\d\.]+)/ + +.test:unit:base: + extends: .test:base + artifacts: + when: always + reports: + junit: $PKG_PATH/reports/*junit.xml + coverage_report: + coverage_format: cobertura + path: $PKG_PATH/coverage/cobertura-coverage.xml + +.test:types:base: + extends: .test:base + needs: + - build + +.test:integration:base: + extends: .test:base + only: + refs: + - /^pr-[0-9]+$/ + - main + - next + needs: + - install + - test:live:setup + +.test:e2e:base: + extends: .test:integration:base + needs: + - build + - test:live:setup + +## Unit Tests +test:unit:utils: + extends: .test:unit:base + script: yarn test:unit --projects=@gitbeaker/requester-utils + variables: + PKG_PATH: 'packages/requester-utils' + +test:unit:core: + extends: .test:unit:base + script: yarn test:unit --projects=@gitbeaker/core + variables: + PKG_PATH: 'packages/core' + +test:unit:rest: + extends: .test:unit:base + script: yarn test:unit --projects=@gitbeaker/rest + variables: + PKG_PATH: 'packages/rest' + +## Types Tests +test:types:utils: + extends: .test:types:base + variables: + PKG_PATH: 'packages/requester-utils' + script: yarn test:types --projects=@gitbeaker/requester-utils + +test:types:core: + extends: .test:types:base + variables: + PKG_PATH: 'packages/core' + script: yarn test:types --projects=@gitbeaker/core + +test:types:rest: + extends: .test:types:base + variables: + PKG_PATH: 'packages/rest' + script: yarn test:types --projects=@gitbeaker/rest + +## Live Test Setup and Clean Up +test:live:setup: + image: gcr.io/google.com/cloudsdktool/cloud-sdk:alpine + stage: test + when: manual + needs: [] + only: + refs: + - /^pr-[0-9]+$/ + - main + - next + allow_failure: false + variables: + GITLAB_PERSONAL_ACCESS_TOKEN: gitbeaker + CONTAINER_NAME: gitlab-${CI_PIPELINE_ID} + GITLAB_ROOT_PASSWORD: gitbeaker + before_script: + - apk add jq curl + script: + - echo $GCLOUD_SERVICE_KEY | base64 -d | gcloud auth activate-service-account --key-file=- + - gcloud --quiet config set project ${GOOGLE_PROJECT_ID} + - | + GITLAB_URL=$(gcloud compute instances create-with-container $CONTAINER_NAME \ + --project gitbeaker \ + --machine-type=e2-standard-2 \ + --zone=northamerica-northeast1-b \ + --tags http-server,https-server \ + --container-image docker.io/gitlab/gitlab-ce:latest \ + --container-command '/bin/sh' \ + --container-arg="-c" \ + --container-arg="printf '#!/usr/bin/env ruby \nu = User.first \nu.admin = true \nu.save! \nt = PersonalAccessToken.new({ user: u, name: \"gitbeaker\", scopes: [\"api\", \"read_user\"]}) \nt.set_token(\"${GITLAB_PERSONAL_ACCESS_TOKEN}\") \nt.save! \nputs t.token\n' > /opt/gitlab/embedded/service/gitlab-rails/db/fixtures/production/40_access_token.rb && /assets/wrapper" \ + --container-env ^~^GITLAB_ROOT_PASSWORD=${GITLAB_ROOT_PASSWORD}~PERSONAL_ACCESS_TOKEN=${GITLAB_PERSONAL_ACCESS_TOKEN}~GITLAB_OMNIBUS_CONFIG="gitlab_rails['monitoring_whitelist'] = ['0.0.0.0/0', '172.17.0.1'];" \ + --metadata SELF_DESTRUCT_INTERVAL_MINUTES=15 \ + --metadata-from-file startup-script=./scripts/shutdown.sh \ + --format='get(networkInterfaces[0].accessConfigs[0].natIP)'\ + | head -2 | tail -1 ) + + - GITLAB_URL="http://${GITLAB_URL}" + - echo "GITLAB_URL=${GITLAB_URL}" >> intergration.env + - echo "GITLAB_PERSONAL_ACCESS_TOKEN=${GITLAB_PERSONAL_ACCESS_TOKEN}" >> intergration.env + - cat intergration.env + - echo "Waiting for service to start" + - | + sleep 180 + while [[ "$(curl --fail --silent -X GET "$GITLAB_URL/-/readiness?all=1" --insecure | jq -r '.master_check[0].status')" != "ok" ]]; do echo "Polling service - not alive yet"; sleep 10; done; + echo "Service is up and running!" + artifacts: + reports: + dotenv: intergration.env + +test:live:teardown: + stage: test + image: gcr.io/google.com/cloudsdktool/cloud-sdk:alpine + needs: + - test:integration:cli + - test:integration:rest + - test:e2e:core + - test:e2e:cli + - test:e2e:rest + when: always + only: + refs: + - /^pr-[0-9]+$/ + - main + - next + variables: + GIT_STRATEGY: none + script: + - echo $GCLOUD_SERVICE_KEY | base64 -d | gcloud auth activate-service-account --key-file=- + - gcloud --quiet config set project ${GOOGLE_PROJECT_ID} + - gcloud compute instances delete gitlab-${CI_PIPELINE_ID} --zone=northamerica-northeast1-b + +## Integration Tests +test:integration:cli: + extends: .test:integration:base + script: yarn test:unit --projects=@gitbeaker/cli + +test:integration:rest: + extends: .test:integration:base + script: yarn test:integration --projects=@gitbeaker/rest + +## End-to-End Tests +test:e2e:core: + extends: .test:e2e:base + script: yarn test:e2e --projects=@gitbeaker/core + +test:e2e:rest: + extends: .test:e2e:base + image: mcr.microsoft.com/playwright:v1.31.0-focal + before_script: + # reinstall swc due to missing binding for ubuntu image + - yarn add @swc/core + script: yarn test:e2e --projects=@gitbeaker/rest + +test:e2e:cli: + extends: .test:e2e:base + script: yarn test:e2e --projects=@gitbeaker/cli + +# Releases +.release:base: + stage: release + image: node:18-alpine + needs: + - build + - test:integration:cli + - test:integration:rest + - test:e2e:core + - test:e2e:cli + - test:e2e:rest + variables: + GIT_STRATEGY: clone + GIT_DEPTH: 0 + cache: + - <<: *cacheinstallmodules + policy: pull + - <<: *cacheinstallyarn + policy: pull + before_script: + - apk add --no-cache libc6-compat git openssh + - npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN + - git config --global user.name "Autobot" + - git config --global user.email "ci@gitlab.com" + - git remote set-url origin https://jdalrymple:${GITHUB_TOKEN}@github.com/jdalrymple/gitbeaker.git + - git branch $CI_COMMIT_BRANCH HEAD + - git checkout $CI_COMMIT_BRANCH + +## Canary or RC Special Releases +release:special: + extends: .release:base + only: + refs: + - /^pr-[0-9]+$/ + script: + - echo "Checking for special release..." + - | + if [[ $CI_COMMIT_BRANCH =~ ^pr-[0-9]*$ ]]; then + pr_id="${CI_COMMIT_BRANCH//[!0-9]/}" + + export CI_MERGE_REQUEST_ID=$pr_id + export CI_MERGE_REQUEST_SOURCE_BRANCH_NAME=$CI_COMMIT_BRANCH + + labels=$(yarn auto label --pr $pr_id) + + if [[ "$labels" =~ "release:canary" ]]; then + yarn release:canary + fi + fi + +## Production +release: + extends: .release:base + only: + refs: + - main + - next + script: yarn release diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 000000000..2312dc587 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npx lint-staged diff --git a/.huskyrc.yml b/.huskyrc.yml deleted file mode 100644 index 121c224e8..000000000 --- a/.huskyrc.yml +++ /dev/null @@ -1,2 +0,0 @@ -hooks: - pre-commit: 'lint-staged' diff --git a/.lintstagedrc.yml b/.lintstagedrc.yml deleted file mode 100644 index 32c7fb246..000000000 --- a/.lintstagedrc.yml +++ /dev/null @@ -1,4 +0,0 @@ -'**/*.{ts,js,json,md,yml}': - - 'yarn prettier --write' -'**/*.{ts,js}': - - 'yarn eslint --fix' diff --git a/.prettierignore b/.prettierignore index e1ab30026..76348206a 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1,3 @@ -lerna.json \ No newline at end of file +.turbo +coverage +dist diff --git a/.prettierrc.yml b/.prettierrc.yml deleted file mode 100644 index 45715c3e7..000000000 --- a/.prettierrc.yml +++ /dev/null @@ -1,9 +0,0 @@ -printWidth: 100 -singleQuote: true -trailingComma: all -tabWidth: 2 -useTabs: false -overrides: - - files: '*.ts' - options: - parser: babel-ts diff --git a/.yarn/releases/yarn-3.4.1.cjs b/.yarn/releases/yarn-3.4.1.cjs new file mode 100755 index 000000000..2bdb752d8 --- /dev/null +++ b/.yarn/releases/yarn-3.4.1.cjs @@ -0,0 +1,873 @@ +#!/usr/bin/env node +/* eslint-disable */ +//prettier-ignore +(()=>{var Mue=Object.create;var Wb=Object.defineProperty;var Kue=Object.getOwnPropertyDescriptor;var Uue=Object.getOwnPropertyNames;var Hue=Object.getPrototypeOf,Gue=Object.prototype.hasOwnProperty;var J=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+r+'" is not supported')});var Yue=(r,e)=>()=>(r&&(e=r(r=0)),e);var w=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ut=(r,e)=>{for(var t in e)Wb(r,t,{get:e[t],enumerable:!0})},jue=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Uue(e))!Gue.call(r,n)&&n!==t&&Wb(r,n,{get:()=>e[n],enumerable:!(i=Kue(e,n))||i.enumerable});return r};var Pe=(r,e,t)=>(t=r!=null?Mue(Hue(r)):{},jue(e||!r||!r.__esModule?Wb(t,"default",{value:r,enumerable:!0}):t,r));var _1=w((O7e,X1)=>{X1.exports=V1;V1.sync=uge;var W1=J("fs");function cge(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(";"),t.indexOf("")!==-1))return!0;for(var i=0;i{tK.exports=$1;$1.sync=gge;var Z1=J("fs");function $1(r,e,t){Z1.stat(r,function(i,n){t(i,i?!1:eK(n,e))})}function gge(r,e){return eK(Z1.statSync(r),e)}function eK(r,e){return r.isFile()&&fge(r,e)}function fge(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt("100",8),l=parseInt("010",8),c=parseInt("001",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var nK=w((U7e,iK)=>{var K7e=J("fs"),_E;process.platform==="win32"||global.TESTING_WINDOWS?_E=_1():_E=rK();iK.exports=uS;uS.sync=hge;function uS(r,e,t){if(typeof e=="function"&&(t=e,e={}),!t){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(i,n){uS(r,e||{},function(s,o){s?n(s):i(o)})})}_E(r,e||{},function(i,n){i&&(i.code==="EACCES"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function hge(r,e){try{return _E.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code==="EACCES")return!1;throw t}}});var uK=w((H7e,cK)=>{var Ig=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",sK=J("path"),pge=Ig?";":":",oK=nK(),aK=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),AK=(r,e)=>{let t=e.colon||pge,i=r.match(/\//)||Ig&&r.match(/\\/)?[""]:[...Ig?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(t)],n=Ig?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=Ig?n.split(t):[""];return Ig&&r.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:i,pathExt:s,pathExtExe:n}},lK=(r,e,t)=>{typeof e=="function"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=AK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(aK(r));let f=i[c],h=/^".*"$/.test(f)?f.slice(1,-1):f,p=sK.join(h,r),C=!h&&/^\.[\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];oK(c+p,{pathExt:s},(C,y)=>{if(!C&&y)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},dge=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=AK(r,e),s=[];for(let o=0;o{"use strict";var gK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(i=>i.toUpperCase()==="PATH")||"Path"};gS.exports=gK;gS.exports.default=gK});var CK=w((Y7e,dK)=>{"use strict";var hK=J("path"),Cge=uK(),mge=fK();function pK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=Cge.sync(r.command,{path:t[mge({env:t})],pathExt:e?hK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=hK.resolve(n?r.options.cwd:"",o)),o}function Ege(r){return pK(r)||pK(r,!0)}dK.exports=Ege});var mK=w((j7e,hS)=>{"use strict";var fS=/([()\][%!^"`<>&|;, *?])/g;function Ige(r){return r=r.replace(fS,"^$1"),r}function yge(r,e){return r=`${r}`,r=r.replace(/(\\*)"/g,'$1$1\\"'),r=r.replace(/(\\*)$/,"$1$1"),r=`"${r}"`,r=r.replace(fS,"^$1"),e&&(r=r.replace(fS,"^$1")),r}hS.exports.command=Ige;hS.exports.argument=yge});var IK=w((q7e,EK)=>{"use strict";EK.exports=/^#!(.*)/});var wK=w((J7e,yK)=>{"use strict";var wge=IK();yK.exports=(r="")=>{let e=r.match(wge);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,"").split(" "),n=t.split("/").pop();return n==="env"?i:i?`${n} ${i}`:n}});var QK=w((W7e,BK)=>{"use strict";var pS=J("fs"),Bge=wK();function Qge(r){let t=Buffer.alloc(150),i;try{i=pS.openSync(r,"r"),pS.readSync(i,t,0,150,0),pS.closeSync(i)}catch{}return Bge(t.toString())}BK.exports=Qge});var xK=w((z7e,vK)=>{"use strict";var bge=J("path"),bK=CK(),SK=mK(),Sge=QK(),vge=process.platform==="win32",xge=/\.(?:com|exe)$/i,Pge=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function Dge(r){r.file=bK(r);let e=r.file&&Sge(r.file);return e?(r.args.unshift(r.file),r.command=e,bK(r)):r.file}function kge(r){if(!vge)return r;let e=Dge(r),t=!xge.test(e);if(r.options.forceShell||t){let i=Pge.test(e);r.command=bge.normalize(r.command),r.command=SK.command(r.command),r.args=r.args.map(s=>SK.argument(s,i));let n=[r.command].concat(r.args).join(" ");r.args=["/d","/s","/c",`"${n}"`],r.command=process.env.comspec||"cmd.exe",r.options.windowsVerbatimArguments=!0}return r}function Rge(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:kge(i)}vK.exports=Rge});var kK=w((V7e,DK)=>{"use strict";var dS=process.platform==="win32";function CS(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function Fge(r,e){if(!dS)return;let t=r.emit;r.emit=function(i,n){if(i==="exit"){let s=PK(n,e,"spawn");if(s)return t.call(r,"error",s)}return t.apply(r,arguments)}}function PK(r,e){return dS&&r===1&&!e.file?CS(e.original,"spawn"):null}function Nge(r,e){return dS&&r===1&&!e.file?CS(e.original,"spawnSync"):null}DK.exports={hookChildProcess:Fge,verifyENOENT:PK,verifyENOENTSync:Nge,notFoundError:CS}});var IS=w((X7e,yg)=>{"use strict";var RK=J("child_process"),mS=xK(),ES=kK();function FK(r,e,t){let i=mS(r,e,t),n=RK.spawn(i.command,i.args,i.options);return ES.hookChildProcess(n,i),n}function Lge(r,e,t){let i=mS(r,e,t),n=RK.spawnSync(i.command,i.args,i.options);return n.error=n.error||ES.verifyENOENTSync(n.status,i),n}yg.exports=FK;yg.exports.spawn=FK;yg.exports.sync=Lge;yg.exports._parse=mS;yg.exports._enoent=ES});var LK=w((_7e,NK)=>{"use strict";function Tge(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Ml(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Ml)}Tge(Ml,Error);Ml.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g>",ie=me(">>",!1),de=">&",tt=me(">&",!1),Pt=">",It=me(">",!1),Or="<<<",ii=me("<<<",!1),gi="<&",hr=me("<&",!1),fi="<",ni=me("<",!1),Ls=function(m){return{type:"argument",segments:[].concat(...m)}},pr=function(m){return m},Ei="$'",_n=me("$'",!1),oa="'",aA=me("'",!1),eg=function(m){return[{type:"text",text:m}]},Zn='""',AA=me('""',!1),aa=function(){return{type:"text",text:""}},up='"',lA=me('"',!1),cA=function(m){return m},wr=function(m){return{type:"arithmetic",arithmetic:m,quoted:!0}},wl=function(m){return{type:"shell",shell:m,quoted:!0}},tg=function(m){return{type:"variable",...m,quoted:!0}},po=function(m){return{type:"text",text:m}},rg=function(m){return{type:"arithmetic",arithmetic:m,quoted:!1}},gp=function(m){return{type:"shell",shell:m,quoted:!1}},fp=function(m){return{type:"variable",...m,quoted:!1}},vr=function(m){return{type:"glob",pattern:m}},se=/^[^']/,Co=Je(["'"],!0,!1),Dn=function(m){return m.join("")},ig=/^[^$"]/,Qt=Je(["$",'"'],!0,!1),Bl=`\\ +`,kn=me(`\\ +`,!1),$n=function(){return""},es="\\",gt=me("\\",!1),mo=/^[\\$"`]/,At=Je(["\\","$",'"',"`"],!1,!1),an=function(m){return m},S="\\a",Tt=me("\\a",!1),ng=function(){return"a"},Ql="\\b",hp=me("\\b",!1),pp=function(){return"\b"},dp=/^[Ee]/,Cp=Je(["E","e"],!1,!1),mp=function(){return"\x1B"},G="\\f",yt=me("\\f",!1),uA=function(){return"\f"},ji="\\n",bl=me("\\n",!1),Xe=function(){return` +`},Aa="\\r",sg=me("\\r",!1),bE=function(){return"\r"},Ep="\\t",SE=me("\\t",!1),ar=function(){return" "},Rn="\\v",Sl=me("\\v",!1),Ip=function(){return"\v"},Ts=/^[\\'"?]/,la=Je(["\\","'",'"',"?"],!1,!1),An=function(m){return String.fromCharCode(parseInt(m,16))},Te="\\x",og=me("\\x",!1),vl="\\u",Os=me("\\u",!1),xl="\\U",gA=me("\\U",!1),ag=function(m){return String.fromCodePoint(parseInt(m,16))},Ag=/^[0-7]/,ca=Je([["0","7"]],!1,!1),ua=/^[0-9a-fA-f]/,rt=Je([["0","9"],["a","f"],["A","f"]],!1,!1),Eo=nt(),fA="-",Pl=me("-",!1),Ms="+",Dl=me("+",!1),vE=".",yp=me(".",!1),lg=function(m,b,N){return{type:"number",value:(m==="-"?-1:1)*parseFloat(b.join("")+"."+N.join(""))}},wp=function(m,b){return{type:"number",value:(m==="-"?-1:1)*parseInt(b.join(""))}},xE=function(m){return{type:"variable",...m}},kl=function(m){return{type:"variable",name:m}},PE=function(m){return m},cg="*",hA=me("*",!1),Rr="/",DE=me("/",!1),Ks=function(m,b,N){return{type:b==="*"?"multiplication":"division",right:N}},Us=function(m,b){return b.reduce((N,U)=>({left:N,...U}),m)},ug=function(m,b,N){return{type:b==="+"?"addition":"subtraction",right:N}},pA="$((",R=me("$((",!1),q="))",Ce=me("))",!1),Ke=function(m){return m},Re="$(",ze=me("$(",!1),dt=function(m){return m},Ft="${",Fn=me("${",!1),Db=":-",$M=me(":-",!1),e1=function(m,b){return{name:m,defaultValue:b}},kb=":-}",t1=me(":-}",!1),r1=function(m){return{name:m,defaultValue:[]}},Rb=":+",i1=me(":+",!1),n1=function(m,b){return{name:m,alternativeValue:b}},Fb=":+}",s1=me(":+}",!1),o1=function(m){return{name:m,alternativeValue:[]}},Nb=function(m){return{name:m}},a1="$",A1=me("$",!1),l1=function(m){return e.isGlobPattern(m)},c1=function(m){return m},Lb=/^[a-zA-Z0-9_]/,Tb=Je([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Ob=function(){return T()},Mb=/^[$@*?#a-zA-Z0-9_\-]/,Kb=Je(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),u1=/^[(){}<>$|&; \t"']/,gg=Je(["(",")","{","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),Ub=/^[<>&; \t"']/,Hb=Je(["<",">","&",";"," "," ",'"',"'"],!1,!1),kE=/^[ \t]/,RE=Je([" "," "],!1,!1),Q=0,Me=0,dA=[{line:1,column:1}],d=0,E=[],I=0,k;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function T(){return r.substring(Me,Q)}function _(){return Et(Me,Q)}function te(m,b){throw b=b!==void 0?b:Et(Me,Q),ki([lt(m)],r.substring(Me,Q),b)}function Be(m,b){throw b=b!==void 0?b:Et(Me,Q),Nn(m,b)}function me(m,b){return{type:"literal",text:m,ignoreCase:b}}function Je(m,b,N){return{type:"class",parts:m,inverted:b,ignoreCase:N}}function nt(){return{type:"any"}}function wt(){return{type:"end"}}function lt(m){return{type:"other",description:m}}function it(m){var b=dA[m],N;if(b)return b;for(N=m-1;!dA[N];)N--;for(b=dA[N],b={line:b.line,column:b.column};Nd&&(d=Q,E=[]),E.push(m))}function Nn(m,b){return new Ml(m,null,null,b)}function ki(m,b,N){return new Ml(Ml.buildMessage(m,b),m,b,N)}function CA(){var m,b;return m=Q,b=Mr(),b===t&&(b=null),b!==t&&(Me=m,b=s(b)),m=b,m}function Mr(){var m,b,N,U,ce;if(m=Q,b=Kr(),b!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=ga(),U!==t?(ce=ts(),ce===t&&(ce=null),ce!==t?(Me=m,b=o(b,U,ce),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)}else Q=m,m=t;if(m===t)if(m=Q,b=Kr(),b!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=ga(),U===t&&(U=null),U!==t?(Me=m,b=a(b,U),m=b):(Q=m,m=t)):(Q=m,m=t)}else Q=m,m=t;return m}function ts(){var m,b,N,U,ce;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t)if(N=Mr(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,b=l(N),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t;return m}function ga(){var m;return r.charCodeAt(Q)===59?(m=c,Q++):(m=t,I===0&&Qe(u)),m===t&&(r.charCodeAt(Q)===38?(m=g,Q++):(m=t,I===0&&Qe(f))),m}function Kr(){var m,b,N;return m=Q,b=g1(),b!==t?(N=yue(),N===t&&(N=null),N!==t?(Me=m,b=h(b,N),m=b):(Q=m,m=t)):(Q=m,m=t),m}function yue(){var m,b,N,U,ce,Se,ht;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t)if(N=wue(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Kr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Me=m,b=p(N,ce),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t;return m}function wue(){var m;return r.substr(Q,2)===C?(m=C,Q+=2):(m=t,I===0&&Qe(y)),m===t&&(r.substr(Q,2)===B?(m=B,Q+=2):(m=t,I===0&&Qe(v))),m}function g1(){var m,b,N;return m=Q,b=bue(),b!==t?(N=Bue(),N===t&&(N=null),N!==t?(Me=m,b=D(b,N),m=b):(Q=m,m=t)):(Q=m,m=t),m}function Bue(){var m,b,N,U,ce,Se,ht;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t)if(N=Que(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=g1(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Me=m,b=L(N,ce),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t;return m}function Que(){var m;return r.substr(Q,2)===H?(m=H,Q+=2):(m=t,I===0&&Qe(j)),m===t&&(r.charCodeAt(Q)===124?(m=$,Q++):(m=t,I===0&&Qe(V))),m}function FE(){var m,b,N,U,ce,Se;if(m=Q,b=Q1(),b!==t)if(r.charCodeAt(Q)===61?(N=W,Q++):(N=t,I===0&&Qe(Z)),N!==t)if(U=p1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(Me=m,b=A(b,U),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t;else Q=m,m=t;if(m===t)if(m=Q,b=Q1(),b!==t)if(r.charCodeAt(Q)===61?(N=W,Q++):(N=t,I===0&&Qe(Z)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,b=ae(b),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t;return m}function bue(){var m,b,N,U,ce,Se,ht,Bt,Jr,hi,rs;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t)if(r.charCodeAt(Q)===40?(N=ge,Q++):(N=t,I===0&&Qe(re)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Mr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(Q)===41?(ht=O,Q++):(ht=t,I===0&&Qe(F)),ht!==t){for(Bt=[],Jr=He();Jr!==t;)Bt.push(Jr),Jr=He();if(Bt!==t){for(Jr=[],hi=Bp();hi!==t;)Jr.push(hi),hi=Bp();if(Jr!==t){for(hi=[],rs=He();rs!==t;)hi.push(rs),rs=He();hi!==t?(Me=m,b=ue(ce,Jr),m=b):(Q=m,m=t)}else Q=m,m=t}else Q=m,m=t}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t;if(m===t){for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t)if(r.charCodeAt(Q)===123?(N=he,Q++):(N=t,I===0&&Qe(ke)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Mr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(Q)===125?(ht=Fe,Q++):(ht=t,I===0&&Qe(Ne)),ht!==t){for(Bt=[],Jr=He();Jr!==t;)Bt.push(Jr),Jr=He();if(Bt!==t){for(Jr=[],hi=Bp();hi!==t;)Jr.push(hi),hi=Bp();if(Jr!==t){for(hi=[],rs=He();rs!==t;)hi.push(rs),rs=He();hi!==t?(Me=m,b=oe(ce,Jr),m=b):(Q=m,m=t)}else Q=m,m=t}else Q=m,m=t}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t;if(m===t){for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t){for(N=[],U=FE();U!==t;)N.push(U),U=FE();if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t){if(ce=[],Se=h1(),Se!==t)for(;Se!==t;)ce.push(Se),Se=h1();else ce=t;if(ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Me=m,b=le(N,ce),m=b):(Q=m,m=t)}else Q=m,m=t}else Q=m,m=t}else Q=m,m=t}else Q=m,m=t;if(m===t){for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t){if(N=[],U=FE(),U!==t)for(;U!==t;)N.push(U),U=FE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,b=we(N),m=b):(Q=m,m=t)}else Q=m,m=t}else Q=m,m=t}}}return m}function f1(){var m,b,N,U,ce;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t){if(N=[],U=NE(),U!==t)for(;U!==t;)N.push(U),U=NE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,b=fe(N),m=b):(Q=m,m=t)}else Q=m,m=t}else Q=m,m=t;return m}function h1(){var m,b,N;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t?(N=Bp(),N!==t?(Me=m,b=Ae(N),m=b):(Q=m,m=t)):(Q=m,m=t),m===t){for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();b!==t?(N=NE(),N!==t?(Me=m,b=Ae(N),m=b):(Q=m,m=t)):(Q=m,m=t)}return m}function Bp(){var m,b,N,U,ce;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();return b!==t?(qe.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(ne)),N===t&&(N=null),N!==t?(U=Sue(),U!==t?(ce=NE(),ce!==t?(Me=m,b=Y(N,U,ce),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m}function Sue(){var m;return r.substr(Q,2)===pe?(m=pe,Q+=2):(m=t,I===0&&Qe(ie)),m===t&&(r.substr(Q,2)===de?(m=de,Q+=2):(m=t,I===0&&Qe(tt)),m===t&&(r.charCodeAt(Q)===62?(m=Pt,Q++):(m=t,I===0&&Qe(It)),m===t&&(r.substr(Q,3)===Or?(m=Or,Q+=3):(m=t,I===0&&Qe(ii)),m===t&&(r.substr(Q,2)===gi?(m=gi,Q+=2):(m=t,I===0&&Qe(hr)),m===t&&(r.charCodeAt(Q)===60?(m=fi,Q++):(m=t,I===0&&Qe(ni))))))),m}function NE(){var m,b,N;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();return b!==t?(N=p1(),N!==t?(Me=m,b=Ae(N),m=b):(Q=m,m=t)):(Q=m,m=t),m}function p1(){var m,b,N;if(m=Q,b=[],N=d1(),N!==t)for(;N!==t;)b.push(N),N=d1();else b=t;return b!==t&&(Me=m,b=Ls(b)),m=b,m}function d1(){var m,b;return m=Q,b=vue(),b!==t&&(Me=m,b=pr(b)),m=b,m===t&&(m=Q,b=xue(),b!==t&&(Me=m,b=pr(b)),m=b,m===t&&(m=Q,b=Pue(),b!==t&&(Me=m,b=pr(b)),m=b,m===t&&(m=Q,b=Due(),b!==t&&(Me=m,b=pr(b)),m=b))),m}function vue(){var m,b,N,U;return m=Q,r.substr(Q,2)===Ei?(b=Ei,Q+=2):(b=t,I===0&&Qe(_n)),b!==t?(N=Fue(),N!==t?(r.charCodeAt(Q)===39?(U=oa,Q++):(U=t,I===0&&Qe(aA)),U!==t?(Me=m,b=eg(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m}function xue(){var m,b,N,U;return m=Q,r.charCodeAt(Q)===39?(b=oa,Q++):(b=t,I===0&&Qe(aA)),b!==t?(N=kue(),N!==t?(r.charCodeAt(Q)===39?(U=oa,Q++):(U=t,I===0&&Qe(aA)),U!==t?(Me=m,b=eg(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m}function Pue(){var m,b,N,U;if(m=Q,r.substr(Q,2)===Zn?(b=Zn,Q+=2):(b=t,I===0&&Qe(AA)),b!==t&&(Me=m,b=aa()),m=b,m===t)if(m=Q,r.charCodeAt(Q)===34?(b=up,Q++):(b=t,I===0&&Qe(lA)),b!==t){for(N=[],U=C1();U!==t;)N.push(U),U=C1();N!==t?(r.charCodeAt(Q)===34?(U=up,Q++):(U=t,I===0&&Qe(lA)),U!==t?(Me=m,b=cA(N),m=b):(Q=m,m=t)):(Q=m,m=t)}else Q=m,m=t;return m}function Due(){var m,b,N;if(m=Q,b=[],N=m1(),N!==t)for(;N!==t;)b.push(N),N=m1();else b=t;return b!==t&&(Me=m,b=cA(b)),m=b,m}function C1(){var m,b;return m=Q,b=w1(),b!==t&&(Me=m,b=wr(b)),m=b,m===t&&(m=Q,b=B1(),b!==t&&(Me=m,b=wl(b)),m=b,m===t&&(m=Q,b=qb(),b!==t&&(Me=m,b=tg(b)),m=b,m===t&&(m=Q,b=Rue(),b!==t&&(Me=m,b=po(b)),m=b))),m}function m1(){var m,b;return m=Q,b=w1(),b!==t&&(Me=m,b=rg(b)),m=b,m===t&&(m=Q,b=B1(),b!==t&&(Me=m,b=gp(b)),m=b,m===t&&(m=Q,b=qb(),b!==t&&(Me=m,b=fp(b)),m=b,m===t&&(m=Q,b=Tue(),b!==t&&(Me=m,b=vr(b)),m=b,m===t&&(m=Q,b=Lue(),b!==t&&(Me=m,b=po(b)),m=b)))),m}function kue(){var m,b,N;for(m=Q,b=[],se.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Co));N!==t;)b.push(N),se.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Co));return b!==t&&(Me=m,b=Dn(b)),m=b,m}function Rue(){var m,b,N;if(m=Q,b=[],N=E1(),N===t&&(ig.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Qt))),N!==t)for(;N!==t;)b.push(N),N=E1(),N===t&&(ig.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Qt)));else b=t;return b!==t&&(Me=m,b=Dn(b)),m=b,m}function E1(){var m,b,N;return m=Q,r.substr(Q,2)===Bl?(b=Bl,Q+=2):(b=t,I===0&&Qe(kn)),b!==t&&(Me=m,b=$n()),m=b,m===t&&(m=Q,r.charCodeAt(Q)===92?(b=es,Q++):(b=t,I===0&&Qe(gt)),b!==t?(mo.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(At)),N!==t?(Me=m,b=an(N),m=b):(Q=m,m=t)):(Q=m,m=t)),m}function Fue(){var m,b,N;for(m=Q,b=[],N=I1(),N===t&&(se.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Co)));N!==t;)b.push(N),N=I1(),N===t&&(se.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Co)));return b!==t&&(Me=m,b=Dn(b)),m=b,m}function I1(){var m,b,N;return m=Q,r.substr(Q,2)===S?(b=S,Q+=2):(b=t,I===0&&Qe(Tt)),b!==t&&(Me=m,b=ng()),m=b,m===t&&(m=Q,r.substr(Q,2)===Ql?(b=Ql,Q+=2):(b=t,I===0&&Qe(hp)),b!==t&&(Me=m,b=pp()),m=b,m===t&&(m=Q,r.charCodeAt(Q)===92?(b=es,Q++):(b=t,I===0&&Qe(gt)),b!==t?(dp.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Cp)),N!==t?(Me=m,b=mp(),m=b):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===G?(b=G,Q+=2):(b=t,I===0&&Qe(yt)),b!==t&&(Me=m,b=uA()),m=b,m===t&&(m=Q,r.substr(Q,2)===ji?(b=ji,Q+=2):(b=t,I===0&&Qe(bl)),b!==t&&(Me=m,b=Xe()),m=b,m===t&&(m=Q,r.substr(Q,2)===Aa?(b=Aa,Q+=2):(b=t,I===0&&Qe(sg)),b!==t&&(Me=m,b=bE()),m=b,m===t&&(m=Q,r.substr(Q,2)===Ep?(b=Ep,Q+=2):(b=t,I===0&&Qe(SE)),b!==t&&(Me=m,b=ar()),m=b,m===t&&(m=Q,r.substr(Q,2)===Rn?(b=Rn,Q+=2):(b=t,I===0&&Qe(Sl)),b!==t&&(Me=m,b=Ip()),m=b,m===t&&(m=Q,r.charCodeAt(Q)===92?(b=es,Q++):(b=t,I===0&&Qe(gt)),b!==t?(Ts.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(la)),N!==t?(Me=m,b=an(N),m=b):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Nue()))))))))),m}function Nue(){var m,b,N,U,ce,Se,ht,Bt,Jr,hi,rs,Jb;return m=Q,r.charCodeAt(Q)===92?(b=es,Q++):(b=t,I===0&&Qe(gt)),b!==t?(N=Gb(),N!==t?(Me=m,b=An(N),m=b):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===Te?(b=Te,Q+=2):(b=t,I===0&&Qe(og)),b!==t?(N=Q,U=Q,ce=Gb(),ce!==t?(Se=Ln(),Se!==t?(ce=[ce,Se],U=ce):(Q=U,U=t)):(Q=U,U=t),U===t&&(U=Gb()),U!==t?N=r.substring(N,Q):N=U,N!==t?(Me=m,b=An(N),m=b):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===vl?(b=vl,Q+=2):(b=t,I===0&&Qe(Os)),b!==t?(N=Q,U=Q,ce=Ln(),ce!==t?(Se=Ln(),Se!==t?(ht=Ln(),ht!==t?(Bt=Ln(),Bt!==t?(ce=[ce,Se,ht,Bt],U=ce):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t),U!==t?N=r.substring(N,Q):N=U,N!==t?(Me=m,b=An(N),m=b):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===xl?(b=xl,Q+=2):(b=t,I===0&&Qe(gA)),b!==t?(N=Q,U=Q,ce=Ln(),ce!==t?(Se=Ln(),Se!==t?(ht=Ln(),ht!==t?(Bt=Ln(),Bt!==t?(Jr=Ln(),Jr!==t?(hi=Ln(),hi!==t?(rs=Ln(),rs!==t?(Jb=Ln(),Jb!==t?(ce=[ce,Se,ht,Bt,Jr,hi,rs,Jb],U=ce):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t),U!==t?N=r.substring(N,Q):N=U,N!==t?(Me=m,b=ag(N),m=b):(Q=m,m=t)):(Q=m,m=t)))),m}function Gb(){var m;return Ag.test(r.charAt(Q))?(m=r.charAt(Q),Q++):(m=t,I===0&&Qe(ca)),m}function Ln(){var m;return ua.test(r.charAt(Q))?(m=r.charAt(Q),Q++):(m=t,I===0&&Qe(rt)),m}function Lue(){var m,b,N,U,ce;if(m=Q,b=[],N=Q,r.charCodeAt(Q)===92?(U=es,Q++):(U=t,I===0&&Qe(gt)),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t),N===t&&(N=Q,U=Q,I++,ce=b1(),I--,ce===t?U=void 0:(Q=U,U=t),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t)),N!==t)for(;N!==t;)b.push(N),N=Q,r.charCodeAt(Q)===92?(U=es,Q++):(U=t,I===0&&Qe(gt)),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t),N===t&&(N=Q,U=Q,I++,ce=b1(),I--,ce===t?U=void 0:(Q=U,U=t),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t));else b=t;return b!==t&&(Me=m,b=Dn(b)),m=b,m}function Yb(){var m,b,N,U,ce,Se;if(m=Q,r.charCodeAt(Q)===45?(b=fA,Q++):(b=t,I===0&&Qe(Pl)),b===t&&(r.charCodeAt(Q)===43?(b=Ms,Q++):(b=t,I===0&&Qe(Dl))),b===t&&(b=null),b!==t){if(N=[],qe.test(r.charAt(Q))?(U=r.charAt(Q),Q++):(U=t,I===0&&Qe(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(Q))?(U=r.charAt(Q),Q++):(U=t,I===0&&Qe(ne));else N=t;if(N!==t)if(r.charCodeAt(Q)===46?(U=vE,Q++):(U=t,I===0&&Qe(yp)),U!==t){if(ce=[],qe.test(r.charAt(Q))?(Se=r.charAt(Q),Q++):(Se=t,I===0&&Qe(ne)),Se!==t)for(;Se!==t;)ce.push(Se),qe.test(r.charAt(Q))?(Se=r.charAt(Q),Q++):(Se=t,I===0&&Qe(ne));else ce=t;ce!==t?(Me=m,b=lg(b,N,ce),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;if(m===t){if(m=Q,r.charCodeAt(Q)===45?(b=fA,Q++):(b=t,I===0&&Qe(Pl)),b===t&&(r.charCodeAt(Q)===43?(b=Ms,Q++):(b=t,I===0&&Qe(Dl))),b===t&&(b=null),b!==t){if(N=[],qe.test(r.charAt(Q))?(U=r.charAt(Q),Q++):(U=t,I===0&&Qe(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(Q))?(U=r.charAt(Q),Q++):(U=t,I===0&&Qe(ne));else N=t;N!==t?(Me=m,b=wp(b,N),m=b):(Q=m,m=t)}else Q=m,m=t;if(m===t&&(m=Q,b=qb(),b!==t&&(Me=m,b=xE(b)),m=b,m===t&&(m=Q,b=Rl(),b!==t&&(Me=m,b=kl(b)),m=b,m===t)))if(m=Q,r.charCodeAt(Q)===40?(b=ge,Q++):(b=t,I===0&&Qe(re)),b!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=y1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.charCodeAt(Q)===41?(Se=O,Q++):(Se=t,I===0&&Qe(F)),Se!==t?(Me=m,b=PE(U),m=b):(Q=m,m=t)):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t}return m}function jb(){var m,b,N,U,ce,Se,ht,Bt;if(m=Q,b=Yb(),b!==t){for(N=[],U=Q,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(Q)===42?(Se=cg,Q++):(Se=t,I===0&&Qe(hA)),Se===t&&(r.charCodeAt(Q)===47?(Se=Rr,Q++):(Se=t,I===0&&Qe(DE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=Yb(),Bt!==t?(Me=U,ce=Ks(b,Se,Bt),U=ce):(Q=U,U=t)):(Q=U,U=t)}else Q=U,U=t;else Q=U,U=t;for(;U!==t;){for(N.push(U),U=Q,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(Q)===42?(Se=cg,Q++):(Se=t,I===0&&Qe(hA)),Se===t&&(r.charCodeAt(Q)===47?(Se=Rr,Q++):(Se=t,I===0&&Qe(DE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=Yb(),Bt!==t?(Me=U,ce=Ks(b,Se,Bt),U=ce):(Q=U,U=t)):(Q=U,U=t)}else Q=U,U=t;else Q=U,U=t}N!==t?(Me=m,b=Us(b,N),m=b):(Q=m,m=t)}else Q=m,m=t;return m}function y1(){var m,b,N,U,ce,Se,ht,Bt;if(m=Q,b=jb(),b!==t){for(N=[],U=Q,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(Q)===43?(Se=Ms,Q++):(Se=t,I===0&&Qe(Dl)),Se===t&&(r.charCodeAt(Q)===45?(Se=fA,Q++):(Se=t,I===0&&Qe(Pl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=jb(),Bt!==t?(Me=U,ce=ug(b,Se,Bt),U=ce):(Q=U,U=t)):(Q=U,U=t)}else Q=U,U=t;else Q=U,U=t;for(;U!==t;){for(N.push(U),U=Q,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(Q)===43?(Se=Ms,Q++):(Se=t,I===0&&Qe(Dl)),Se===t&&(r.charCodeAt(Q)===45?(Se=fA,Q++):(Se=t,I===0&&Qe(Pl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=jb(),Bt!==t?(Me=U,ce=ug(b,Se,Bt),U=ce):(Q=U,U=t)):(Q=U,U=t)}else Q=U,U=t;else Q=U,U=t}N!==t?(Me=m,b=Us(b,N),m=b):(Q=m,m=t)}else Q=m,m=t;return m}function w1(){var m,b,N,U,ce,Se;if(m=Q,r.substr(Q,3)===pA?(b=pA,Q+=3):(b=t,I===0&&Qe(R)),b!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=y1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.substr(Q,2)===q?(Se=q,Q+=2):(Se=t,I===0&&Qe(Ce)),Se!==t?(Me=m,b=Ke(U),m=b):(Q=m,m=t)):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;return m}function B1(){var m,b,N,U;return m=Q,r.substr(Q,2)===Re?(b=Re,Q+=2):(b=t,I===0&&Qe(ze)),b!==t?(N=Mr(),N!==t?(r.charCodeAt(Q)===41?(U=O,Q++):(U=t,I===0&&Qe(F)),U!==t?(Me=m,b=dt(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m}function qb(){var m,b,N,U,ce,Se;return m=Q,r.substr(Q,2)===Ft?(b=Ft,Q+=2):(b=t,I===0&&Qe(Fn)),b!==t?(N=Rl(),N!==t?(r.substr(Q,2)===Db?(U=Db,Q+=2):(U=t,I===0&&Qe($M)),U!==t?(ce=f1(),ce!==t?(r.charCodeAt(Q)===125?(Se=Fe,Q++):(Se=t,I===0&&Qe(Ne)),Se!==t?(Me=m,b=e1(N,ce),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===Ft?(b=Ft,Q+=2):(b=t,I===0&&Qe(Fn)),b!==t?(N=Rl(),N!==t?(r.substr(Q,3)===kb?(U=kb,Q+=3):(U=t,I===0&&Qe(t1)),U!==t?(Me=m,b=r1(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===Ft?(b=Ft,Q+=2):(b=t,I===0&&Qe(Fn)),b!==t?(N=Rl(),N!==t?(r.substr(Q,2)===Rb?(U=Rb,Q+=2):(U=t,I===0&&Qe(i1)),U!==t?(ce=f1(),ce!==t?(r.charCodeAt(Q)===125?(Se=Fe,Q++):(Se=t,I===0&&Qe(Ne)),Se!==t?(Me=m,b=n1(N,ce),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===Ft?(b=Ft,Q+=2):(b=t,I===0&&Qe(Fn)),b!==t?(N=Rl(),N!==t?(r.substr(Q,3)===Fb?(U=Fb,Q+=3):(U=t,I===0&&Qe(s1)),U!==t?(Me=m,b=o1(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===Ft?(b=Ft,Q+=2):(b=t,I===0&&Qe(Fn)),b!==t?(N=Rl(),N!==t?(r.charCodeAt(Q)===125?(U=Fe,Q++):(U=t,I===0&&Qe(Ne)),U!==t?(Me=m,b=Nb(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.charCodeAt(Q)===36?(b=a1,Q++):(b=t,I===0&&Qe(A1)),b!==t?(N=Rl(),N!==t?(Me=m,b=Nb(N),m=b):(Q=m,m=t)):(Q=m,m=t)))))),m}function Tue(){var m,b,N;return m=Q,b=Oue(),b!==t?(Me=Q,N=l1(b),N?N=void 0:N=t,N!==t?(Me=m,b=c1(b),m=b):(Q=m,m=t)):(Q=m,m=t),m}function Oue(){var m,b,N,U,ce;if(m=Q,b=[],N=Q,U=Q,I++,ce=S1(),I--,ce===t?U=void 0:(Q=U,U=t),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t),N!==t)for(;N!==t;)b.push(N),N=Q,U=Q,I++,ce=S1(),I--,ce===t?U=void 0:(Q=U,U=t),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t);else b=t;return b!==t&&(Me=m,b=Dn(b)),m=b,m}function Q1(){var m,b,N;if(m=Q,b=[],Lb.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Tb)),N!==t)for(;N!==t;)b.push(N),Lb.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Tb));else b=t;return b!==t&&(Me=m,b=Ob()),m=b,m}function Rl(){var m,b,N;if(m=Q,b=[],Mb.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Kb)),N!==t)for(;N!==t;)b.push(N),Mb.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Kb));else b=t;return b!==t&&(Me=m,b=Ob()),m=b,m}function b1(){var m;return u1.test(r.charAt(Q))?(m=r.charAt(Q),Q++):(m=t,I===0&&Qe(gg)),m}function S1(){var m;return Ub.test(r.charAt(Q))?(m=r.charAt(Q),Q++):(m=t,I===0&&Qe(Hb)),m}function He(){var m,b;if(m=[],kE.test(r.charAt(Q))?(b=r.charAt(Q),Q++):(b=t,I===0&&Qe(RE)),b!==t)for(;b!==t;)m.push(b),kE.test(r.charAt(Q))?(b=r.charAt(Q),Q++):(b=t,I===0&&Qe(RE));else m=t;return m}if(k=n(),k!==t&&Q===r.length)return k;throw k!==t&&Q{"use strict";function Mge(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Ul(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Ul)}Mge(Ul,Error);Ul.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;gH&&(H=v,j=[]),j.push(ne))}function Ne(ne,Y){return new Ul(ne,null,null,Y)}function oe(ne,Y,pe){return new Ul(Ul.buildMessage(ne,Y),ne,Y,pe)}function le(){var ne,Y,pe,ie;return ne=v,Y=we(),Y!==t?(r.charCodeAt(v)===47?(pe=s,v++):(pe=t,$===0&&Fe(o)),pe!==t?(ie=we(),ie!==t?(D=ne,Y=a(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=we(),Y!==t&&(D=ne,Y=l(Y)),ne=Y),ne}function we(){var ne,Y,pe,ie;return ne=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(pe=c,v++):(pe=t,$===0&&Fe(u)),pe!==t?(ie=qe(),ie!==t?(D=ne,Y=g(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=fe(),Y!==t&&(D=ne,Y=f(Y)),ne=Y),ne}function fe(){var ne,Y,pe,ie,de;return ne=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Fe(u)),Y!==t?(pe=Ae(),pe!==t?(r.charCodeAt(v)===47?(ie=s,v++):(ie=t,$===0&&Fe(o)),ie!==t?(de=Ae(),de!==t?(D=ne,Y=h(),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=Ae(),Y!==t&&(D=ne,Y=h()),ne=Y),ne}function Ae(){var ne,Y,pe;if(ne=v,Y=[],p.test(r.charAt(v))?(pe=r.charAt(v),v++):(pe=t,$===0&&Fe(C)),pe!==t)for(;pe!==t;)Y.push(pe),p.test(r.charAt(v))?(pe=r.charAt(v),v++):(pe=t,$===0&&Fe(C));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}function qe(){var ne,Y,pe;if(ne=v,Y=[],y.test(r.charAt(v))?(pe=r.charAt(v),v++):(pe=t,$===0&&Fe(B)),pe!==t)for(;pe!==t;)Y.push(pe),y.test(r.charAt(v))?(pe=r.charAt(v),v++):(pe=t,$===0&&Fe(B));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v{"use strict";function UK(r){return typeof r>"u"||r===null}function Uge(r){return typeof r=="object"&&r!==null}function Hge(r){return Array.isArray(r)?r:UK(r)?[]:[r]}function Gge(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t{"use strict";function Op(r,e){Error.call(this),this.name="YAMLException",this.reason=r,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Op.prototype=Object.create(Error.prototype);Op.prototype.constructor=Op;Op.prototype.toString=function(e){var t=this.name+": ";return t+=this.reason||"(unknown reason)",!e&&this.mark&&(t+=" "+this.mark.toString()),t};HK.exports=Op});var jK=w((pXe,YK)=>{"use strict";var GK=Gl();function SS(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}SS.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i="",n=this.position;n>0&&`\0\r +\x85\u2028\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=" ... ",n+=5;break}for(s="",o=this.position;ot/2-1){s=" ... ",o-=5;break}return a=this.buffer.slice(n,o),GK.repeat(" ",e)+i+a+s+` +`+GK.repeat(" ",e+this.position-n+i.length)+"^"};SS.prototype.toString=function(e){var t,i="";return this.name&&(i+='in "'+this.name+'" '),i+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`: +`+t)),i};YK.exports=SS});var si=w((dXe,JK)=>{"use strict";var qK=Qg(),qge=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],Jge=["scalar","sequence","mapping"];function Wge(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function zge(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(qge.indexOf(t)===-1)throw new qK('Unknown option "'+t+'" is met in definition of "'+r+'" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=Wge(e.styleAliases||null),Jge.indexOf(this.kind)===-1)throw new qK('Unknown kind "'+this.kind+'" is specified for "'+r+'" YAML type.')}JK.exports=zge});var Yl=w((CXe,zK)=>{"use strict";var WK=Gl(),nI=Qg(),Vge=si();function vS(r,e,t){var i=[];return r.include.forEach(function(n){t=vS(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function Xge(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e{"use strict";var _ge=si();VK.exports=new _ge("tag:yaml.org,2002:str",{kind:"scalar",construct:function(r){return r!==null?r:""}})});var ZK=w((EXe,_K)=>{"use strict";var Zge=si();_K.exports=new Zge("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(r){return r!==null?r:[]}})});var eU=w((IXe,$K)=>{"use strict";var $ge=si();$K.exports=new $ge("tag:yaml.org,2002:map",{kind:"mapping",construct:function(r){return r!==null?r:{}}})});var sI=w((yXe,tU)=>{"use strict";var efe=Yl();tU.exports=new efe({explicit:[XK(),ZK(),eU()]})});var iU=w((wXe,rU)=>{"use strict";var tfe=si();function rfe(r){if(r===null)return!0;var e=r.length;return e===1&&r==="~"||e===4&&(r==="null"||r==="Null"||r==="NULL")}function ife(){return null}function nfe(r){return r===null}rU.exports=new tfe("tag:yaml.org,2002:null",{kind:"scalar",resolve:rfe,construct:ife,predicate:nfe,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var sU=w((BXe,nU)=>{"use strict";var sfe=si();function ofe(r){if(r===null)return!1;var e=r.length;return e===4&&(r==="true"||r==="True"||r==="TRUE")||e===5&&(r==="false"||r==="False"||r==="FALSE")}function afe(r){return r==="true"||r==="True"||r==="TRUE"}function Afe(r){return Object.prototype.toString.call(r)==="[object Boolean]"}nU.exports=new sfe("tag:yaml.org,2002:bool",{kind:"scalar",resolve:ofe,construct:afe,predicate:Afe,represent:{lowercase:function(r){return r?"true":"false"},uppercase:function(r){return r?"TRUE":"FALSE"},camelcase:function(r){return r?"True":"False"}},defaultStyle:"lowercase"})});var aU=w((QXe,oU)=>{"use strict";var lfe=Gl(),cfe=si();function ufe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function gfe(r){return 48<=r&&r<=55}function ffe(r){return 48<=r&&r<=57}function hfe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n==="-"||n==="+")&&(n=r[++t]),n==="0"){if(t+1===e)return!0;if(n=r[++t],n==="b"){for(t++;t=0?"0b"+r.toString(2):"-0b"+r.toString(2).slice(1)},octal:function(r){return r>=0?"0"+r.toString(8):"-0"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?"0x"+r.toString(16).toUpperCase():"-0x"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var cU=w((bXe,lU)=>{"use strict";var AU=Gl(),Cfe=si(),mfe=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Efe(r){return!(r===null||!mfe.test(r)||r[r.length-1]==="_")}function Ife(r){var e,t,i,n;return e=r.replace(/_/g,"").toLowerCase(),t=e[0]==="-"?-1:1,n=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var yfe=/^[-+]?[0-9]+e/;function wfe(r,e){var t;if(isNaN(r))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===r)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(AU.isNegativeZero(r))return"-0.0";return t=r.toString(10),yfe.test(t)?t.replace("e",".e"):t}function Bfe(r){return Object.prototype.toString.call(r)==="[object Number]"&&(r%1!==0||AU.isNegativeZero(r))}lU.exports=new Cfe("tag:yaml.org,2002:float",{kind:"scalar",resolve:Efe,construct:Ife,predicate:Bfe,represent:wfe,defaultStyle:"lowercase"})});var xS=w((SXe,uU)=>{"use strict";var Qfe=Yl();uU.exports=new Qfe({include:[sI()],implicit:[iU(),sU(),aU(),cU()]})});var PS=w((vXe,gU)=>{"use strict";var bfe=Yl();gU.exports=new bfe({include:[xS()]})});var dU=w((xXe,pU)=>{"use strict";var Sfe=si(),fU=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),hU=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function vfe(r){return r===null?!1:fU.exec(r)!==null||hU.exec(r)!==null}function xfe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=fU.exec(r),e===null&&(e=hU.exec(r)),e===null)throw new Error("Date resolve error");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]==="-"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function Pfe(r){return r.toISOString()}pU.exports=new Sfe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:vfe,construct:xfe,instanceOf:Date,represent:Pfe})});var mU=w((PXe,CU)=>{"use strict";var Dfe=si();function kfe(r){return r==="<<"||r===null}CU.exports=new Dfe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:kfe})});var yU=w((DXe,IU)=>{"use strict";var jl;try{EU=J,jl=EU("buffer").Buffer}catch{}var EU,Rfe=si(),DS=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function Ffe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=DS;for(t=0;t64)){if(e<0)return!1;i+=6}return i%8===0}function Nfe(r){var e,t,i=r.replace(/[\r\n=]/g,""),n=i.length,s=DS,o=0,a=[];for(e=0;e>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),jl?jl.from?jl.from(a):new jl(a):a}function Lfe(r){var e="",t=0,i,n,s=r.length,o=DS;for(i=0;i>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function Tfe(r){return jl&&jl.isBuffer(r)}IU.exports=new Rfe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:Ffe,construct:Nfe,predicate:Tfe,represent:Lfe})});var BU=w((kXe,wU)=>{"use strict";var Ofe=si(),Mfe=Object.prototype.hasOwnProperty,Kfe=Object.prototype.toString;function Ufe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t{"use strict";var Gfe=si(),Yfe=Object.prototype.toString;function jfe(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e{"use strict";var Jfe=si(),Wfe=Object.prototype.hasOwnProperty;function zfe(r){if(r===null)return!0;var e,t=r;for(e in t)if(Wfe.call(t,e)&&t[e]!==null)return!1;return!0}function Vfe(r){return r!==null?r:{}}SU.exports=new Jfe("tag:yaml.org,2002:set",{kind:"mapping",resolve:zfe,construct:Vfe})});var Sg=w((NXe,xU)=>{"use strict";var Xfe=Yl();xU.exports=new Xfe({include:[PS()],implicit:[dU(),mU()],explicit:[yU(),BU(),bU(),vU()]})});var DU=w((LXe,PU)=>{"use strict";var _fe=si();function Zfe(){return!0}function $fe(){}function ehe(){return""}function the(r){return typeof r>"u"}PU.exports=new _fe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:Zfe,construct:$fe,predicate:the,represent:ehe})});var RU=w((TXe,kU)=>{"use strict";var rhe=si();function ihe(r){if(r===null||r.length===0)return!1;var e=r,t=/\/([gim]*)$/.exec(r),i="";return!(e[0]==="/"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!=="/"))}function nhe(r){var e=r,t=/\/([gim]*)$/.exec(r),i="";return e[0]==="/"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function she(r){var e="/"+r.source+"/";return r.global&&(e+="g"),r.multiline&&(e+="m"),r.ignoreCase&&(e+="i"),e}function ohe(r){return Object.prototype.toString.call(r)==="[object RegExp]"}kU.exports=new rhe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:ihe,construct:nhe,predicate:ohe,represent:she})});var LU=w((OXe,NU)=>{"use strict";var oI;try{FU=J,oI=FU("esprima")}catch{typeof window<"u"&&(oI=window.esprima)}var FU,ahe=si();function Ahe(r){if(r===null)return!1;try{var e="("+r+")",t=oI.parse(e,{range:!0});return!(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function lhe(r){var e="("+r+")",t=oI.parse(e,{range:!0}),i=[],n;if(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type==="BlockStatement"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,"return "+e.slice(n[0],n[1]))}function che(r){return r.toString()}function uhe(r){return Object.prototype.toString.call(r)==="[object Function]"}NU.exports=new ahe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:Ahe,construct:lhe,predicate:uhe,represent:che})});var Mp=w((MXe,OU)=>{"use strict";var TU=Yl();OU.exports=TU.DEFAULT=new TU({include:[Sg()],explicit:[DU(),RU(),LU()]})});var r2=w((KXe,Kp)=>{"use strict";var da=Gl(),jU=Qg(),ghe=jK(),qU=Sg(),fhe=Mp(),wA=Object.prototype.hasOwnProperty,aI=1,JU=2,WU=3,AI=4,kS=1,hhe=2,MU=3,phe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,dhe=/[\x85\u2028\u2029]/,Che=/[,\[\]\{\}]/,zU=/^(?:!|!!|![a-z\-]+!)$/i,VU=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function KU(r){return Object.prototype.toString.call(r)}function Bo(r){return r===10||r===13}function Jl(r){return r===9||r===32}function un(r){return r===9||r===32||r===10||r===13}function vg(r){return r===44||r===91||r===93||r===123||r===125}function mhe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function Ehe(r){return r===120?2:r===117?4:r===85?8:0}function Ihe(r){return 48<=r&&r<=57?r-48:-1}function UU(r){return r===48?"\0":r===97?"\x07":r===98?"\b":r===116||r===9?" ":r===110?` +`:r===118?"\v":r===102?"\f":r===114?"\r":r===101?"\x1B":r===32?" ":r===34?'"':r===47?"/":r===92?"\\":r===78?"\x85":r===95?"\xA0":r===76?"\u2028":r===80?"\u2029":""}function yhe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var XU=new Array(256),_U=new Array(256);for(ql=0;ql<256;ql++)XU[ql]=UU(ql)?1:0,_U[ql]=UU(ql);var ql;function whe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||fhe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function ZU(r,e){return new jU(e,new ghe(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function ft(r,e){throw ZU(r,e)}function lI(r,e){r.onWarning&&r.onWarning.call(null,ZU(r,e))}var HU={YAML:function(e,t,i){var n,s,o;e.version!==null&&ft(e,"duplication of %YAML directive"),i.length!==1&&ft(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),n===null&&ft(e,"ill-formed argument of the YAML directive"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&ft(e,"unacceptable YAML version of the document"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&lI(e,"unsupported YAML version of the document")},TAG:function(e,t,i){var n,s;i.length!==2&&ft(e,"TAG directive accepts exactly two arguments"),n=i[0],s=i[1],zU.test(n)||ft(e,"ill-formed tag handle (first argument) of the TAG directive"),wA.call(e.tagMap,n)&&ft(e,'there is a previously declared suffix for "'+n+'" tag handle'),VU.test(s)||ft(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[n]=s}};function yA(r,e,t,i){var n,s,o,a;if(e1&&(r.result+=da.repeat(` +`,e-1))}function Bhe(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),un(h)||vg(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),un(n)||t&&vg(n)))return!1;for(r.kind="scalar",r.result="",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),un(n)||t&&vg(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),un(i))break}else{if(r.position===r.lineStart&&cI(r)||t&&vg(h))break;if(Bo(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,zr(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(yA(r,s,o,!1),FS(r,r.line-l),s=o=r.position,a=!1),Jl(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return yA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function Qhe(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind="scalar",r.result="",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(yA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else Bo(t)?(yA(r,i,n,!0),FS(r,zr(r,!1,e)),i=n=r.position):r.position===r.lineStart&&cI(r)?ft(r,"unexpected end of the document within a single quoted scalar"):(r.position++,n=r.position);ft(r,"unexpected end of the stream within a single quoted scalar")}function bhe(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind="scalar",r.result="",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return yA(r,t,r.position,!0),r.position++,!0;if(a===92){if(yA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),Bo(a))zr(r,!1,e);else if(a<256&&XU[a])r.result+=_U[a],r.position++;else if((o=Ehe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=mhe(a))>=0?s=(s<<4)+o:ft(r,"expected hexadecimal character");r.result+=yhe(s),r.position++}else ft(r,"unknown escape sequence");t=i=r.position}else Bo(a)?(yA(r,t,i,!0),FS(r,zr(r,!1,e)),t=i=r.position):r.position===r.lineStart&&cI(r)?ft(r,"unexpected end of the document within a double quoted scalar"):(r.position++,i=r.position)}ft(r,"unexpected end of the stream within a double quoted scalar")}function She(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,y;if(y=r.input.charCodeAt(r.position),y===91)l=93,g=!1,s=[];else if(y===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),y=r.input.charCodeAt(++r.position);y!==0;){if(zr(r,!0,e),y=r.input.charCodeAt(r.position),y===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?"mapping":"sequence",r.result=s,!0;t||ft(r,"missed comma between flow collection entries"),p=h=C=null,c=u=!1,y===63&&(a=r.input.charCodeAt(r.position+1),un(a)&&(c=u=!0,r.position++,zr(r,!0,e))),i=r.line,Pg(r,e,aI,!1,!0),p=r.tag,h=r.result,zr(r,!0,e),y=r.input.charCodeAt(r.position),(u||r.line===i)&&y===58&&(c=!0,y=r.input.charCodeAt(++r.position),zr(r,!0,e),Pg(r,e,aI,!1,!0),C=r.result),g?xg(r,s,f,p,h,C):c?s.push(xg(r,null,f,p,h,C)):s.push(h),zr(r,!0,e),y=r.input.charCodeAt(r.position),y===44?(t=!0,y=r.input.charCodeAt(++r.position)):t=!1}ft(r,"unexpected end of the stream within a flow collection")}function vhe(r,e){var t,i,n=kS,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind="scalar",r.result="";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)kS===n?n=g===43?MU:hhe:ft(r,"repeat of a chomping mode identifier");else if((u=Ihe(g))>=0)u===0?ft(r,"bad explicit indentation width of a block scalar; it cannot be less than one"):o?ft(r,"repeat of an indentation width identifier"):(a=e+u-1,o=!0);else break;if(Jl(g)){do g=r.input.charCodeAt(++r.position);while(Jl(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!Bo(g)&&g!==0)}for(;g!==0;){for(RS(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndenta&&(a=r.lineIndent),Bo(g)){l++;continue}if(r.lineIndente)&&l!==0)ft(r,"bad indentation of a sequence entry");else if(r.lineIndente)&&(Pg(r,e,AI,!0,n)&&(p?f=r.result:h=r.result),p||(xg(r,c,u,g,f,h,s,o),g=f=h=null),zr(r,!0,-1),y=r.input.charCodeAt(r.position)),r.lineIndent>e&&y!==0)ft(r,"bad indentation of a mapping entry");else if(r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndent tag; it should be "scalar", not "'+r.kind+'"'),g=0,f=r.implicitTypes.length;g tag; it should be "'+h.kind+'", not "'+r.kind+'"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):ft(r,"cannot resolve a node with !<"+r.tag+"> explicit tag")):ft(r,"unknown tag !<"+r.tag+">");return r.listener!==null&&r.listener("close",r),r.tag!==null||r.anchor!==null||u}function Rhe(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(zr(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!un(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&&ft(r,"directive name must not be less than one character in length");o!==0;){for(;Jl(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!Bo(o));break}if(Bo(o))break;for(t=r.position;o!==0&&!un(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&RS(r),wA.call(HU,i)?HU[i](r,i,n):lI(r,'unknown document directive "'+i+'"')}if(zr(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,zr(r,!0,-1)):s&&ft(r,"directives end mark is expected"),Pg(r,r.lineIndent-1,AI,!1,!0),zr(r,!0,-1),r.checkLineBreaks&&dhe.test(r.input.slice(e,r.position))&&lI(r,"non-ASCII line breaks are interpreted as content"),r.documents.push(r.result),r.position===r.lineStart&&cI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,zr(r,!0,-1));return}if(r.position"u"&&(t=e,e=null);var i=$U(r,t);if(typeof e!="function")return i;for(var n=0,s=i.length;n"u"&&(t=e,e=null),e2(r,e,da.extend({schema:qU},t))}function Nhe(r,e){return t2(r,da.extend({schema:qU},e))}Kp.exports.loadAll=e2;Kp.exports.load=t2;Kp.exports.safeLoadAll=Fhe;Kp.exports.safeLoad=Nhe});var b2=w((UXe,OS)=>{"use strict";var Hp=Gl(),Gp=Qg(),Lhe=Mp(),The=Sg(),c2=Object.prototype.toString,u2=Object.prototype.hasOwnProperty,Ohe=9,Up=10,Mhe=13,Khe=32,Uhe=33,Hhe=34,g2=35,Ghe=37,Yhe=38,jhe=39,qhe=42,f2=44,Jhe=45,h2=58,Whe=61,zhe=62,Vhe=63,Xhe=64,p2=91,d2=93,_he=96,C2=123,Zhe=124,m2=125,Fi={};Fi[0]="\\0";Fi[7]="\\a";Fi[8]="\\b";Fi[9]="\\t";Fi[10]="\\n";Fi[11]="\\v";Fi[12]="\\f";Fi[13]="\\r";Fi[27]="\\e";Fi[34]='\\"';Fi[92]="\\\\";Fi[133]="\\N";Fi[160]="\\_";Fi[8232]="\\L";Fi[8233]="\\P";var $he=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function epe(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n0?r.charCodeAt(s-1):null,f=f&&s2(o,a)}else{for(s=0;si&&r[g+1]!==" ",g=s);else if(!Dg(o))return uI;a=s>0?r.charCodeAt(s-1):null,f=f&&s2(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==" "}return!l&&!c?f&&!n(r)?I2:y2:t>9&&E2(r)?uI:c?B2:w2}function ope(r,e,t,i){r.dump=function(){if(e.length===0)return"''";if(!r.noCompatMode&&$he.indexOf(e)!==-1)return"'"+e+"'";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return rpe(r,l)}switch(spe(e,o,r.indent,s,a)){case I2:return e;case y2:return"'"+e.replace(/'/g,"''")+"'";case w2:return"|"+o2(e,r.indent)+a2(n2(e,n));case B2:return">"+o2(e,r.indent)+a2(n2(ape(e,s),n));case uI:return'"'+Ape(e,s)+'"';default:throw new Gp("impossible error: invalid scalar style")}}()}function o2(r,e){var t=E2(r)?String(e):"",i=r[r.length-1]===` +`,n=i&&(r[r.length-2]===` +`||r===` +`),s=n?"+":i?"":"-";return t+s+` +`}function a2(r){return r[r.length-1]===` +`?r.slice(0,-1):r}function ape(r,e){for(var t=/(\n+)([^\n]*)/g,i=function(){var c=r.indexOf(` +`);return c=c!==-1?c:r.length,t.lastIndex=c,A2(r.slice(0,c),e)}(),n=r[0]===` +`||r[0]===" ",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===" ",i+=a+(!n&&!s&&l!==""?` +`:"")+A2(l,e),n=s}return i}function A2(r,e){if(r===""||r[0]===" ")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l="";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=` +`+r.slice(n,s),n=s+1),o=a;return l+=` +`,r.length-n>e&&o>n?l+=r.slice(n,o)+` +`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function Ape(r){for(var e="",t,i,n,s=0;s=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=i2((t-55296)*1024+i-56320+65536),s++;continue}n=Fi[t],e+=!n&&Dg(t)?r[s]:n||i2(t)}return e}function lpe(r,e,t){var i="",n=r.tag,s,o;for(s=0,o=t.length;s1024&&(u+="? "),u+=r.dump+(r.condenseFlow?'"':"")+":"+(r.condenseFlow?"":" "),Wl(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump="{"+i+"}"}function gpe(r,e,t,i){var n="",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys=="function")o.sort(r.sortKeys);else if(r.sortKeys)throw new Gp("sortKeys must be a boolean or a function");for(a=0,l=o.length;a1024,g&&(r.dump&&Up===r.dump.charCodeAt(0)?f+="?":f+="? "),f+=r.dump,g&&(f+=NS(r,e)),Wl(r,e+1,u,!0,g)&&(r.dump&&Up===r.dump.charCodeAt(0)?f+=":":f+=": ",f+=r.dump,n+=f));r.tag=s,r.dump=n||"{}"}function l2(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s tag resolver accepts not "'+l+'" style');r.dump=i}return!0}return!1}function Wl(r,e,t,i,n,s){r.tag=null,r.dump=t,l2(r,t,!1)||l2(r,t,!0);var o=c2.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o==="[object Object]"||o==="[object Array]",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!=="?"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump="*ref_"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o==="[object Object]")i&&Object.keys(r.dump).length!==0?(gpe(r,e,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(upe(r,e,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump));else if(o==="[object Array]"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(cpe(r,u,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(lpe(r,u,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump))}else if(o==="[object String]")r.tag!=="?"&&ope(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new Gp("unacceptable kind of an object to dump "+o)}r.tag!==null&&r.tag!=="?"&&(r.dump="!<"+r.tag+"> "+r.dump)}return!0}function fpe(r,e){var t=[],i=[],n,s;for(LS(r,t,i),n=0,s=i.length;n{"use strict";var gI=r2(),S2=b2();function fI(r){return function(){throw new Error("Function "+r+" is deprecated and cannot be used.")}}Fr.exports.Type=si();Fr.exports.Schema=Yl();Fr.exports.FAILSAFE_SCHEMA=sI();Fr.exports.JSON_SCHEMA=xS();Fr.exports.CORE_SCHEMA=PS();Fr.exports.DEFAULT_SAFE_SCHEMA=Sg();Fr.exports.DEFAULT_FULL_SCHEMA=Mp();Fr.exports.load=gI.load;Fr.exports.loadAll=gI.loadAll;Fr.exports.safeLoad=gI.safeLoad;Fr.exports.safeLoadAll=gI.safeLoadAll;Fr.exports.dump=S2.dump;Fr.exports.safeDump=S2.safeDump;Fr.exports.YAMLException=Qg();Fr.exports.MINIMAL_SCHEMA=sI();Fr.exports.SAFE_SCHEMA=Sg();Fr.exports.DEFAULT_SCHEMA=Mp();Fr.exports.scan=fI("scan");Fr.exports.parse=fI("parse");Fr.exports.compose=fI("compose");Fr.exports.addConstructor=fI("addConstructor")});var P2=w((GXe,x2)=>{"use strict";var ppe=v2();x2.exports=ppe});var k2=w((YXe,D2)=>{"use strict";function dpe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function zl(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,zl)}dpe(zl,Error);zl.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g({[Ke]:Ce})))},H=function(R){return R},j=function(R){return R},$=Ts("correct indentation"),V=" ",W=ar(" ",!1),Z=function(R){return R.length===pA*ug},A=function(R){return R.length===(pA+1)*ug},ae=function(){return pA++,!0},ge=function(){return pA--,!0},re=function(){return sg()},O=Ts("pseudostring"),F=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,ue=Rn(["\r",` +`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),he=/^[^\r\n\t ,\][{}:#"']/,ke=Rn(["\r",` +`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),Fe=function(){return sg().replace(/^ *| *$/g,"")},Ne="--",oe=ar("--",!1),le=/^[a-zA-Z\/0-9]/,we=Rn([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),fe=/^[^\r\n\t :,]/,Ae=Rn(["\r",` +`," "," ",":",","],!0,!1),qe="null",ne=ar("null",!1),Y=function(){return null},pe="true",ie=ar("true",!1),de=function(){return!0},tt="false",Pt=ar("false",!1),It=function(){return!1},Or=Ts("string"),ii='"',gi=ar('"',!1),hr=function(){return""},fi=function(R){return R},ni=function(R){return R.join("")},Ls=/^[^"\\\0-\x1F\x7F]/,pr=Rn(['"',"\\",["\0",""],"\x7F"],!0,!1),Ei='\\"',_n=ar('\\"',!1),oa=function(){return'"'},aA="\\\\",eg=ar("\\\\",!1),Zn=function(){return"\\"},AA="\\/",aa=ar("\\/",!1),up=function(){return"/"},lA="\\b",cA=ar("\\b",!1),wr=function(){return"\b"},wl="\\f",tg=ar("\\f",!1),po=function(){return"\f"},rg="\\n",gp=ar("\\n",!1),fp=function(){return` +`},vr="\\r",se=ar("\\r",!1),Co=function(){return"\r"},Dn="\\t",ig=ar("\\t",!1),Qt=function(){return" "},Bl="\\u",kn=ar("\\u",!1),$n=function(R,q,Ce,Ke){return String.fromCharCode(parseInt(`0x${R}${q}${Ce}${Ke}`))},es=/^[0-9a-fA-F]/,gt=Rn([["0","9"],["a","f"],["A","F"]],!1,!1),mo=Ts("blank space"),At=/^[ \t]/,an=Rn([" "," "],!1,!1),S=Ts("white space"),Tt=/^[ \t\n\r]/,ng=Rn([" "," ",` +`,"\r"],!1,!1),Ql=`\r +`,hp=ar(`\r +`,!1),pp=` +`,dp=ar(` +`,!1),Cp="\r",mp=ar("\r",!1),G=0,yt=0,uA=[{line:1,column:1}],ji=0,bl=[],Xe=0,Aa;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function sg(){return r.substring(yt,G)}function bE(){return An(yt,G)}function Ep(R,q){throw q=q!==void 0?q:An(yt,G),vl([Ts(R)],r.substring(yt,G),q)}function SE(R,q){throw q=q!==void 0?q:An(yt,G),og(R,q)}function ar(R,q){return{type:"literal",text:R,ignoreCase:q}}function Rn(R,q,Ce){return{type:"class",parts:R,inverted:q,ignoreCase:Ce}}function Sl(){return{type:"any"}}function Ip(){return{type:"end"}}function Ts(R){return{type:"other",description:R}}function la(R){var q=uA[R],Ce;if(q)return q;for(Ce=R-1;!uA[Ce];)Ce--;for(q=uA[Ce],q={line:q.line,column:q.column};Ceji&&(ji=G,bl=[]),bl.push(R))}function og(R,q){return new zl(R,null,null,q)}function vl(R,q,Ce){return new zl(zl.buildMessage(R,q),R,q,Ce)}function Os(){var R;return R=ag(),R}function xl(){var R,q,Ce;for(R=G,q=[],Ce=gA();Ce!==t;)q.push(Ce),Ce=gA();return q!==t&&(yt=R,q=s(q)),R=q,R}function gA(){var R,q,Ce,Ke,Re;return R=G,q=ua(),q!==t?(r.charCodeAt(G)===45?(Ce=o,G++):(Ce=t,Xe===0&&Te(a)),Ce!==t?(Ke=Rr(),Ke!==t?(Re=ca(),Re!==t?(yt=R,q=l(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function ag(){var R,q,Ce;for(R=G,q=[],Ce=Ag();Ce!==t;)q.push(Ce),Ce=Ag();return q!==t&&(yt=R,q=c(q)),R=q,R}function Ag(){var R,q,Ce,Ke,Re,ze,dt,Ft,Fn;if(R=G,q=Rr(),q===t&&(q=null),q!==t){if(Ce=G,r.charCodeAt(G)===35?(Ke=u,G++):(Ke=t,Xe===0&&Te(g)),Ke!==t){if(Re=[],ze=G,dt=G,Xe++,Ft=Us(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Te(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t),ze!==t)for(;ze!==t;)Re.push(ze),ze=G,dt=G,Xe++,Ft=Us(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Te(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t);else Re=t;Re!==t?(Ke=[Ke,Re],Ce=Ke):(G=Ce,Ce=t)}else G=Ce,Ce=t;if(Ce===t&&(Ce=null),Ce!==t){if(Ke=[],Re=Ks(),Re!==t)for(;Re!==t;)Ke.push(Re),Re=Ks();else Ke=t;Ke!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=ua(),q!==t?(Ce=Pl(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Te(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=ua(),q!==t?(Ce=Ms(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Te(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=ua(),q!==t)if(Ce=Ms(),Ce!==t)if(Ke=Rr(),Ke!==t)if(Re=vE(),Re!==t){if(ze=[],dt=Ks(),dt!==t)for(;dt!==t;)ze.push(dt),dt=Ks();else ze=t;ze!==t?(yt=R,q=y(Ce,Re),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=ua(),q!==t)if(Ce=Ms(),Ce!==t){if(Ke=[],Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Te(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Fn=Ms(),Fn!==t?(yt=Re,ze=D(Ce,Fn),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t),Re!==t)for(;Re!==t;)Ke.push(Re),Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Te(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Fn=Ms(),Fn!==t?(yt=Re,ze=D(Ce,Fn),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t);else Ke=t;Ke!==t?(Re=Rr(),Re===t&&(Re=null),Re!==t?(r.charCodeAt(G)===58?(ze=p,G++):(ze=t,Xe===0&&Te(C)),ze!==t?(dt=Rr(),dt===t&&(dt=null),dt!==t?(Ft=ca(),Ft!==t?(yt=R,q=L(Ce,Ke,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function ca(){var R,q,Ce,Ke,Re,ze,dt;if(R=G,q=G,Xe++,Ce=G,Ke=Us(),Ke!==t?(Re=rt(),Re!==t?(r.charCodeAt(G)===45?(ze=o,G++):(ze=t,Xe===0&&Te(a)),ze!==t?(dt=Rr(),dt!==t?(Ke=[Ke,Re,ze,dt],Ce=Ke):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t),Xe--,Ce!==t?(G=q,q=void 0):q=t,q!==t?(Ce=Ks(),Ce!==t?(Ke=Eo(),Ke!==t?(Re=xl(),Re!==t?(ze=fA(),ze!==t?(yt=R,q=H(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=Us(),q!==t?(Ce=Eo(),Ce!==t?(Ke=ag(),Ke!==t?(Re=fA(),Re!==t?(yt=R,q=H(Ke),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=Dl(),q!==t){if(Ce=[],Ke=Ks(),Ke!==t)for(;Ke!==t;)Ce.push(Ke),Ke=Ks();else Ce=t;Ce!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function ua(){var R,q,Ce;for(Xe++,R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Te(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Te(W));return q!==t?(yt=G,Ce=Z(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),Xe--,R===t&&(q=t,Xe===0&&Te($)),R}function rt(){var R,q,Ce;for(R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Te(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Te(W));return q!==t?(yt=G,Ce=A(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),R}function Eo(){var R;return yt=G,R=ae(),R?R=void 0:R=t,R}function fA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function Pl(){var R;return R=kl(),R===t&&(R=yp()),R}function Ms(){var R,q,Ce;if(R=kl(),R===t){if(R=G,q=[],Ce=lg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=lg();else q=t;q!==t&&(yt=R,q=re()),R=q}return R}function Dl(){var R;return R=wp(),R===t&&(R=xE(),R===t&&(R=kl(),R===t&&(R=yp()))),R}function vE(){var R;return R=wp(),R===t&&(R=kl(),R===t&&(R=lg())),R}function yp(){var R,q,Ce,Ke,Re,ze;if(Xe++,R=G,F.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Te(ue)),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(he.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Te(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(he.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Te(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;return Xe--,R===t&&(q=t,Xe===0&&Te(O)),R}function lg(){var R,q,Ce,Ke,Re;if(R=G,r.substr(G,2)===Ne?(q=Ne,G+=2):(q=t,Xe===0&&Te(oe)),q===t&&(q=null),q!==t)if(le.test(r.charAt(G))?(Ce=r.charAt(G),G++):(Ce=t,Xe===0&&Te(we)),Ce!==t){for(Ke=[],fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Te(Ae));Re!==t;)Ke.push(Re),fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Te(Ae));Ke!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function wp(){var R,q;return R=G,r.substr(G,4)===qe?(q=qe,G+=4):(q=t,Xe===0&&Te(ne)),q!==t&&(yt=R,q=Y()),R=q,R}function xE(){var R,q;return R=G,r.substr(G,4)===pe?(q=pe,G+=4):(q=t,Xe===0&&Te(ie)),q!==t&&(yt=R,q=de()),R=q,R===t&&(R=G,r.substr(G,5)===tt?(q=tt,G+=5):(q=t,Xe===0&&Te(Pt)),q!==t&&(yt=R,q=It()),R=q),R}function kl(){var R,q,Ce,Ke;return Xe++,R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Te(gi)),q!==t?(r.charCodeAt(G)===34?(Ce=ii,G++):(Ce=t,Xe===0&&Te(gi)),Ce!==t?(yt=R,q=hr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Te(gi)),q!==t?(Ce=PE(),Ce!==t?(r.charCodeAt(G)===34?(Ke=ii,G++):(Ke=t,Xe===0&&Te(gi)),Ke!==t?(yt=R,q=fi(Ce),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),Xe--,R===t&&(q=t,Xe===0&&Te(Or)),R}function PE(){var R,q,Ce;if(R=G,q=[],Ce=cg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=cg();else q=t;return q!==t&&(yt=R,q=ni(q)),R=q,R}function cg(){var R,q,Ce,Ke,Re,ze;return Ls.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Te(pr)),R===t&&(R=G,r.substr(G,2)===Ei?(q=Ei,G+=2):(q=t,Xe===0&&Te(_n)),q!==t&&(yt=R,q=oa()),R=q,R===t&&(R=G,r.substr(G,2)===aA?(q=aA,G+=2):(q=t,Xe===0&&Te(eg)),q!==t&&(yt=R,q=Zn()),R=q,R===t&&(R=G,r.substr(G,2)===AA?(q=AA,G+=2):(q=t,Xe===0&&Te(aa)),q!==t&&(yt=R,q=up()),R=q,R===t&&(R=G,r.substr(G,2)===lA?(q=lA,G+=2):(q=t,Xe===0&&Te(cA)),q!==t&&(yt=R,q=wr()),R=q,R===t&&(R=G,r.substr(G,2)===wl?(q=wl,G+=2):(q=t,Xe===0&&Te(tg)),q!==t&&(yt=R,q=po()),R=q,R===t&&(R=G,r.substr(G,2)===rg?(q=rg,G+=2):(q=t,Xe===0&&Te(gp)),q!==t&&(yt=R,q=fp()),R=q,R===t&&(R=G,r.substr(G,2)===vr?(q=vr,G+=2):(q=t,Xe===0&&Te(se)),q!==t&&(yt=R,q=Co()),R=q,R===t&&(R=G,r.substr(G,2)===Dn?(q=Dn,G+=2):(q=t,Xe===0&&Te(ig)),q!==t&&(yt=R,q=Qt()),R=q,R===t&&(R=G,r.substr(G,2)===Bl?(q=Bl,G+=2):(q=t,Xe===0&&Te(kn)),q!==t?(Ce=hA(),Ce!==t?(Ke=hA(),Ke!==t?(Re=hA(),Re!==t?(ze=hA(),ze!==t?(yt=R,q=$n(Ce,Ke,Re,ze),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function hA(){var R;return es.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Te(gt)),R}function Rr(){var R,q;if(Xe++,R=[],At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Te(an)),q!==t)for(;q!==t;)R.push(q),At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Te(an));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Te(mo)),R}function DE(){var R,q;if(Xe++,R=[],Tt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Te(ng)),q!==t)for(;q!==t;)R.push(q),Tt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Te(ng));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Te(S)),R}function Ks(){var R,q,Ce,Ke,Re,ze;if(R=G,q=Us(),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=Us(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=Us(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)}else G=R,R=t;return R}function Us(){var R;return r.substr(G,2)===Ql?(R=Ql,G+=2):(R=t,Xe===0&&Te(hp)),R===t&&(r.charCodeAt(G)===10?(R=pp,G++):(R=t,Xe===0&&Te(dp)),R===t&&(r.charCodeAt(G)===13?(R=Cp,G++):(R=t,Xe===0&&Te(mp)))),R}let ug=2,pA=0;if(Aa=n(),Aa!==t&&G===r.length)return Aa;throw Aa!==t&&G{"use strict";var wpe=r=>{let e=!1,t=!1,i=!1;for(let n=0;n{if(!(typeof r=="string"||Array.isArray(r)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join("-"):r=r.trim(),r.length===0?"":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=wpe(r)),r=r.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\d+(\w|$)/g,n=>n.toUpperCase()),t(r))};KS.exports=T2;KS.exports.default=T2});var M2=w((VXe,Bpe)=>{Bpe.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var Vl=w(On=>{"use strict";var U2=M2(),Qo=process.env;Object.defineProperty(On,"_vendors",{value:U2.map(function(r){return r.constant})});On.name=null;On.isPR=null;U2.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return K2(i)});if(On[r.constant]=t,t)switch(On.name=r.name,typeof r.pr){case"string":On.isPR=!!Qo[r.pr];break;case"object":"env"in r.pr?On.isPR=r.pr.env in Qo&&Qo[r.pr.env]!==r.pr.ne:"any"in r.pr?On.isPR=r.pr.any.some(function(i){return!!Qo[i]}):On.isPR=K2(r.pr);break;default:On.isPR=null}});On.isCI=!!(Qo.CI||Qo.CONTINUOUS_INTEGRATION||Qo.BUILD_NUMBER||Qo.RUN_ID||On.name);function K2(r){return typeof r=="string"?!!Qo[r]:Object.keys(r).every(function(e){return Qo[e]===r[e]})}});var gn={};ut(gn,{KeyRelationship:()=>Xl,applyCascade:()=>zp,base64RegExp:()=>q2,colorStringAlphaRegExp:()=>j2,colorStringRegExp:()=>Y2,computeKey:()=>BA,getPrintable:()=>Vr,hasExactLength:()=>X2,hasForbiddenKeys:()=>tde,hasKeyRelationship:()=>JS,hasMaxLength:()=>Mpe,hasMinLength:()=>Ope,hasMutuallyExclusiveKeys:()=>rde,hasRequiredKeys:()=>ede,hasUniqueItems:()=>Kpe,isArray:()=>Ppe,isAtLeast:()=>Gpe,isAtMost:()=>Ype,isBase64:()=>Zpe,isBoolean:()=>Spe,isDate:()=>xpe,isDict:()=>kpe,isEnum:()=>Wi,isHexColor:()=>_pe,isISO8601:()=>Xpe,isInExclusiveRange:()=>qpe,isInInclusiveRange:()=>jpe,isInstanceOf:()=>Fpe,isInteger:()=>Jpe,isJSON:()=>$pe,isLiteral:()=>Qpe,isLowerCase:()=>Wpe,isNegative:()=>Upe,isNullable:()=>Tpe,isNumber:()=>vpe,isObject:()=>Rpe,isOneOf:()=>Npe,isOptional:()=>Lpe,isPositive:()=>Hpe,isString:()=>Wp,isTuple:()=>Dpe,isUUID4:()=>Vpe,isUnknown:()=>V2,isUpperCase:()=>zpe,iso8601RegExp:()=>qS,makeCoercionFn:()=>_l,makeSetter:()=>z2,makeTrait:()=>W2,makeValidator:()=>bt,matchesRegExp:()=>Vp,plural:()=>EI,pushError:()=>pt,simpleKeyRegExp:()=>G2,uuid4RegExp:()=>J2});function bt({test:r}){return W2(r)()}function Vr(r){return r===null?"null":r===void 0?"undefined":r===""?"an empty string":JSON.stringify(r)}function BA(r,e){var t,i,n;return typeof e=="number"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:"."}[${e}]`:G2.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:""}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:"."}[${JSON.stringify(e)}]`}function _l(r,e){return t=>{let i=r[e];return r[e]=t,_l(r,e).bind(null,i)}}function z2(r,e){return t=>{r[e]=t}}function EI(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:"."}: ${t}`),!1}function Qpe(r){return bt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Vr(r)})`):!0})}function Wi(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return bt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Vr(i)})`)})}var G2,Y2,j2,q2,J2,qS,W2,V2,Wp,bpe,Spe,vpe,xpe,Ppe,Dpe,kpe,Rpe,Fpe,Npe,zp,Lpe,Tpe,Ope,Mpe,X2,Kpe,Upe,Hpe,Gpe,Ype,jpe,qpe,Jpe,Vp,Wpe,zpe,Vpe,Xpe,_pe,Zpe,$pe,ede,tde,rde,Xl,ide,JS,ns=Yue(()=>{G2=/^[a-zA-Z_][a-zA-Z0-9_]*$/,Y2=/^#[0-9a-f]{6}$/i,j2=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,q2=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,J2=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,qS=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/,W2=r=>()=>r;V2=()=>bt({test:(r,e)=>!0});Wp=()=>bt({test:(r,e)=>typeof r!="string"?pt(e,`Expected a string (got ${Vr(r)})`):!0});bpe=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]),Spe=()=>bt({test:(r,e)=>{var t;if(typeof r!="boolean"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i=bpe.get(r);if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Vr(r)})`)}return!0}}),vpe=()=>bt({test:(r,e)=>{var t;if(typeof r!="number"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"){let n;try{n=JSON.parse(r)}catch{}if(typeof n=="number")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Vr(r)})`)}return!0}}),xpe=()=>bt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"&&qS.test(r))i=new Date(r);else{let n;if(typeof r=="string"){let s;try{s=JSON.parse(r)}catch{}typeof s=="number"&&(n=s)}else typeof r=="number"&&(n=r);if(typeof n<"u")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Vr(r)})`)}return!0}}),Ppe=(r,{delimiter:e}={})=>bt({test:(t,i)=>{var n;if(typeof t=="string"&&typeof e<"u"&&typeof(i==null?void 0:i.coercions)<"u"){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Vr(t)})`);let s=!0;for(let o=0,a=t.length;o{let t=X2(r.length);return bt({test:(i,n)=>{var s;if(typeof i=="string"&&typeof e<"u"&&typeof(n==null?void 0:n.coercions)<"u"){if(typeof(n==null?void 0:n.coercion)>"u")return pt(n,"Unbound coercion result");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:".",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Vr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;abt({test:(t,i)=>{if(typeof t!="object"||t===null)return pt(i,`Expected an object (got ${Vr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o{let t=Object.keys(r);return bt({test:(i,n)=>{if(typeof i!="object"||i===null)return pt(n,`Expected an object (got ${Vr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l==="constructor"||l==="__proto__")a=pt(Object.assign(Object.assign({},n),{p:BA(n,l)}),"Unsafe property name");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<"u"?a=c(u,Object.assign(Object.assign({},n),{p:BA(n,l),coercion:_l(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:BA(n,l)}),`Extraneous property (got ${Vr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:z2(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},Fpe=r=>bt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Vr(e)})`)}),Npe=(r,{exclusive:e=!1}={})=>bt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<"u"?[]:void 0;for(let c=0,u=r.length;c1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(", ")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),zp=(r,e)=>bt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<"u"?_l(o,"value"):void 0,l=typeof(i==null?void 0:i.coercions)<"u"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<"u")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<"u"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),Lpe=r=>bt({test:(e,t)=>typeof e>"u"?!0:r(e,t)}),Tpe=r=>bt({test:(e,t)=>e===null?!0:r(e,t)}),Ope=r=>bt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),Mpe=r=>bt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),X2=r=>bt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),Kpe=({map:r}={})=>bt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;sbt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),Hpe=()=>bt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),Gpe=r=>bt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),Ype=r=>bt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),jpe=(r,e)=>bt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),qpe=(r,e)=>bt({test:(t,i)=>t>=r&&tbt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),Vp=r=>bt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Vr(e)})`)}),Wpe=()=>bt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),zpe=()=>bt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),Vpe=()=>bt({test:(r,e)=>J2.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Vr(r)})`)}),Xpe=()=>bt({test:(r,e)=>qS.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Vr(r)})`)}),_pe=({alpha:r=!1})=>bt({test:(e,t)=>(r?Y2.test(e):j2.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Vr(e)})`)}),Zpe=()=>bt({test:(r,e)=>q2.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Vr(r)})`)}),$pe=(r=V2())=>bt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Vr(e)})`)}return r(i,t)}}),ede=r=>{let e=new Set(r);return bt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${EI(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},tde=r=>{let e=new Set(r);return bt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${EI(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},rde=r=>{let e=new Set(r);return bt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`"${o}"`).join(", ")}`):!0}})};(function(r){r.Forbids="Forbids",r.Requires="Requires"})(Xl||(Xl={}));ide={[Xl.Forbids]:{expect:!1,message:"forbids using"},[Xl.Requires]:{expect:!0,message:"requires using"}},JS=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=ide[e];return bt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property "${r}" ${o.message} ${EI(u.length,"property","properties")} ${u.map(g=>`"${g}"`).join(", ")}`):!0}})}});var fH=w((V_e,gH)=>{"use strict";gH.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var Tg=w((X_e,ev)=>{"use strict";var Ide=fH(),hH=r=>{if(r<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=Ide(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{tnew Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};ev.exports=hH;ev.exports.default=hH});var ed=w((Z_e,pH)=>{var yde="2.0.0",wde=Number.MAX_SAFE_INTEGER||9007199254740991,Bde=16;pH.exports={SEMVER_SPEC_VERSION:yde,MAX_LENGTH:256,MAX_SAFE_INTEGER:wde,MAX_SAFE_COMPONENT_LENGTH:Bde}});var td=w(($_e,dH)=>{var Qde=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error("SEMVER",...r):()=>{};dH.exports=Qde});var Zl=w((bA,CH)=>{var{MAX_SAFE_COMPONENT_LENGTH:tv}=ed(),bde=td();bA=CH.exports={};var Sde=bA.re=[],$e=bA.src=[],et=bA.t={},vde=0,St=(r,e,t)=>{let i=vde++;bde(i,e),et[r]=i,$e[i]=e,Sde[i]=new RegExp(e,t?"g":void 0)};St("NUMERICIDENTIFIER","0|[1-9]\\d*");St("NUMERICIDENTIFIERLOOSE","[0-9]+");St("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*");St("MAINVERSION",`(${$e[et.NUMERICIDENTIFIER]})\\.(${$e[et.NUMERICIDENTIFIER]})\\.(${$e[et.NUMERICIDENTIFIER]})`);St("MAINVERSIONLOOSE",`(${$e[et.NUMERICIDENTIFIERLOOSE]})\\.(${$e[et.NUMERICIDENTIFIERLOOSE]})\\.(${$e[et.NUMERICIDENTIFIERLOOSE]})`);St("PRERELEASEIDENTIFIER",`(?:${$e[et.NUMERICIDENTIFIER]}|${$e[et.NONNUMERICIDENTIFIER]})`);St("PRERELEASEIDENTIFIERLOOSE",`(?:${$e[et.NUMERICIDENTIFIERLOOSE]}|${$e[et.NONNUMERICIDENTIFIER]})`);St("PRERELEASE",`(?:-(${$e[et.PRERELEASEIDENTIFIER]}(?:\\.${$e[et.PRERELEASEIDENTIFIER]})*))`);St("PRERELEASELOOSE",`(?:-?(${$e[et.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${$e[et.PRERELEASEIDENTIFIERLOOSE]})*))`);St("BUILDIDENTIFIER","[0-9A-Za-z-]+");St("BUILD",`(?:\\+(${$e[et.BUILDIDENTIFIER]}(?:\\.${$e[et.BUILDIDENTIFIER]})*))`);St("FULLPLAIN",`v?${$e[et.MAINVERSION]}${$e[et.PRERELEASE]}?${$e[et.BUILD]}?`);St("FULL",`^${$e[et.FULLPLAIN]}$`);St("LOOSEPLAIN",`[v=\\s]*${$e[et.MAINVERSIONLOOSE]}${$e[et.PRERELEASELOOSE]}?${$e[et.BUILD]}?`);St("LOOSE",`^${$e[et.LOOSEPLAIN]}$`);St("GTLT","((?:<|>)?=?)");St("XRANGEIDENTIFIERLOOSE",`${$e[et.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);St("XRANGEIDENTIFIER",`${$e[et.NUMERICIDENTIFIER]}|x|X|\\*`);St("XRANGEPLAIN",`[v=\\s]*(${$e[et.XRANGEIDENTIFIER]})(?:\\.(${$e[et.XRANGEIDENTIFIER]})(?:\\.(${$e[et.XRANGEIDENTIFIER]})(?:${$e[et.PRERELEASE]})?${$e[et.BUILD]}?)?)?`);St("XRANGEPLAINLOOSE",`[v=\\s]*(${$e[et.XRANGEIDENTIFIERLOOSE]})(?:\\.(${$e[et.XRANGEIDENTIFIERLOOSE]})(?:\\.(${$e[et.XRANGEIDENTIFIERLOOSE]})(?:${$e[et.PRERELEASELOOSE]})?${$e[et.BUILD]}?)?)?`);St("XRANGE",`^${$e[et.GTLT]}\\s*${$e[et.XRANGEPLAIN]}$`);St("XRANGELOOSE",`^${$e[et.GTLT]}\\s*${$e[et.XRANGEPLAINLOOSE]}$`);St("COERCE",`(^|[^\\d])(\\d{1,${tv}})(?:\\.(\\d{1,${tv}}))?(?:\\.(\\d{1,${tv}}))?(?:$|[^\\d])`);St("COERCERTL",$e[et.COERCE],!0);St("LONETILDE","(?:~>?)");St("TILDETRIM",`(\\s*)${$e[et.LONETILDE]}\\s+`,!0);bA.tildeTrimReplace="$1~";St("TILDE",`^${$e[et.LONETILDE]}${$e[et.XRANGEPLAIN]}$`);St("TILDELOOSE",`^${$e[et.LONETILDE]}${$e[et.XRANGEPLAINLOOSE]}$`);St("LONECARET","(?:\\^)");St("CARETTRIM",`(\\s*)${$e[et.LONECARET]}\\s+`,!0);bA.caretTrimReplace="$1^";St("CARET",`^${$e[et.LONECARET]}${$e[et.XRANGEPLAIN]}$`);St("CARETLOOSE",`^${$e[et.LONECARET]}${$e[et.XRANGEPLAINLOOSE]}$`);St("COMPARATORLOOSE",`^${$e[et.GTLT]}\\s*(${$e[et.LOOSEPLAIN]})$|^$`);St("COMPARATOR",`^${$e[et.GTLT]}\\s*(${$e[et.FULLPLAIN]})$|^$`);St("COMPARATORTRIM",`(\\s*)${$e[et.GTLT]}\\s*(${$e[et.LOOSEPLAIN]}|${$e[et.XRANGEPLAIN]})`,!0);bA.comparatorTrimReplace="$1$2$3";St("HYPHENRANGE",`^\\s*(${$e[et.XRANGEPLAIN]})\\s+-\\s+(${$e[et.XRANGEPLAIN]})\\s*$`);St("HYPHENRANGELOOSE",`^\\s*(${$e[et.XRANGEPLAINLOOSE]})\\s+-\\s+(${$e[et.XRANGEPLAINLOOSE]})\\s*$`);St("STAR","(<|>)?=?\\s*\\*");St("GTE0","^\\s*>=\\s*0.0.0\\s*$");St("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")});var rd=w((eZe,mH)=>{var xde=["includePrerelease","loose","rtl"],Pde=r=>r?typeof r!="object"?{loose:!0}:xde.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};mH.exports=Pde});var bI=w((tZe,yH)=>{var EH=/^[0-9]+$/,IH=(r,e)=>{let t=EH.test(r),i=EH.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:rIH(e,r);yH.exports={compareIdentifiers:IH,rcompareIdentifiers:Dde}});var Li=w((rZe,bH)=>{var SI=td(),{MAX_LENGTH:wH,MAX_SAFE_INTEGER:vI}=ed(),{re:BH,t:QH}=Zl(),kde=rd(),{compareIdentifiers:id}=bI(),Un=class{constructor(e,t){if(t=kde(t),e instanceof Un){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid Version: ${e}`);if(e.length>wH)throw new TypeError(`version is longer than ${wH} characters`);SI("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?BH[QH.LOOSE]:BH[QH.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>vI||this.major<0)throw new TypeError("Invalid major version");if(this.minor>vI||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>vI||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s=0;)typeof this.prerelease[i]=="number"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};bH.exports=Un});var $l=w((iZe,PH)=>{var{MAX_LENGTH:Rde}=ed(),{re:SH,t:vH}=Zl(),xH=Li(),Fde=rd(),Nde=(r,e)=>{if(e=Fde(e),r instanceof xH)return r;if(typeof r!="string"||r.length>Rde||!(e.loose?SH[vH.LOOSE]:SH[vH.FULL]).test(r))return null;try{return new xH(r,e)}catch{return null}};PH.exports=Nde});var kH=w((nZe,DH)=>{var Lde=$l(),Tde=(r,e)=>{let t=Lde(r,e);return t?t.version:null};DH.exports=Tde});var FH=w((sZe,RH)=>{var Ode=$l(),Mde=(r,e)=>{let t=Ode(r.trim().replace(/^[=v]+/,""),e);return t?t.version:null};RH.exports=Mde});var LH=w((oZe,NH)=>{var Kde=Li(),Ude=(r,e,t,i)=>{typeof t=="string"&&(i=t,t=void 0);try{return new Kde(r,t).inc(e,i).version}catch{return null}};NH.exports=Ude});var ss=w((aZe,OH)=>{var TH=Li(),Hde=(r,e,t)=>new TH(r,t).compare(new TH(e,t));OH.exports=Hde});var xI=w((AZe,MH)=>{var Gde=ss(),Yde=(r,e,t)=>Gde(r,e,t)===0;MH.exports=Yde});var HH=w((lZe,UH)=>{var KH=$l(),jde=xI(),qde=(r,e)=>{if(jde(r,e))return null;{let t=KH(r),i=KH(e),n=t.prerelease.length||i.prerelease.length,s=n?"pre":"",o=n?"prerelease":"";for(let a in t)if((a==="major"||a==="minor"||a==="patch")&&t[a]!==i[a])return s+a;return o}};UH.exports=qde});var YH=w((cZe,GH)=>{var Jde=Li(),Wde=(r,e)=>new Jde(r,e).major;GH.exports=Wde});var qH=w((uZe,jH)=>{var zde=Li(),Vde=(r,e)=>new zde(r,e).minor;jH.exports=Vde});var WH=w((gZe,JH)=>{var Xde=Li(),_de=(r,e)=>new Xde(r,e).patch;JH.exports=_de});var VH=w((fZe,zH)=>{var Zde=$l(),$de=(r,e)=>{let t=Zde(r,e);return t&&t.prerelease.length?t.prerelease:null};zH.exports=$de});var _H=w((hZe,XH)=>{var eCe=ss(),tCe=(r,e,t)=>eCe(e,r,t);XH.exports=tCe});var $H=w((pZe,ZH)=>{var rCe=ss(),iCe=(r,e)=>rCe(r,e,!0);ZH.exports=iCe});var PI=w((dZe,tG)=>{var eG=Li(),nCe=(r,e,t)=>{let i=new eG(r,t),n=new eG(e,t);return i.compare(n)||i.compareBuild(n)};tG.exports=nCe});var iG=w((CZe,rG)=>{var sCe=PI(),oCe=(r,e)=>r.sort((t,i)=>sCe(t,i,e));rG.exports=oCe});var sG=w((mZe,nG)=>{var aCe=PI(),ACe=(r,e)=>r.sort((t,i)=>aCe(i,t,e));nG.exports=ACe});var nd=w((EZe,oG)=>{var lCe=ss(),cCe=(r,e,t)=>lCe(r,e,t)>0;oG.exports=cCe});var DI=w((IZe,aG)=>{var uCe=ss(),gCe=(r,e,t)=>uCe(r,e,t)<0;aG.exports=gCe});var rv=w((yZe,AG)=>{var fCe=ss(),hCe=(r,e,t)=>fCe(r,e,t)!==0;AG.exports=hCe});var kI=w((wZe,lG)=>{var pCe=ss(),dCe=(r,e,t)=>pCe(r,e,t)>=0;lG.exports=dCe});var RI=w((BZe,cG)=>{var CCe=ss(),mCe=(r,e,t)=>CCe(r,e,t)<=0;cG.exports=mCe});var iv=w((QZe,uG)=>{var ECe=xI(),ICe=rv(),yCe=nd(),wCe=kI(),BCe=DI(),QCe=RI(),bCe=(r,e,t,i)=>{switch(e){case"===":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r===t;case"!==":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r!==t;case"":case"=":case"==":return ECe(r,t,i);case"!=":return ICe(r,t,i);case">":return yCe(r,t,i);case">=":return wCe(r,t,i);case"<":return BCe(r,t,i);case"<=":return QCe(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};uG.exports=bCe});var fG=w((bZe,gG)=>{var SCe=Li(),vCe=$l(),{re:FI,t:NI}=Zl(),xCe=(r,e)=>{if(r instanceof SCe)return r;if(typeof r=="number"&&(r=String(r)),typeof r!="string")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(FI[NI.COERCE]);else{let i;for(;(i=FI[NI.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),FI[NI.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;FI[NI.COERCERTL].lastIndex=-1}return t===null?null:vCe(`${t[2]}.${t[3]||"0"}.${t[4]||"0"}`,e)};gG.exports=xCe});var pG=w((SZe,hG)=>{"use strict";hG.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var sd=w((vZe,dG)=>{"use strict";dG.exports=Ht;Ht.Node=ec;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach=="function")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(ethis.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&ithis.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i{"use strict";var RCe=sd(),tc=Symbol("max"),Ia=Symbol("length"),Og=Symbol("lengthCalculator"),ad=Symbol("allowStale"),rc=Symbol("maxAge"),Ea=Symbol("dispose"),CG=Symbol("noDisposeOnSet"),di=Symbol("lruList"),Ws=Symbol("cache"),EG=Symbol("updateAgeOnGet"),nv=()=>1,ov=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let t=this[tc]=e.max||1/0,i=e.length||nv;if(this[Og]=typeof i!="function"?nv:i,this[ad]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[rc]=e.maxAge||0,this[Ea]=e.dispose,this[CG]=e.noDisposeOnSet||!1,this[EG]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[tc]=e||1/0,od(this)}get max(){return this[tc]}set allowStale(e){this[ad]=!!e}get allowStale(){return this[ad]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[rc]=e,od(this)}get maxAge(){return this[rc]}set lengthCalculator(e){typeof e!="function"&&(e=nv),e!==this[Og]&&(this[Og]=e,this[Ia]=0,this[di].forEach(t=>{t.length=this[Og](t.value,t.key),this[Ia]+=t.length})),od(this)}get lengthCalculator(){return this[Og]}get length(){return this[Ia]}get itemCount(){return this[di].length}rforEach(e,t){t=t||this;for(let i=this[di].tail;i!==null;){let n=i.prev;mG(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[di].head;i!==null;){let n=i.next;mG(this,e,i,t),i=n}}keys(){return this[di].toArray().map(e=>e.key)}values(){return this[di].toArray().map(e=>e.value)}reset(){this[Ea]&&this[di]&&this[di].length&&this[di].forEach(e=>this[Ea](e.key,e.value)),this[Ws]=new Map,this[di]=new RCe,this[Ia]=0}dump(){return this[di].map(e=>LI(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[di]}set(e,t,i){if(i=i||this[rc],i&&typeof i!="number")throw new TypeError("maxAge must be a number");let n=i?Date.now():0,s=this[Og](t,e);if(this[Ws].has(e)){if(s>this[tc])return Mg(this,this[Ws].get(e)),!1;let l=this[Ws].get(e).value;return this[Ea]&&(this[CG]||this[Ea](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[Ia]+=s-l.length,l.length=s,this.get(e),od(this),!0}let o=new av(e,t,s,n,i);return o.length>this[tc]?(this[Ea]&&this[Ea](e,t),!1):(this[Ia]+=o.length,this[di].unshift(o),this[Ws].set(e,this[di].head),od(this),!0)}has(e){if(!this[Ws].has(e))return!1;let t=this[Ws].get(e).value;return!LI(this,t)}get(e){return sv(this,e,!0)}peek(e){return sv(this,e,!1)}pop(){let e=this[di].tail;return e?(Mg(this,e),e.value):null}del(e){Mg(this,this[Ws].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[Ws].forEach((e,t)=>sv(this,t,!1))}},sv=(r,e,t)=>{let i=r[Ws].get(e);if(i){let n=i.value;if(LI(r,n)){if(Mg(r,i),!r[ad])return}else t&&(r[EG]&&(i.value.now=Date.now()),r[di].unshiftNode(i));return n.value}},LI=(r,e)=>{if(!e||!e.maxAge&&!r[rc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[rc]&&t>r[rc]},od=r=>{if(r[Ia]>r[tc])for(let e=r[di].tail;r[Ia]>r[tc]&&e!==null;){let t=e.prev;Mg(r,e),e=t}},Mg=(r,e)=>{if(e){let t=e.value;r[Ea]&&r[Ea](t.key,t.value),r[Ia]-=t.length,r[Ws].delete(t.key),r[di].removeNode(e)}},av=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},mG=(r,e,t,i)=>{let n=t.value;LI(r,n)&&(Mg(r,t),r[ad]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};IG.exports=ov});var os=w((PZe,bG)=>{var ic=class{constructor(e,t){if(t=NCe(t),e instanceof ic)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new ic(e.raw,t);if(e instanceof Av)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!BG(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&KCe(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(",")}:${e}`,n=wG.get(i);if(n)return n;let s=this.options.loose,o=s?Ti[Bi.HYPHENRANGELOOSE]:Ti[Bi.HYPHENRANGE];e=e.replace(o,VCe(this.options.includePrerelease)),Gr("hyphen replace",e),e=e.replace(Ti[Bi.COMPARATORTRIM],TCe),Gr("comparator trim",e,Ti[Bi.COMPARATORTRIM]),e=e.replace(Ti[Bi.TILDETRIM],OCe),e=e.replace(Ti[Bi.CARETTRIM],MCe),e=e.split(/\s+/).join(" ");let a=s?Ti[Bi.COMPARATORLOOSE]:Ti[Bi.COMPARATOR],l=e.split(" ").map(f=>UCe(f,this.options)).join(" ").split(/\s+/).map(f=>zCe(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new Av(f,this.options)),c=l.length,u=new Map;for(let f of l){if(BG(f))return[f];u.set(f.value,f)}u.size>1&&u.has("")&&u.delete("");let g=[...u.values()];return wG.set(i,g),g}intersects(e,t){if(!(e instanceof ic))throw new TypeError("a Range is required");return this.set.some(i=>QG(i,t)&&e.set.some(n=>QG(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new LCe(e,this.options)}catch{return!1}for(let t=0;tr.value==="<0.0.0-0",KCe=r=>r.value==="",QG=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},UCe=(r,e)=>(Gr("comp",r,e),r=YCe(r,e),Gr("caret",r),r=HCe(r,e),Gr("tildes",r),r=qCe(r,e),Gr("xrange",r),r=WCe(r,e),Gr("stars",r),r),Vi=r=>!r||r.toLowerCase()==="x"||r==="*",HCe=(r,e)=>r.trim().split(/\s+/).map(t=>GCe(t,e)).join(" "),GCe=(r,e)=>{let t=e.loose?Ti[Bi.TILDELOOSE]:Ti[Bi.TILDE];return r.replace(t,(i,n,s,o,a)=>{Gr("tilde",r,i,n,s,o,a);let l;return Vi(n)?l="":Vi(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:Vi(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(Gr("replaceTilde pr",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,Gr("tilde return",l),l})},YCe=(r,e)=>r.trim().split(/\s+/).map(t=>jCe(t,e)).join(" "),jCe=(r,e)=>{Gr("caret",r,e);let t=e.loose?Ti[Bi.CARETLOOSE]:Ti[Bi.CARET],i=e.includePrerelease?"-0":"";return r.replace(t,(n,s,o,a,l)=>{Gr("caret",r,n,s,o,a,l);let c;return Vi(s)?c="":Vi(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:Vi(a)?s==="0"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(Gr("replaceCaret pr",l),s==="0"?o==="0"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(Gr("no pr"),s==="0"?o==="0"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),Gr("caret return",c),c})},qCe=(r,e)=>(Gr("replaceXRanges",r,e),r.split(/\s+/).map(t=>JCe(t,e)).join(" ")),JCe=(r,e)=>{r=r.trim();let t=e.loose?Ti[Bi.XRANGELOOSE]:Ti[Bi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{Gr("xRange",r,i,n,s,o,a,l);let c=Vi(s),u=c||Vi(o),g=u||Vi(a),f=g;return n==="="&&f&&(n=""),l=e.includePrerelease?"-0":"",c?n===">"||n==="<"?i="<0.0.0-0":i="*":n&&f?(u&&(o=0),a=0,n===">"?(n=">=",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n==="<="&&(n="<",u?s=+s+1:o=+o+1),n==="<"&&(l="-0"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),Gr("xRange return",i),i})},WCe=(r,e)=>(Gr("replaceStars",r,e),r.trim().replace(Ti[Bi.STAR],"")),zCe=(r,e)=>(Gr("replaceGTE0",r,e),r.trim().replace(Ti[e.includePrerelease?Bi.GTE0PRE:Bi.GTE0],"")),VCe=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>(Vi(i)?t="":Vi(n)?t=`>=${i}.0.0${r?"-0":""}`:Vi(s)?t=`>=${i}.${n}.0${r?"-0":""}`:o?t=`>=${t}`:t=`>=${t}${r?"-0":""}`,Vi(c)?l="":Vi(u)?l=`<${+c+1}.0.0-0`:Vi(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),XCe=(r,e,t)=>{for(let i=0;i0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Ad=w((DZe,DG)=>{var ld=Symbol("SemVer ANY"),Kg=class{static get ANY(){return ld}constructor(e,t){if(t=_Ce(t),e instanceof Kg){if(e.loose===!!t.loose)return e;e=e.value}cv("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===ld?this.value="":this.value=this.operator+this.semver.version,cv("comp",this)}parse(e){let t=this.options.loose?SG[vG.COMPARATORLOOSE]:SG[vG.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:"",this.operator==="="&&(this.operator=""),i[2]?this.semver=new xG(i[2],this.options.loose):this.semver=ld}toString(){return this.value}test(e){if(cv("Comparator.test",e,this.options.loose),this.semver===ld||e===ld)return!0;if(typeof e=="string")try{e=new xG(e,this.options)}catch{return!1}return lv(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof Kg))throw new TypeError("a Comparator is required");if((!t||typeof t!="object")&&(t={loose:!!t,includePrerelease:!1}),this.operator==="")return this.value===""?!0:new PG(e.value,t).test(this.value);if(e.operator==="")return e.value===""?!0:new PG(this.value,t).test(e.semver);let i=(this.operator===">="||this.operator===">")&&(e.operator===">="||e.operator===">"),n=(this.operator==="<="||this.operator==="<")&&(e.operator==="<="||e.operator==="<"),s=this.semver.version===e.semver.version,o=(this.operator===">="||this.operator==="<=")&&(e.operator===">="||e.operator==="<="),a=lv(this.semver,"<",e.semver,t)&&(this.operator===">="||this.operator===">")&&(e.operator==="<="||e.operator==="<"),l=lv(this.semver,">",e.semver,t)&&(this.operator==="<="||this.operator==="<")&&(e.operator===">="||e.operator===">");return i||n||s&&o||a||l}};DG.exports=Kg;var _Ce=rd(),{re:SG,t:vG}=Zl(),lv=iv(),cv=td(),xG=Li(),PG=os()});var cd=w((kZe,kG)=>{var ZCe=os(),$Ce=(r,e,t)=>{try{e=new ZCe(e,t)}catch{return!1}return e.test(r)};kG.exports=$Ce});var FG=w((RZe,RG)=>{var eme=os(),tme=(r,e)=>new eme(r,e).set.map(t=>t.map(i=>i.value).join(" ").trim().split(" "));RG.exports=tme});var LG=w((FZe,NG)=>{var rme=Li(),ime=os(),nme=(r,e,t)=>{let i=null,n=null,s=null;try{s=new ime(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new rme(i,t))}),i};NG.exports=nme});var OG=w((NZe,TG)=>{var sme=Li(),ome=os(),ame=(r,e,t)=>{let i=null,n=null,s=null;try{s=new ome(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new sme(i,t))}),i};TG.exports=ame});var UG=w((LZe,KG)=>{var uv=Li(),Ame=os(),MG=nd(),lme=(r,e)=>{r=new Ame(r,e);let t=new uv("0.0.0");if(r.test(t)||(t=new uv("0.0.0-0"),r.test(t)))return t;t=null;for(let i=0;i{let a=new uv(o.semver.version);switch(o.operator){case">":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case"":case">=":(!s||MG(a,s))&&(s=a);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||MG(t,s))&&(t=s)}return t&&r.test(t)?t:null};KG.exports=lme});var GG=w((TZe,HG)=>{var cme=os(),ume=(r,e)=>{try{return new cme(r,e).range||"*"}catch{return null}};HG.exports=ume});var TI=w((OZe,JG)=>{var gme=Li(),qG=Ad(),{ANY:fme}=qG,hme=os(),pme=cd(),YG=nd(),jG=DI(),dme=RI(),Cme=kI(),mme=(r,e,t,i)=>{r=new gme(r,i),e=new hme(e,i);let n,s,o,a,l;switch(t){case">":n=YG,s=dme,o=jG,a=">",l=">=";break;case"<":n=jG,s=Cme,o=YG,a="<",l="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(pme(r,e,i))return!1;for(let c=0;c{h.semver===fme&&(h=new qG(">=0.0.0")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};JG.exports=mme});var zG=w((MZe,WG)=>{var Eme=TI(),Ime=(r,e,t)=>Eme(r,e,">",t);WG.exports=Ime});var XG=w((KZe,VG)=>{var yme=TI(),wme=(r,e,t)=>yme(r,e,"<",t);VG.exports=wme});var $G=w((UZe,ZG)=>{var _G=os(),Bme=(r,e,t)=>(r=new _G(r,t),e=new _G(e,t),r.intersects(e));ZG.exports=Bme});var tY=w((HZe,eY)=>{var Qme=cd(),bme=ss();eY.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>bme(u,g,t));for(let u of o)Qme(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push("*"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return l.length{var rY=os(),OI=Ad(),{ANY:gv}=OI,ud=cd(),fv=ss(),Sme=(r,e,t={})=>{if(r===e)return!0;r=new rY(r,t),e=new rY(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=vme(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},vme=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===gv){if(e.length===1&&e[0].semver===gv)return!0;t.includePrerelease?r=[new OI(">=0.0.0-0")]:r=[new OI(">=0.0.0")]}if(e.length===1&&e[0].semver===gv){if(t.includePrerelease)return!0;e=[new OI(">=0.0.0")]}let i=new Set,n,s;for(let h of r)h.operator===">"||h.operator===">="?n=iY(n,h,t):h.operator==="<"||h.operator==="<="?s=nY(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=fv(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==">="||s.operator!=="<="))return null}for(let h of i){if(n&&!ud(h,String(n),t)||s&&!ud(h,String(s),t))return null;for(let p of e)if(!ud(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator==="<"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===">"||h.operator===">=",c=c||h.operator==="<"||h.operator==="<=",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===">"||h.operator===">="){if(a=iY(n,h,t),a===h&&a!==n)return!1}else if(n.operator===">="&&!ud(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator==="<"||h.operator==="<="){if(l=nY(s,h,t),l===h&&l!==s)return!1}else if(s.operator==="<="&&!ud(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},iY=(r,e,t)=>{if(!r)return e;let i=fv(r.semver,e.semver,t);return i>0?r:i<0||e.operator===">"&&r.operator===">="?e:r},nY=(r,e,t)=>{if(!r)return e;let i=fv(r.semver,e.semver,t);return i<0?r:i>0||e.operator==="<"&&r.operator==="<="?e:r};sY.exports=Sme});var Xr=w((YZe,aY)=>{var hv=Zl();aY.exports={re:hv.re,src:hv.src,tokens:hv.t,SEMVER_SPEC_VERSION:ed().SEMVER_SPEC_VERSION,SemVer:Li(),compareIdentifiers:bI().compareIdentifiers,rcompareIdentifiers:bI().rcompareIdentifiers,parse:$l(),valid:kH(),clean:FH(),inc:LH(),diff:HH(),major:YH(),minor:qH(),patch:WH(),prerelease:VH(),compare:ss(),rcompare:_H(),compareLoose:$H(),compareBuild:PI(),sort:iG(),rsort:sG(),gt:nd(),lt:DI(),eq:xI(),neq:rv(),gte:kI(),lte:RI(),cmp:iv(),coerce:fG(),Comparator:Ad(),Range:os(),satisfies:cd(),toComparators:FG(),maxSatisfying:LG(),minSatisfying:OG(),minVersion:UG(),validRange:GG(),outside:TI(),gtr:zG(),ltr:XG(),intersects:$G(),simplifyRange:tY(),subset:oY()}});var pv=w(MI=>{"use strict";Object.defineProperty(MI,"__esModule",{value:!0});MI.VERSION=void 0;MI.VERSION="9.1.0"});var Gt=w((exports,module)=>{"use strict";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i{(function(r,e){typeof define=="function"&&define.amd?define([],e):typeof KI=="object"&&KI.exports?KI.exports=e():r.regexpToAst=e()})(typeof self<"u"?self:AY,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar("/");var C=this.disjunction();this.consumeChar("/");for(var y={type:"Flags",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case"g":o(y,"global");break;case"i":o(y,"ignoreCase");break;case"m":o(y,"multiLine");break;case"u":o(y,"unicode");break;case"y":o(y,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:y,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),p.push(this.alternative());return{type:"Disjunction",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:"Alternative",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(p)};case"$":return{type:"EndAnchor",loc:this.loc(p)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(p)};case"B":return{type:"NonWordBoundary",loc:this.loc(p)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");var C;switch(this.popChar()){case"=":C="Lookahead";break;case"!":C="NegativeLookahead";break}a(C);var y=this.disjunction();return this.consumeChar(")"),{type:C,value:y,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,y=this.idx;switch(this.popChar()){case"*":C={atLeast:0,atMost:1/0};break;case"+":C={atLeast:1,atMost:1/0};break;case"?":C={atLeast:0,atMost:1};break;case"{":var B=this.integerIncludingZero();switch(this.popChar()){case"}":C={atLeast:B,atMost:B};break;case",":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar("}");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)==="?"?(this.consumeChar("?"),C.greedy=!1):C.greedy=!0,C.type="Quantifier",C.loc=this.loc(y),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case".":p=this.dotAll();break;case"\\":p=this.atomEscape();break;case"[":p=this.characterClass();break;case"(":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar("."),{type:"Set",complement:!0,value:[n(` +`),n("\r"),n("\u2028"),n("\u2029")]}},r.prototype.atomEscape=function(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:"GroupBackReference",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case"d":p=u;break;case"D":p=u,C=!0;break;case"s":p=f;break;case"S":p=f,C=!0;break;case"w":p=g;break;case"W":p=g,C=!0;break}return a(p),{type:"Set",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case"f":p=n("\f");break;case"n":p=n(` +`);break;case"r":p=n("\r");break;case"t":p=n(" ");break;case"v":p=n("\v");break}return a(p),{type:"Character",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar("c");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error("Invalid ");var C=p.toUpperCase().charCodeAt(0)-64;return{type:"Character",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar("0"),{type:"Character",value:n("\0")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar("x"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar("u"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:"Character",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case` +`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:var p=this.popChar();return{type:"Character",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),C=!0);this.isClassAtom();){var y=this.classAtom(),B=y.type==="Character";if(B&&this.isRangeDash()){this.consumeChar("-");var v=this.classAtom(),D=v.type==="Character";if(D){if(v.value=this.input.length)throw Error("Unexpected end of input");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(y){C.push(y)}):C.push(p)}function o(p,C){if(p[C]===!0)throw"duplicate flag "+C;p[C]=!0}function a(p){if(p===void 0)throw Error("Internal Error - Should never get here!")}function l(){throw Error("Internal Error - Should never get here!")}var c,u=[];for(c=n("0");c<=n("9");c++)u.push(c);var g=[n("_")].concat(u);for(c=n("a");c<=n("z");c++)g.push(c);for(c=n("A");c<=n("Z");c++)g.push(c);var f=[n(" "),n("\f"),n(` +`),n("\r"),n(" "),n("\v"),n(" "),n("\xA0"),n("\u1680"),n("\u2000"),n("\u2001"),n("\u2002"),n("\u2003"),n("\u2004"),n("\u2005"),n("\u2006"),n("\u2007"),n("\u2008"),n("\u2009"),n("\u200A"),n("\u2028"),n("\u2029"),n("\u202F"),n("\u205F"),n("\u3000"),n("\uFEFF")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var y=p[C];p.hasOwnProperty(C)&&(y.type!==void 0?this.visit(y):Array.isArray(y)&&y.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case"Pattern":this.visitPattern(p);break;case"Flags":this.visitFlags(p);break;case"Disjunction":this.visitDisjunction(p);break;case"Alternative":this.visitAlternative(p);break;case"StartAnchor":this.visitStartAnchor(p);break;case"EndAnchor":this.visitEndAnchor(p);break;case"WordBoundary":this.visitWordBoundary(p);break;case"NonWordBoundary":this.visitNonWordBoundary(p);break;case"Lookahead":this.visitLookahead(p);break;case"NegativeLookahead":this.visitNegativeLookahead(p);break;case"Character":this.visitCharacter(p);break;case"Set":this.visitSet(p);break;case"Group":this.visitGroup(p);break;case"GroupBackReference":this.visitGroupBackReference(p);break;case"Quantifier":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:"0.5.0"}})});var GI=w(Ug=>{"use strict";Object.defineProperty(Ug,"__esModule",{value:!0});Ug.clearRegExpParserCache=Ug.getRegExpAst=void 0;var xme=UI(),HI={},Pme=new xme.RegExpParser;function Dme(r){var e=r.toString();if(HI.hasOwnProperty(e))return HI[e];var t=Pme.pattern(e);return HI[e]=t,t}Ug.getRegExpAst=Dme;function kme(){HI={}}Ug.clearRegExpParserCache=kme});var fY=w(pn=>{"use strict";var Rme=pn&&pn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(pn,"__esModule",{value:!0});pn.canMatchCharCode=pn.firstCharOptimizedIndices=pn.getOptimizedStartCodesIndices=pn.failedOptimizationPrefixMsg=void 0;var cY=UI(),as=Gt(),uY=GI(),ya=Cv(),gY="Complement Sets are not supported for first char optimization";pn.failedOptimizationPrefixMsg=`Unable to use "first char" lexer optimizations: +`;function Fme(r,e){e===void 0&&(e=!1);try{var t=(0,uY.getRegExpAst)(r),i=jI(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===gY)e&&(0,as.PRINT_WARNING)(""+pn.failedOptimizationPrefixMsg+(" Unable to optimize: < "+r.toString()+` > +`)+` Complement Sets cannot be automatically optimized. + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n="";e&&(n=` + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,as.PRINT_ERROR)(pn.failedOptimizationPrefixMsg+` +`+(" Failed parsing: < "+r.toString()+` > +`)+(" Using the regexp-to-ast library version: "+cY.VERSION+` +`)+" Please open an issue at: https://github.com/bd82/regexp-to-ast/issues"+n)}}return[]}pn.getOptimizedStartCodesIndices=Fme;function jI(r,e,t){switch(r.type){case"Disjunction":for(var i=0;i=ya.minOptimizationVal)for(var f=u.from>=ya.minOptimizationVal?u.from:ya.minOptimizationVal,h=u.to,p=(0,ya.charCodeToOptimizedIndex)(f),C=(0,ya.charCodeToOptimizedIndex)(h),y=p;y<=C;y++)e[y]=y}}});break;case"Group":jI(o.value,e,t);break;default:throw Error("Non Exhaustive Match")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type==="Group"&&dv(o)===!1||o.type!=="Group"&&a===!1)break}break;default:throw Error("non exhaustive match!")}return(0,as.values)(e)}pn.firstCharOptimizedIndices=jI;function YI(r,e,t){var i=(0,ya.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&Nme(r,e)}function Nme(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,ya.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,ya.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function lY(r,e){return(0,as.find)(r.value,function(t){if(typeof t=="number")return(0,as.contains)(e,t);var i=t;return(0,as.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function dv(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,as.isArray)(r.value)?(0,as.every)(r.value,dv):dv(r.value):!1}var Lme=function(r){Rme(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case"Lookahead":this.visitLookahead(t);return;case"NegativeLookahead":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,as.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?lY(t,this.targetCharCodes)===void 0&&(this.found=!0):lY(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(cY.BaseRegExpVisitor);function Tme(r,e){if(e instanceof RegExp){var t=(0,uY.getRegExpAst)(e),i=new Lme(r);return i.visit(t),i.found}else return(0,as.find)(e,function(n){return(0,as.contains)(r,n.charCodeAt(0))})!==void 0}pn.canMatchCharCode=Tme});var Cv=w(Ve=>{"use strict";var hY=Ve&&Ve.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ve,"__esModule",{value:!0});Ve.charCodeToOptimizedIndex=Ve.minOptimizationVal=Ve.buildLineBreakIssueMessage=Ve.LineTerminatorOptimizedTester=Ve.isShortPattern=Ve.isCustomPattern=Ve.cloneEmptyGroups=Ve.performWarningRuntimeChecks=Ve.performRuntimeChecks=Ve.addStickyFlag=Ve.addStartOfInput=Ve.findUnreachablePatterns=Ve.findModesThatDoNotExist=Ve.findInvalidGroupType=Ve.findDuplicatePatterns=Ve.findUnsupportedFlags=Ve.findStartOfInputAnchor=Ve.findEmptyMatchRegExps=Ve.findEndOfInputAnchor=Ve.findInvalidPatterns=Ve.findMissingPatterns=Ve.validatePatterns=Ve.analyzeTokenTypes=Ve.enableSticky=Ve.disableSticky=Ve.SUPPORT_STICKY=Ve.MODES=Ve.DEFAULT_MODE=void 0;var pY=UI(),ir=gd(),xe=Gt(),Hg=fY(),dY=GI(),So="PATTERN";Ve.DEFAULT_MODE="defaultMode";Ve.MODES="modes";Ve.SUPPORT_STICKY=typeof new RegExp("(?:)").sticky=="boolean";function Ome(){Ve.SUPPORT_STICKY=!1}Ve.disableSticky=Ome;function Mme(){Ve.SUPPORT_STICKY=!0}Ve.enableSticky=Mme;function Kme(r,e){e=(0,xe.defaults)(e,{useSticky:Ve.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` +`],tracer:function(v,D){return D()}});var t=e.tracer;t("initCharCodeToOptimizedIndexMap",function(){Vme()});var i;t("Reject Lexer.NA",function(){i=(0,xe.reject)(r,function(v){return v[So]===ir.Lexer.NA})});var n=!1,s;t("Transform Patterns",function(){n=!1,s=(0,xe.map)(i,function(v){var D=v[So];if((0,xe.isRegExp)(D)){var L=D.source;return L.length===1&&L!=="^"&&L!=="$"&&L!=="."&&!D.ignoreCase?L:L.length===2&&L[0]==="\\"&&!(0,xe.contains)(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],L[1])?L[1]:e.useSticky?Iv(D):Ev(D)}else{if((0,xe.isFunction)(D))return n=!0,{exec:D};if((0,xe.has)(D,"exec"))return n=!0,D;if(typeof D=="string"){if(D.length===1)return D;var H=D.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),j=new RegExp(H);return e.useSticky?Iv(j):Ev(j)}else throw Error("non exhaustive match")}})});var o,a,l,c,u;t("misc mapping",function(){o=(0,xe.map)(i,function(v){return v.tokenTypeIdx}),a=(0,xe.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,xe.isString)(D))return D;if((0,xe.isUndefined)(D))return!1;throw Error("non exhaustive match")}}),l=(0,xe.map)(i,function(v){var D=v.LONGER_ALT;if(D){var L=(0,xe.isArray)(D)?(0,xe.map)(D,function(H){return(0,xe.indexOf)(i,H)}):[(0,xe.indexOf)(i,D)];return L}}),c=(0,xe.map)(i,function(v){return v.PUSH_MODE}),u=(0,xe.map)(i,function(v){return(0,xe.has)(v,"POP_MODE")})});var g;t("Line Terminator Handling",function(){var v=DY(e.lineTerminatorCharacters);g=(0,xe.map)(i,function(D){return!1}),e.positionTracking!=="onlyOffset"&&(g=(0,xe.map)(i,function(D){if((0,xe.has)(D,"LINE_BREAKS"))return D.LINE_BREAKS;if(xY(D,v)===!1)return(0,Hg.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t("Misc Mapping #2",function(){f=(0,xe.map)(i,wv),h=(0,xe.map)(s,vY),p=(0,xe.reduce)(i,function(v,D){var L=D.GROUP;return(0,xe.isString)(L)&&L!==ir.Lexer.SKIPPED&&(v[L]=[]),v},{}),C=(0,xe.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var y=!0,B=[];return e.safeMode||t("First Char Optimization",function(){B=(0,xe.reduce)(i,function(v,D,L){if(typeof D.PATTERN=="string"){var H=D.PATTERN.charCodeAt(0),j=yv(H);mv(v,j,C[L])}else if((0,xe.isArray)(D.START_CHARS_HINT)){var $;(0,xe.forEach)(D.START_CHARS_HINT,function(W){var Z=typeof W=="string"?W.charCodeAt(0):W,A=yv(Z);$!==A&&($=A,mv(v,A,C[L]))})}else if((0,xe.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)y=!1,e.ensureOptimizations&&(0,xe.PRINT_ERROR)(""+Hg.failedOptimizationPrefixMsg+(" Unable to analyze < "+D.PATTERN.toString()+` > pattern. +`)+` The regexp unicode flag is not currently supported by the regexp-to-ast library. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,Hg.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,xe.isEmpty)(V)&&(y=!1),(0,xe.forEach)(V,function(W){mv(v,W,C[L])})}else e.ensureOptimizations&&(0,xe.PRINT_ERROR)(""+Hg.failedOptimizationPrefixMsg+(" TokenType: <"+D.name+`> is using a custom token pattern without providing parameter. +`)+` This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),y=!1;return v},[])}),t("ArrayPacking",function(){B=(0,xe.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:y}}Ve.analyzeTokenTypes=Kme;function Ume(r,e){var t=[],i=CY(r);t=t.concat(i.errors);var n=mY(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(Hme(s)),t=t.concat(QY(s)),t=t.concat(bY(s,e)),t=t.concat(SY(s)),t}Ve.validatePatterns=Ume;function Hme(r){var e=[],t=(0,xe.filter)(r,function(i){return(0,xe.isRegExp)(i[So])});return e=e.concat(EY(t)),e=e.concat(yY(t)),e=e.concat(wY(t)),e=e.concat(BY(t)),e=e.concat(IY(t)),e}function CY(r){var e=(0,xe.filter)(r,function(n){return!(0,xe.has)(n,So)}),t=(0,xe.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- missing static 'PATTERN' property",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findMissingPatterns=CY;function mY(r){var e=(0,xe.filter)(r,function(n){var s=n[So];return!(0,xe.isRegExp)(s)&&!(0,xe.isFunction)(s)&&!(0,xe.has)(s,"exec")&&!(0,xe.isString)(s)}),t=(0,xe.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findInvalidPatterns=mY;var Gme=/[^\\][\$]/;function EY(r){var e=function(n){hY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(pY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[So];try{var o=(0,dY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return Gme.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: + Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$' + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findEndOfInputAnchor=EY;function IY(r){var e=(0,xe.filter)(r,function(i){var n=i[So];return n.test("")}),t=(0,xe.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' must not match an empty string",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Ve.findEmptyMatchRegExps=IY;var Yme=/[^\\[][\^]|^\^/;function yY(r){var e=function(n){hY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(pY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[So];try{var o=(0,dY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return Yme.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: + Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^' + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findStartOfInputAnchor=yY;function wY(r){var e=(0,xe.filter)(r,function(i){var n=i[So];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,xe.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Ve.findUnsupportedFlags=wY;function BY(r){var e=[],t=(0,xe.map)(r,function(s){return(0,xe.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,xe.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,xe.compact)(t);var i=(0,xe.filter)(t,function(s){return s.length>1}),n=(0,xe.map)(i,function(s){var o=(0,xe.map)(s,function(l){return l.name}),a=(0,xe.first)(s).PATTERN;return{message:"The same RegExp pattern ->"+a+"<-"+("has been used in all of the following Token Types: "+o.join(", ")+" <-"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Ve.findDuplicatePatterns=BY;function QY(r){var e=(0,xe.filter)(r,function(i){if(!(0,xe.has)(i,"GROUP"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,xe.isString)(n)}),t=(0,xe.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Ve.findInvalidGroupType=QY;function bY(r,e){var t=(0,xe.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,xe.contains)(e,n.PUSH_MODE)}),i=(0,xe.map)(t,function(n){var s="Token Type: ->"+n.name+"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->"+n.PUSH_MODE+"<-which does not exist";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Ve.findModesThatDoNotExist=bY;function SY(r){var e=[],t=(0,xe.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,xe.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,xe.isRegExp)(o)&&qme(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,xe.forEach)(r,function(i,n){(0,xe.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n"+i.name+"<-")+`in the lexer's definition. +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Ve.findUnreachablePatterns=SY;function jme(r,e){if((0,xe.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,xe.isFunction)(e))return e(r,0,[],{});if((0,xe.has)(e,"exec"))return e.exec(r,0,[],{});if(typeof e=="string")return e===r;throw Error("non exhaustive match")}}function qme(r){var e=[".","\\","[","]","|","^","$","(",")","?","*","+","{"];return(0,xe.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function Ev(r){var e=r.ignoreCase?"i":"";return new RegExp("^(?:"+r.source+")",e)}Ve.addStartOfInput=Ev;function Iv(r){var e=r.ignoreCase?"iy":"y";return new RegExp(""+r.source,e)}Ve.addStickyFlag=Iv;function Jme(r,e,t){var i=[];return(0,xe.has)(r,Ve.DEFAULT_MODE)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Ve.DEFAULT_MODE+`> property in its definition +`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,xe.has)(r,Ve.MODES)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Ve.MODES+`> property in its definition +`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,xe.has)(r,Ve.MODES)&&(0,xe.has)(r,Ve.DEFAULT_MODE)&&!(0,xe.has)(r.modes,r.defaultMode)&&i.push({message:"A MultiMode Lexer cannot be initialized with a "+Ve.DEFAULT_MODE+": <"+r.defaultMode+`>which does not exist +`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,xe.has)(r,Ve.MODES)&&(0,xe.forEach)(r.modes,function(n,s){(0,xe.forEach)(n,function(o,a){(0,xe.isUndefined)(o)&&i.push({message:"A Lexer cannot be initialized using an undefined Token Type. Mode:"+("<"+s+"> at index: <"+a+`> +`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Ve.performRuntimeChecks=Jme;function Wme(r,e,t){var i=[],n=!1,s=(0,xe.compact)((0,xe.flatten)((0,xe.mapValues)(r.modes,function(l){return l}))),o=(0,xe.reject)(s,function(l){return l[So]===ir.Lexer.NA}),a=DY(t);return e&&(0,xe.forEach)(o,function(l){var c=xY(l,a);if(c!==!1){var u=PY(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,xe.has)(l,"LINE_BREAKS")?l.LINE_BREAKS===!0&&(n=!0):(0,Hg.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found. + This Lexer has been defined to track line and column information, + But none of the Token Types can be identified as matching a line terminator. + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS + for details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Ve.performWarningRuntimeChecks=Wme;function zme(r){var e={},t=(0,xe.keys)(r);return(0,xe.forEach)(t,function(i){var n=r[i];if((0,xe.isArray)(n))e[i]=[];else throw Error("non exhaustive match")}),e}Ve.cloneEmptyGroups=zme;function wv(r){var e=r.PATTERN;if((0,xe.isRegExp)(e))return!1;if((0,xe.isFunction)(e))return!0;if((0,xe.has)(e,"exec"))return!0;if((0,xe.isString)(e))return!1;throw Error("non exhaustive match")}Ve.isCustomPattern=wv;function vY(r){return(0,xe.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Ve.isShortPattern=vY;Ve.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t Token Type +`)+(" Root cause: "+e.errMsg+`. +`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. +`+(" The problem is in the <"+r.name+`> Token Type +`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK";throw Error("non exhaustive match")}Ve.buildLineBreakIssueMessage=PY;function DY(r){var e=(0,xe.map)(r,function(t){return(0,xe.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function mv(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Ve.minOptimizationVal=256;var qI=[];function yv(r){return r255?255+~~(r/255):r}}});var Gg=w(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var _r=Gt();function Xme(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=Xme;function _me(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=_me;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function Zme(r){var e=kY(r);RY(e),NY(e),FY(e),(0,_r.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=Zme;function kY(r){for(var e=(0,_r.cloneArr)(r),t=r,i=!0;i;){t=(0,_r.compact)((0,_r.flatten)((0,_r.map)(t,function(s){return s.CATEGORIES})));var n=(0,_r.difference)(t,e);e=e.concat(n),(0,_r.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=kY;function RY(r){(0,_r.forEach)(r,function(e){LY(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),Bv(e)&&!(0,_r.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Bv(e)||(e.CATEGORIES=[]),TY(e)||(e.categoryMatches=[]),OY(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=RY;function FY(r){(0,_r.forEach)(r,function(e){e.categoryMatches=[],(0,_r.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=FY;function NY(r){(0,_r.forEach)(r,function(e){Qv([],e)})}Nt.assignCategoriesMapProp=NY;function Qv(r,e){(0,_r.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,_r.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,_r.contains)(i,t)||Qv(i,t)})}Nt.singleAssignCategoriesToksMap=Qv;function LY(r){return(0,_r.has)(r,"tokenTypeIdx")}Nt.hasShortKeyProperty=LY;function Bv(r){return(0,_r.has)(r,"CATEGORIES")}Nt.hasCategoriesProperty=Bv;function TY(r){return(0,_r.has)(r,"categoryMatches")}Nt.hasExtendingTokensTypesProperty=TY;function OY(r){return(0,_r.has)(r,"categoryMatchesMap")}Nt.hasExtendingTokensTypesMapProperty=OY;function $me(r){return(0,_r.has)(r,"tokenTypeIdx")}Nt.isTokenType=$me});var bv=w(JI=>{"use strict";Object.defineProperty(JI,"__esModule",{value:!0});JI.defaultLexerErrorProvider=void 0;JI.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return"Unable to pop Lexer Mode after encountering Token ->"+r.image+"<- The Mode Stack is empty"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return"unexpected character: ->"+r.charAt(e)+"<- at offset: "+e+","+(" skipped "+t+" characters.")}}});var gd=w(nc=>{"use strict";Object.defineProperty(nc,"__esModule",{value:!0});nc.Lexer=nc.LexerDefinitionErrorType=void 0;var zs=Cv(),nr=Gt(),eEe=Gg(),tEe=bv(),rEe=GI(),iEe;(function(r){r[r.MISSING_PATTERN=0]="MISSING_PATTERN",r[r.INVALID_PATTERN=1]="INVALID_PATTERN",r[r.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",r[r.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",r[r.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",r[r.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",r[r.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",r[r.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",r[r.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",r[r.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",r[r.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",r[r.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",r[r.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK"})(iEe=nc.LexerDefinitionErrorType||(nc.LexerDefinitionErrorType={}));var fd={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` +`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:tEe.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(fd);var nEe=function(){function r(e,t){var i=this;if(t===void 0&&(t=fd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. +a boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(fd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",function(){var s,o=!0;i.TRACE_INIT("Lexer Config handling",function(){if(i.config.lineTerminatorsPattern===fd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=zs.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===fd.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[zs.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[zs.DEFAULT_MODE]=zs.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT("performRuntimeChecks",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,zs.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT("performWarningRuntimeChecks",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,zs.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT("Mode: <"+g+"> processing",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT("validatePatterns",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,zs.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,eEe.augmentTokenTypes)(u);var f;i.TRACE_INIT("analyzeTokenTypes",function(){f=(0,zs.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`----------------------- +`);throw new Error(`Errors detected in definition of Lexer: +`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT("Choosing sub-methods implementations",function(){if(zs.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid config option: "'+i.config.positionTracking+'"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT("Failed Optimization Warnings",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error("Lexer Modes: < "+u.join(", ")+` > cannot be optimized. + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. + Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT("clearRegExpParserCache",function(){(0,rEe.clearRegExpParserCache)()}),i.TRACE_INIT("toFastProperties",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`----------------------- +`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: +`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,y,B,v,D,L=e,H=L.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),Z=[],A=this.trackStartLines?1:void 0,ae=this.trackStartLines?1:void 0,ge=(0,zs.cloneEmptyGroups)(this.emptyGroups),re=this.trackStartLines,O=this.config.lineTerminatorsPattern,F=0,ue=[],he=[],ke=[],Fe=[];Object.freeze(Fe);var Ne=void 0;function oe(){return ue}function le(pr){var Ei=(0,zs.charCodeToOptimizedIndex)(pr),_n=he[Ei];return _n===void 0?Fe:_n}var we=function(pr){if(ke.length===1&&pr.tokenType.PUSH_MODE===void 0){var Ei=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(pr);Z.push({offset:pr.startOffset,line:pr.startLine!==void 0?pr.startLine:void 0,column:pr.startColumn!==void 0?pr.startColumn:void 0,length:pr.image.length,message:Ei})}else{ke.pop();var _n=(0,nr.last)(ke);ue=i.patternIdxToConfig[_n],he=i.charCodeToPatternIdxToConfig[_n],F=ue.length;var oa=i.canModeBeOptimized[_n]&&i.config.safeMode===!1;he&&oa?Ne=le:Ne=oe}};function fe(pr){ke.push(pr),he=this.charCodeToPatternIdxToConfig[pr],ue=this.patternIdxToConfig[pr],F=ue.length,F=ue.length;var Ei=this.canModeBeOptimized[pr]&&this.config.safeMode===!1;he&&Ei?Ne=le:Ne=oe}fe.call(this,t);for(var Ae;jc.length){c=a,u=g,Ae=tt;break}}}break}}if(c!==null){if(f=c.length,h=Ae.group,h!==void 0&&(p=Ae.tokenTypeIdx,C=this.createTokenInstance(c,j,p,Ae.tokenType,A,ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,ae=this.computeNewColumn(ae,f),re===!0&&Ae.canLineTerminator===!0){var It=0,Or=void 0,ii=void 0;O.lastIndex=0;do Or=O.test(c),Or===!0&&(ii=O.lastIndex-1,It++);while(Or===!0);It!==0&&(A=A+It,ae=f-ii,this.updateTokenEndLineColumnLocation(C,h,ii,It,A,ae,f))}this.handleModes(Ae,we,fe,C)}else{for(var gi=j,hr=A,fi=ae,ni=!1;!ni&&j <"+e+">");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r.SKIPPED="This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.",r.NA=/NOT_APPLICABLE/,r}();nc.Lexer=nEe});var SA=w(Qi=>{"use strict";Object.defineProperty(Qi,"__esModule",{value:!0});Qi.tokenMatcher=Qi.createTokenInstance=Qi.EOF=Qi.createToken=Qi.hasTokenLabel=Qi.tokenName=Qi.tokenLabel=void 0;var Vs=Gt(),sEe=gd(),Sv=Gg();function oEe(r){return JY(r)?r.LABEL:r.name}Qi.tokenLabel=oEe;function aEe(r){return r.name}Qi.tokenName=aEe;function JY(r){return(0,Vs.isString)(r.LABEL)&&r.LABEL!==""}Qi.hasTokenLabel=JY;var AEe="parent",MY="categories",KY="label",UY="group",HY="push_mode",GY="pop_mode",YY="longer_alt",jY="line_breaks",qY="start_chars_hint";function WY(r){return lEe(r)}Qi.createToken=WY;function lEe(r){var e=r.pattern,t={};if(t.name=r.name,(0,Vs.isUndefined)(e)||(t.PATTERN=e),(0,Vs.has)(r,AEe))throw`The parent property is no longer supported. +See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,Vs.has)(r,MY)&&(t.CATEGORIES=r[MY]),(0,Sv.augmentTokenTypes)([t]),(0,Vs.has)(r,KY)&&(t.LABEL=r[KY]),(0,Vs.has)(r,UY)&&(t.GROUP=r[UY]),(0,Vs.has)(r,GY)&&(t.POP_MODE=r[GY]),(0,Vs.has)(r,HY)&&(t.PUSH_MODE=r[HY]),(0,Vs.has)(r,YY)&&(t.LONGER_ALT=r[YY]),(0,Vs.has)(r,jY)&&(t.LINE_BREAKS=r[jY]),(0,Vs.has)(r,qY)&&(t.START_CHARS_HINT=r[qY]),t}Qi.EOF=WY({name:"EOF",pattern:sEe.Lexer.NA});(0,Sv.augmentTokenTypes)([Qi.EOF]);function cEe(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Qi.createTokenInstance=cEe;function uEe(r,e){return(0,Sv.tokenStructuredMatcher)(r,e)}Qi.tokenMatcher=uEe});var dn=w(Wt=>{"use strict";var wa=Wt&&Wt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Wt,"__esModule",{value:!0});Wt.serializeProduction=Wt.serializeGrammar=Wt.Terminal=Wt.Alternation=Wt.RepetitionWithSeparator=Wt.Repetition=Wt.RepetitionMandatoryWithSeparator=Wt.RepetitionMandatory=Wt.Option=Wt.Alternative=Wt.Rule=Wt.NonTerminal=Wt.AbstractProduction=void 0;var Ar=Gt(),gEe=SA(),vo=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,"definition",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,Ar.forEach)(this.definition,function(t){t.accept(e)})},r}();Wt.AbstractProduction=vo;var zY=function(r){wa(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(vo);Wt.NonTerminal=zY;var VY=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText="",(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.Rule=VY;var XY=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.Alternative=XY;var _Y=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.Option=_Y;var ZY=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.RepetitionMandatory=ZY;var $Y=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.RepetitionMandatoryWithSeparator=$Y;var ej=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.Repetition=ej;var tj=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.RepetitionWithSeparator=tj;var rj=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(vo);Wt.Alternation=rj;var WI=function(){function r(e){this.idx=1,(0,Ar.assign)(this,(0,Ar.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();Wt.Terminal=WI;function fEe(r){return(0,Ar.map)(r,hd)}Wt.serializeGrammar=fEe;function hd(r){function e(s){return(0,Ar.map)(s,hd)}if(r instanceof zY){var t={type:"NonTerminal",name:r.nonTerminalName,idx:r.idx};return(0,Ar.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof XY)return{type:"Alternative",definition:e(r.definition)};if(r instanceof _Y)return{type:"Option",idx:r.idx,definition:e(r.definition)};if(r instanceof ZY)return{type:"RepetitionMandatory",idx:r.idx,definition:e(r.definition)};if(r instanceof $Y)return{type:"RepetitionMandatoryWithSeparator",idx:r.idx,separator:hd(new WI({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof tj)return{type:"RepetitionWithSeparator",idx:r.idx,separator:hd(new WI({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof ej)return{type:"Repetition",idx:r.idx,definition:e(r.definition)};if(r instanceof rj)return{type:"Alternation",idx:r.idx,definition:e(r.definition)};if(r instanceof WI){var i={type:"Terminal",name:r.terminalType.name,label:(0,gEe.tokenLabel)(r.terminalType),idx:r.idx};(0,Ar.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,Ar.isRegExp)(n)?n.source:n),i}else{if(r instanceof VY)return{type:"Rule",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error("non exhaustive match")}}}Wt.serializeProduction=hd});var VI=w(zI=>{"use strict";Object.defineProperty(zI,"__esModule",{value:!0});zI.RestWalker=void 0;var vv=Gt(),Cn=dn(),hEe=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,vv.forEach)(e.definition,function(n,s){var o=(0,vv.drop)(e.definition,s+1);if(n instanceof Cn.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof Cn.Terminal)i.walkTerminal(n,o,t);else if(n instanceof Cn.Alternative)i.walkFlat(n,o,t);else if(n instanceof Cn.Option)i.walkOption(n,o,t);else if(n instanceof Cn.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof Cn.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof Cn.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof Cn.Repetition)i.walkMany(n,o,t);else if(n instanceof Cn.Alternation)i.walkOr(n,o,t);else throw Error("non exhaustive match")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new Cn.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=ij(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new Cn.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=ij(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,vv.forEach)(e.definition,function(o){var a=new Cn.Alternative({definition:[o]});n.walk(a,s)})},r}();zI.RestWalker=hEe;function ij(r,e,t){var i=[new Cn.Option({definition:[new Cn.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var Yg=w(XI=>{"use strict";Object.defineProperty(XI,"__esModule",{value:!0});XI.GAstVisitor=void 0;var xo=dn(),pEe=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case xo.NonTerminal:return this.visitNonTerminal(t);case xo.Alternative:return this.visitAlternative(t);case xo.Option:return this.visitOption(t);case xo.RepetitionMandatory:return this.visitRepetitionMandatory(t);case xo.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case xo.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case xo.Repetition:return this.visitRepetition(t);case xo.Alternation:return this.visitAlternation(t);case xo.Terminal:return this.visitTerminal(t);case xo.Rule:return this.visitRule(t);default:throw Error("non exhaustive match")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();XI.GAstVisitor=pEe});var dd=w(Oi=>{"use strict";var dEe=Oi&&Oi.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Oi,"__esModule",{value:!0});Oi.collectMethods=Oi.DslMethodsCollectorVisitor=Oi.getProductionDslName=Oi.isBranchingProd=Oi.isOptionalProd=Oi.isSequenceProd=void 0;var pd=Gt(),Qr=dn(),CEe=Yg();function mEe(r){return r instanceof Qr.Alternative||r instanceof Qr.Option||r instanceof Qr.Repetition||r instanceof Qr.RepetitionMandatory||r instanceof Qr.RepetitionMandatoryWithSeparator||r instanceof Qr.RepetitionWithSeparator||r instanceof Qr.Terminal||r instanceof Qr.Rule}Oi.isSequenceProd=mEe;function xv(r,e){e===void 0&&(e=[]);var t=r instanceof Qr.Option||r instanceof Qr.Repetition||r instanceof Qr.RepetitionWithSeparator;return t?!0:r instanceof Qr.Alternation?(0,pd.some)(r.definition,function(i){return xv(i,e)}):r instanceof Qr.NonTerminal&&(0,pd.contains)(e,r)?!1:r instanceof Qr.AbstractProduction?(r instanceof Qr.NonTerminal&&e.push(r),(0,pd.every)(r.definition,function(i){return xv(i,e)})):!1}Oi.isOptionalProd=xv;function EEe(r){return r instanceof Qr.Alternation}Oi.isBranchingProd=EEe;function IEe(r){if(r instanceof Qr.NonTerminal)return"SUBRULE";if(r instanceof Qr.Option)return"OPTION";if(r instanceof Qr.Alternation)return"OR";if(r instanceof Qr.RepetitionMandatory)return"AT_LEAST_ONE";if(r instanceof Qr.RepetitionMandatoryWithSeparator)return"AT_LEAST_ONE_SEP";if(r instanceof Qr.RepetitionWithSeparator)return"MANY_SEP";if(r instanceof Qr.Repetition)return"MANY";if(r instanceof Qr.Terminal)return"CONSUME";throw Error("non exhaustive match")}Oi.getProductionDslName=IEe;var nj=function(r){dEe(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator="-",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+"Terminal";(0,pd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+"Terminal";(0,pd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(CEe.GAstVisitor);Oi.DslMethodsCollectorVisitor=nj;var _I=new nj;function yEe(r){_I.reset(),r.accept(_I);var e=_I.dslMethods;return _I.reset(),e}Oi.collectMethods=yEe});var Dv=w(Po=>{"use strict";Object.defineProperty(Po,"__esModule",{value:!0});Po.firstForTerminal=Po.firstForBranching=Po.firstForSequence=Po.first=void 0;var ZI=Gt(),sj=dn(),Pv=dd();function $I(r){if(r instanceof sj.NonTerminal)return $I(r.referencedRule);if(r instanceof sj.Terminal)return Aj(r);if((0,Pv.isSequenceProd)(r))return oj(r);if((0,Pv.isBranchingProd)(r))return aj(r);throw Error("non exhaustive match")}Po.first=$I;function oj(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,Pv.isOptionalProd)(s),e=e.concat($I(s)),i=i+1,n=t.length>i;return(0,ZI.uniq)(e)}Po.firstForSequence=oj;function aj(r){var e=(0,ZI.map)(r.definition,function(t){return $I(t)});return(0,ZI.uniq)((0,ZI.flatten)(e))}Po.firstForBranching=aj;function Aj(r){return[r.terminalType]}Po.firstForTerminal=Aj});var kv=w(ey=>{"use strict";Object.defineProperty(ey,"__esModule",{value:!0});ey.IN=void 0;ey.IN="_~IN~_"});var fj=w(As=>{"use strict";var wEe=As&&As.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(As,"__esModule",{value:!0});As.buildInProdFollowPrefix=As.buildBetweenProdsFollowPrefix=As.computeAllProdsFollows=As.ResyncFollowsWalker=void 0;var BEe=VI(),QEe=Dv(),lj=Gt(),cj=kv(),bEe=dn(),uj=function(r){wEe(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=gj(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new bEe.Alternative({definition:o}),l=(0,QEe.first)(a);this.follows[s]=l},e}(BEe.RestWalker);As.ResyncFollowsWalker=uj;function SEe(r){var e={};return(0,lj.forEach)(r,function(t){var i=new uj(t).startWalking();(0,lj.assign)(e,i)}),e}As.computeAllProdsFollows=SEe;function gj(r,e){return r.name+e+cj.IN}As.buildBetweenProdsFollowPrefix=gj;function vEe(r){var e=r.terminalType.name;return e+r.idx+cj.IN}As.buildInProdFollowPrefix=vEe});var Cd=w(Ba=>{"use strict";Object.defineProperty(Ba,"__esModule",{value:!0});Ba.defaultGrammarValidatorErrorProvider=Ba.defaultGrammarResolverErrorProvider=Ba.defaultParserErrorProvider=void 0;var jg=SA(),xEe=Gt(),Xs=Gt(),Rv=dn(),hj=dd();Ba.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,jg.hasTokenLabel)(e),o=s?"--> "+(0,jg.tokenLabel)(e)+" <--":"token of type --> "+e.name+" <--",a="Expecting "+o+" but found --> '"+t.image+"' <--";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return"Redundant input, expecting EOF but found: "+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o="Expecting: ",a=(0,Xs.first)(t).image,l=` +but found: '`+a+"'";if(n)return o+n+l;var c=(0,Xs.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,Xs.map)(c,function(h){return"["+(0,Xs.map)(h,function(p){return(0,jg.tokenLabel)(p)}).join(", ")+"]"}),g=(0,Xs.map)(u,function(h,p){return" "+(p+1)+". "+h}),f=`one of these possible Token sequences: +`+g.join(` +`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s="Expecting: ",o=(0,Xs.first)(t).image,a=` +but found: '`+o+"'";if(i)return s+i+a;var l=(0,Xs.map)(e,function(u){return"["+(0,Xs.map)(u,function(g){return(0,jg.tokenLabel)(g)}).join(",")+"]"}),c=`expecting at least one iteration which starts with one of these possible Token sequences:: + `+("<"+l.join(" ,")+">");return s+c+a}};Object.freeze(Ba.defaultParserErrorProvider);Ba.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t="Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- +inside top level rule: ->`+r.name+"<-";return t}};Ba.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Rv.Terminal?u.terminalType.name:u instanceof Rv.NonTerminal?u.nonTerminalName:""}var i=r.name,n=(0,Xs.first)(e),s=n.idx,o=(0,hj.getProductionDslName)(n),a=t(n),l=s>0,c="->"+o+(l?s:"")+"<- "+(a?"with argument: ->"+a+"<-":"")+` + appears more than once (`+e.length+" times) in the top level rule: ->"+i+`<-. + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES + `;return c=c.replace(/[ \t]+/g," "),c=c.replace(/\s\s+/g,` +`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar. +`+("The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <"+r.name+`>. +`)+`To resolve this make sure each Terminal and Non-Terminal names are unique +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter +and Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,Xs.map)(r.prefixPath,function(n){return(0,jg.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous alternatives: <"+r.ambiguityIndices.join(" ,")+`> due to common lookahead prefix +`+("in inside <"+r.topLevelRule.name+`> Rule, +`)+("<"+e+`> may appears as a prefix path in all these alternatives. +`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX +For Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,Xs.map)(r.prefixPath,function(n){return(0,jg.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous Alternatives Detected: <"+r.ambiguityIndices.join(" ,")+"> in "+(" inside <"+r.topLevelRule.name+`> Rule, +`)+("<"+e+`> may appears as a prefix path in all these alternatives. +`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,hj.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t="The repetition <"+e+"> within Rule <"+r.topLevelRule.name+`> can never consume any tokens. +This could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return"deprecated"},buildEmptyAlternationError:function(r){var e="Ambiguous empty alternative: <"+(r.emptyChoiceIdx+1)+">"+(" in inside <"+r.topLevelRule.name+`> Rule. +`)+"Only the last alternative may be an empty alternative.";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives: +`+(" inside <"+r.topLevelRule.name+`> Rule. + has `+(r.alternation.definition.length+1)+" alternatives.");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=xEe.map(r.leftRecursionPath,function(s){return s.name}),i=e+" --> "+t.concat([e]).join(" --> "),n=`Left Recursion found in grammar. +`+("rule: <"+e+`> can be invoked from itself (directly or indirectly) +`)+(`without consuming any Tokens. The grammar path that causes this is: + `+i+` +`)+` To fix this refactor your grammar to remove the left recursion. +see: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return"deprecated"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Rv.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t="Duplicate definition, rule: ->"+e+"<- is already defined in the grammar: ->"+r.grammarName+"<-";return t}}});var Cj=w(vA=>{"use strict";var PEe=vA&&vA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(vA,"__esModule",{value:!0});vA.GastRefResolverVisitor=vA.resolveGrammar=void 0;var DEe=Hn(),pj=Gt(),kEe=Yg();function REe(r,e){var t=new dj(r,e);return t.resolveRefs(),t.errors}vA.resolveGrammar=REe;var dj=function(r){PEe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,pj.forEach)((0,pj.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:DEe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(kEe.GAstVisitor);vA.GastRefResolverVisitor=dj});var Ed=w(Nr=>{"use strict";var sc=Nr&&Nr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Nr,"__esModule",{value:!0});Nr.nextPossibleTokensAfter=Nr.possiblePathsFrom=Nr.NextTerminalAfterAtLeastOneSepWalker=Nr.NextTerminalAfterAtLeastOneWalker=Nr.NextTerminalAfterManySepWalker=Nr.NextTerminalAfterManyWalker=Nr.AbstractNextTerminalAfterProductionWalker=Nr.NextAfterTokenWalker=Nr.AbstractNextPossibleTokensWalker=void 0;var mj=VI(),Kt=Gt(),FEe=Dv(),kt=dn(),Ej=function(r){sc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName="",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=(0,Kt.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Kt.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Kt.isEmpty)(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(mj.RestWalker);Nr.AbstractNextPossibleTokensWalker=Ej;var NEe=function(r){sc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName="",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new kt.Alternative({definition:s});this.possibleTokTypes=(0,FEe.first)(o),this.found=!0}},e}(Ej);Nr.NextAfterTokenWalker=NEe;var md=function(r){sc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(mj.RestWalker);Nr.AbstractNextTerminalAfterProductionWalker=md;var LEe=function(r){sc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(md);Nr.NextTerminalAfterManyWalker=LEe;var TEe=function(r){sc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(md);Nr.NextTerminalAfterManySepWalker=TEe;var OEe=function(r){sc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(md);Nr.NextTerminalAfterAtLeastOneWalker=OEe;var MEe=function(r){sc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(md);Nr.NextTerminalAfterAtLeastOneSepWalker=MEe;function Ij(r,e,t){t===void 0&&(t=[]),t=(0,Kt.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Kt.drop)(r,n+1))}function o(c){var u=Ij(s(c),e,t);return i.concat(u)}for(;t.length=0;ge--){var re=B.definition[ge],O={idx:p,def:re.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(O),g.push(o)}else if(B instanceof kt.Alternative)g.push({idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y});else if(B instanceof kt.Rule)g.push(UEe(B,p,C,y));else throw Error("non exhaustive match")}}return u}Nr.nextPossibleTokensAfter=KEe;function UEe(r,e,t,i){var n=(0,Kt.cloneArr)(t);n.push(r.name);var s=(0,Kt.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var Id=w(_t=>{"use strict";var Bj=_t&&_t.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(_t,"__esModule",{value:!0});_t.areTokenCategoriesNotUsed=_t.isStrictPrefixOfPath=_t.containsPath=_t.getLookaheadPathsForOptionalProd=_t.getLookaheadPathsForOr=_t.lookAheadSequenceFromAlternatives=_t.buildSingleAlternativeLookaheadFunction=_t.buildAlternativesLookAheadFunc=_t.buildLookaheadFuncForOptionalProd=_t.buildLookaheadFuncForOr=_t.getProdType=_t.PROD_TYPE=void 0;var sr=Gt(),yj=Ed(),HEe=VI(),ty=Gg(),xA=dn(),GEe=Yg(),oi;(function(r){r[r.OPTION=0]="OPTION",r[r.REPETITION=1]="REPETITION",r[r.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",r[r.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",r[r.ALTERNATION=5]="ALTERNATION"})(oi=_t.PROD_TYPE||(_t.PROD_TYPE={}));function YEe(r){if(r instanceof xA.Option)return oi.OPTION;if(r instanceof xA.Repetition)return oi.REPETITION;if(r instanceof xA.RepetitionMandatory)return oi.REPETITION_MANDATORY;if(r instanceof xA.RepetitionMandatoryWithSeparator)return oi.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof xA.RepetitionWithSeparator)return oi.REPETITION_WITH_SEPARATOR;if(r instanceof xA.Alternation)return oi.ALTERNATION;throw Error("non exhaustive match")}_t.getProdType=YEe;function jEe(r,e,t,i,n,s){var o=bj(r,e,t),a=Lv(o)?ty.tokenStructuredMatcherNoCategories:ty.tokenStructuredMatcher;return s(o,i,a,n)}_t.buildLookaheadFuncForOr=jEe;function qEe(r,e,t,i,n,s){var o=Sj(r,e,n,t),a=Lv(o)?ty.tokenStructuredMatcherNoCategories:ty.tokenStructuredMatcher;return s(o[0],a,i)}_t.buildLookaheadFuncForOptionalProd=qEe;function JEe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u{"use strict";var Tv=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,"__esModule",{value:!0});zt.checkPrefixAlternativesAmbiguities=zt.validateSomeNonEmptyLookaheadPath=zt.validateTooManyAlts=zt.RepetionCollector=zt.validateAmbiguousAlternationAlternatives=zt.validateEmptyOrAlternative=zt.getFirstNoneTerminal=zt.validateNoLeftRecursion=zt.validateRuleIsOverridden=zt.validateRuleDoesNotAlreadyExist=zt.OccurrenceValidationCollector=zt.identifyProductionForDuplicates=zt.validateGrammar=void 0;var er=Gt(),br=Gt(),Do=Hn(),Ov=dd(),qg=Id(),_Ee=Ed(),_s=dn(),Mv=Yg();function ZEe(r,e,t,i,n){var s=er.map(r,function(h){return $Ee(h,i)}),o=er.map(r,function(h){return Kv(h,h,i)}),a=[],l=[],c=[];(0,br.every)(o,br.isEmpty)&&(a=(0,br.map)(r,function(h){return Rj(h,i)}),l=(0,br.map)(r,function(h){return Fj(h,e,i)}),c=Tj(r,e,i));var u=rIe(r,t,i),g=(0,br.map)(r,function(h){return Lj(h,i)}),f=(0,br.map)(r,function(h){return kj(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}zt.validateGrammar=ZEe;function $Ee(r,e){var t=new Dj;r.accept(t);var i=t.allProductions,n=er.groupBy(i,xj),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,Ov.getProductionDslName)(l),g={message:c,type:Do.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=Pj(l);return f&&(g.parameter=f),g});return o}function xj(r){return(0,Ov.getProductionDslName)(r)+"_#_"+r.idx+"_#_"+Pj(r)}zt.identifyProductionForDuplicates=xj;function Pj(r){return r instanceof _s.Terminal?r.terminalType.name:r instanceof _s.NonTerminal?r.nonTerminalName:""}var Dj=function(r){Tv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}(Mv.GAstVisitor);zt.OccurrenceValidationCollector=Dj;function kj(r,e,t,i){var n=[],s=(0,br.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:Do.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}zt.validateRuleDoesNotAlreadyExist=kj;function eIe(r,e,t){var i=[],n;return er.contains(e,r)||(n="Invalid rule override, rule: ->"+r+"<- cannot be overridden in the grammar: ->"+t+"<-as it is not defined in any of the super grammars ",i.push({message:n,type:Do.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}zt.validateRuleIsOverridden=eIe;function Kv(r,e,t,i){i===void 0&&(i=[]);var n=[],s=yd(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:Do.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),Kv(r,u,t,g)});return n.concat(er.flatten(c))}zt.validateNoLeftRecursion=Kv;function yd(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof _s.NonTerminal)e.push(t.referencedRule);else if(t instanceof _s.Alternative||t instanceof _s.Option||t instanceof _s.RepetitionMandatory||t instanceof _s.RepetitionMandatoryWithSeparator||t instanceof _s.RepetitionWithSeparator||t instanceof _s.Repetition)e=e.concat(yd(t.definition));else if(t instanceof _s.Alternation)e=er.flatten(er.map(t.definition,function(o){return yd(o.definition)}));else if(!(t instanceof _s.Terminal))throw Error("non exhaustive match");var i=(0,Ov.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(yd(s))}else return e}zt.getFirstNoneTerminal=yd;var Uv=function(r){Tv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}(Mv.GAstVisitor);function Rj(r,e){var t=new Uv;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,_Ee.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:Do.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}zt.validateEmptyOrAlternative=Rj;function Fj(r,e,t){var i=new Uv;r.accept(i);var n=i.alternations;n=(0,br.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,qg.getLookaheadPathsForOr)(l,r,c,a),g=tIe(u,a,r,t),f=Oj(u,a,r,t);return o.concat(g,f)},[]);return s}zt.validateAmbiguousAlternationAlternatives=Fj;var Nj=function(r){Tv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}(Mv.GAstVisitor);zt.RepetionCollector=Nj;function Lj(r,e){var t=new Uv;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:Do.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}zt.validateTooManyAlts=Lj;function Tj(r,e,t){var i=[];return(0,br.forEach)(r,function(n){var s=new Nj;n.accept(s);var o=s.allProductions;(0,br.forEach)(o,function(a){var l=(0,qg.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,qg.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,br.isEmpty)((0,br.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:Do.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}zt.validateSomeNonEmptyLookaheadPath=Tj;function tIe(r,e,t,i){var n=[],s=(0,br.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,br.forEach)(l,function(u){var g=[c];(0,br.forEach)(r,function(f,h){c!==h&&(0,qg.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,qg.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,br.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:Do.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function Oj(r,e,t,i){var n=[],s=(0,br.reduce)(r,function(o,a,l){var c=(0,br.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,br.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,br.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx{"use strict";Object.defineProperty(Jg,"__esModule",{value:!0});Jg.validateGrammar=Jg.resolveGrammar=void 0;var Gv=Gt(),iIe=Cj(),nIe=Hv(),Mj=Cd();function sIe(r){r=(0,Gv.defaults)(r,{errMsgProvider:Mj.defaultGrammarResolverErrorProvider});var e={};return(0,Gv.forEach)(r.rules,function(t){e[t.name]=t}),(0,iIe.resolveGrammar)(e,r.errMsgProvider)}Jg.resolveGrammar=sIe;function oIe(r){return r=(0,Gv.defaults)(r,{errMsgProvider:Mj.defaultGrammarValidatorErrorProvider}),(0,nIe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}Jg.validateGrammar=oIe});var Wg=w(mn=>{"use strict";var wd=mn&&mn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(mn,"__esModule",{value:!0});mn.EarlyExitException=mn.NotAllInputParsedException=mn.NoViableAltException=mn.MismatchedTokenException=mn.isRecognitionException=void 0;var aIe=Gt(),Uj="MismatchedTokenException",Hj="NoViableAltException",Gj="EarlyExitException",Yj="NotAllInputParsedException",jj=[Uj,Hj,Gj,Yj];Object.freeze(jj);function AIe(r){return(0,aIe.contains)(jj,r.name)}mn.isRecognitionException=AIe;var ry=function(r){wd(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),lIe=function(r){wd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Uj,s}return e}(ry);mn.MismatchedTokenException=lIe;var cIe=function(r){wd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Hj,s}return e}(ry);mn.NoViableAltException=cIe;var uIe=function(r){wd(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=Yj,n}return e}(ry);mn.NotAllInputParsedException=uIe;var gIe=function(r){wd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Gj,s}return e}(ry);mn.EarlyExitException=gIe});var jv=w(Mi=>{"use strict";Object.defineProperty(Mi,"__esModule",{value:!0});Mi.attemptInRepetitionRecovery=Mi.Recoverable=Mi.InRuleRecoveryException=Mi.IN_RULE_RECOVERY_EXCEPTION=Mi.EOF_FOLLOW_KEY=void 0;var iy=SA(),ls=Gt(),fIe=Wg(),hIe=kv(),pIe=Hn();Mi.EOF_FOLLOW_KEY={};Mi.IN_RULE_RECOVERY_EXCEPTION="InRuleRecoveryException";function Yv(r){this.name=Mi.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Mi.InRuleRecoveryException=Yv;Yv.prototype=Error.prototype;var dIe=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,ls.has)(e,"recoveryEnabled")?e.recoveryEnabled:pIe.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=qj)},r.prototype.getTokenToInsert=function(e){var t=(0,iy.createTokenInstance)(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new fIe.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,ls.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new Yv("sad sad panda")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,ls.isEmpty)(t))return!1;var n=this.LA(1),s=(0,ls.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,ls.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,ls.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Mi.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,ls.map)(t,function(n,s){return s===0?Mi.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,ls.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,ls.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Mi.EOF_FOLLOW_KEY)return[iy.EOF];var t=e.ruleName+e.idxInCallingRule+hIe.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,iy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,ls.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,ls.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,ls.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Mi.Recoverable=dIe;function qj(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=iy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Mi.attemptInRepetitionRecovery=qj});var ny=w(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0});qt.getKeyForAutomaticLookahead=qt.AT_LEAST_ONE_SEP_IDX=qt.MANY_SEP_IDX=qt.AT_LEAST_ONE_IDX=qt.MANY_IDX=qt.OPTION_IDX=qt.OR_IDX=qt.BITS_FOR_ALT_IDX=qt.BITS_FOR_RULE_IDX=qt.BITS_FOR_OCCURRENCE_IDX=qt.BITS_FOR_METHOD_TYPE=void 0;qt.BITS_FOR_METHOD_TYPE=4;qt.BITS_FOR_OCCURRENCE_IDX=8;qt.BITS_FOR_RULE_IDX=12;qt.BITS_FOR_ALT_IDX=8;qt.OR_IDX=1<{"use strict";Object.defineProperty(sy,"__esModule",{value:!0});sy.LooksAhead=void 0;var Qa=Id(),Zs=Gt(),Jj=Hn(),ba=ny(),oc=dd(),mIe=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,Zs.has)(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:Jj.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,Zs.has)(e,"maxLookahead")?e.maxLookahead:Jj.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,Zs.isES2015MapSupported)()?new Map:[],(0,Zs.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,Zs.forEach)(e,function(i){t.TRACE_INIT(i.name+" Rule Lookahead",function(){var n=(0,oc.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,Zs.forEach)(s,function(g){var f=g.idx===0?"":g.idx;t.TRACE_INIT(""+(0,oc.getProductionDslName)(g)+f,function(){var h=(0,Qa.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,ba.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],ba.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,Zs.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,ba.MANY_IDX,Qa.PROD_TYPE.REPETITION,g.maxLookahead,(0,oc.getProductionDslName)(g))}),(0,Zs.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,ba.OPTION_IDX,Qa.PROD_TYPE.OPTION,g.maxLookahead,(0,oc.getProductionDslName)(g))}),(0,Zs.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,ba.AT_LEAST_ONE_IDX,Qa.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,oc.getProductionDslName)(g))}),(0,Zs.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,ba.AT_LEAST_ONE_SEP_IDX,Qa.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,oc.getProductionDslName)(g))}),(0,Zs.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,ba.MANY_SEP_IDX,Qa.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,oc.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(""+o+(t===0?"":t),function(){var l=(0,Qa.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,ba.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,Qa.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,Qa.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,ba.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();sy.LooksAhead=mIe});var zj=w(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.addNoneTerminalToCst=ko.addTerminalToCst=ko.setNodeLocationFull=ko.setNodeLocationOnlyOffset=void 0;function EIe(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset{"use strict";Object.defineProperty(PA,"__esModule",{value:!0});PA.defineNameProp=PA.functionName=PA.classNameFromInstance=void 0;var BIe=Gt();function QIe(r){return Xj(r.constructor)}PA.classNameFromInstance=QIe;var Vj="name";function Xj(r){var e=r.name;return e||"anonymous"}PA.functionName=Xj;function bIe(r,e){var t=Object.getOwnPropertyDescriptor(r,Vj);return(0,BIe.isUndefined)(t)||t.configurable?(Object.defineProperty(r,Vj,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}PA.defineNameProp=bIe});var tq=w(bi=>{"use strict";Object.defineProperty(bi,"__esModule",{value:!0});bi.validateRedundantMethods=bi.validateMissingCstMethods=bi.validateVisitor=bi.CstVisitorDefinitionError=bi.createBaseVisitorConstructorWithDefaults=bi.createBaseSemanticVisitorConstructor=bi.defaultVisit=void 0;var cs=Gt(),Bd=qv();function _j(r,e){for(var t=(0,cs.keys)(r),i=t.length,n=0;n: + `+(""+s.join(` + +`).replace(/\n/g,` + `)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}bi.createBaseSemanticVisitorConstructor=SIe;function vIe(r,e,t){var i=function(){};(0,Bd.defineNameProp)(i,r+"BaseSemanticsWithDefaults");var n=Object.create(t.prototype);return(0,cs.forEach)(e,function(s){n[s]=_j}),i.prototype=n,i.prototype.constructor=i,i}bi.createBaseVisitorConstructorWithDefaults=vIe;var Jv;(function(r){r[r.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",r[r.MISSING_METHOD=1]="MISSING_METHOD"})(Jv=bi.CstVisitorDefinitionError||(bi.CstVisitorDefinitionError={}));function Zj(r,e){var t=$j(r,e),i=eq(r,e);return t.concat(i)}bi.validateVisitor=Zj;function $j(r,e){var t=(0,cs.map)(e,function(i){if(!(0,cs.isFunction)(r[i]))return{msg:"Missing visitor method: <"+i+"> on "+(0,Bd.functionName)(r.constructor)+" CST Visitor.",type:Jv.MISSING_METHOD,methodName:i}});return(0,cs.compact)(t)}bi.validateMissingCstMethods=$j;var xIe=["constructor","visit","validateVisitor"];function eq(r,e){var t=[];for(var i in r)(0,cs.isFunction)(r[i])&&!(0,cs.contains)(xIe,i)&&!(0,cs.contains)(e,i)&&t.push({msg:"Redundant visitor method: <"+i+"> on "+(0,Bd.functionName)(r.constructor)+` CST Visitor +There is no Grammar Rule corresponding to this method's name. +`,type:Jv.REDUNDANT_METHOD,methodName:i});return t}bi.validateRedundantMethods=eq});var iq=w(oy=>{"use strict";Object.defineProperty(oy,"__esModule",{value:!0});oy.TreeBuilder=void 0;var zg=zj(),Zr=Gt(),rq=tq(),PIe=Hn(),DIe=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,Zr.has)(e,"nodeLocationTracking")?e.nodeLocationTracking:PIe.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=Zr.NOOP,this.cstFinallyStateUpdate=Zr.NOOP,this.cstPostTerminal=Zr.NOOP,this.cstPostNonTerminal=Zr.NOOP,this.cstPostRule=Zr.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=zg.setNodeLocationFull,this.setNodeLocationFromNode=zg.setNodeLocationFull,this.cstPostRule=Zr.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=Zr.NOOP,this.setNodeLocationFromNode=Zr.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=zg.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=zg.setNodeLocationOnlyOffset,this.cstPostRule=Zr.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=Zr.NOOP,this.setNodeLocationFromNode=Zr.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=Zr.NOOP,this.setNodeLocationFromNode=Zr.NOOP,this.cstPostRule=Zr.NOOP,this.setInitialNodeLocation=Zr.NOOP;else throw Error('Invalid config option: "'+e.nodeLocationTracking+'"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,zg.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,zg.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,Zr.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,rq.createBaseSemanticVisitorConstructor)(this.className,(0,Zr.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,Zr.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,rq.createBaseVisitorConstructorWithDefaults)(this.className,(0,Zr.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();oy.TreeBuilder=DIe});var sq=w(ay=>{"use strict";Object.defineProperty(ay,"__esModule",{value:!0});ay.LexerAdapter=void 0;var nq=Hn(),kIe=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,"input",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):nq.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?nq.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();ay.LexerAdapter=kIe});var aq=w(Ay=>{"use strict";Object.defineProperty(Ay,"__esModule",{value:!0});Ay.RecognizerApi=void 0;var oq=Gt(),RIe=Wg(),Wv=Hn(),FIe=Cd(),NIe=Hv(),LIe=dn(),TIe=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Wv.DEFAULT_RULE_CONFIG),(0,oq.contains)(this.definedRulesNames,e)){var n=FIe.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Wv.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Wv.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,NIe.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,RIe.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,LIe.serializeGrammar)((0,oq.values)(this.gastProductionsCache))},r}();Ay.RecognizerApi=TIe});var uq=w(cy=>{"use strict";Object.defineProperty(cy,"__esModule",{value:!0});cy.RecognizerEngine=void 0;var Pr=Gt(),Gn=ny(),ly=Wg(),Aq=Id(),Vg=Ed(),lq=Hn(),OIe=jv(),cq=SA(),Qd=Gg(),MIe=qv(),KIe=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,MIe.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Qd.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,Pr.has)(t,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 + For Further details.`);if((0,Pr.isArray)(e)){if((0,Pr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty. + Note that the first argument for the parser constructor + is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 + For Further details.`)}if((0,Pr.isArray)(e))this.tokensMap=(0,Pr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,Pr.has)(e,"modes")&&(0,Pr.every)((0,Pr.flatten)((0,Pr.values)(e.modes)),Qd.isTokenType)){var i=(0,Pr.flatten)((0,Pr.values)(e.modes)),n=(0,Pr.uniq)(i);this.tokensMap=(0,Pr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,Pr.isObject)(e))this.tokensMap=(0,Pr.cloneObj)(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=cq.EOF;var s=(0,Pr.every)((0,Pr.values)(e),function(o){return(0,Pr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?Qd.tokenStructuredMatcherNoCategories:Qd.tokenStructuredMatcher,(0,Qd.augmentTokenTypes)((0,Pr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error("Grammar rule <"+e+`> may not be defined after the 'performSelfAnalysis' method has been called' +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,Pr.has)(i,"resyncEnabled")?i.resyncEnabled:lq.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,Pr.has)(i,"recoveryValueFunc")?i.recoveryValueFunc:lq.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(Gn.OR_IDX,t),n=(0,Pr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new ly.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,ly.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new ly.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name==="MismatchedTokenException"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===OIe.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,Pr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),cq.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();cy.RecognizerEngine=KIe});var fq=w(uy=>{"use strict";Object.defineProperty(uy,"__esModule",{value:!0});uy.ErrorHandler=void 0;var zv=Wg(),Vv=Gt(),gq=Id(),UIe=Hn(),HIe=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,Vv.has)(e,"errorMessageProvider")?e.errorMessageProvider:UIe.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,zv.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,Vv.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")},Object.defineProperty(r.prototype,"errors",{get:function(){return(0,Vv.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,gq.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new zv.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,gq.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new zv.NoViableAltException(c,this.LA(1),l))},r}();uy.ErrorHandler=HIe});var dq=w(gy=>{"use strict";Object.defineProperty(gy,"__esModule",{value:!0});gy.ContentAssist=void 0;var hq=Ed(),pq=Gt(),GIe=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,pq.isUndefined)(i))throw Error("Rule ->"+e+"<- does not exist in this grammar.");return(0,hq.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,pq.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new hq.NextAfterTokenWalker(n,e).startWalking();return s},r}();gy.ContentAssist=GIe});var Qq=w(py=>{"use strict";Object.defineProperty(py,"__esModule",{value:!0});py.GastRecorder=void 0;var En=Gt(),Ro=dn(),YIe=gd(),Iq=Gg(),yq=SA(),jIe=Hn(),qIe=ny(),hy={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(hy);var Cq=!0,mq=Math.pow(2,qIe.BITS_FOR_OCCURRENCE_IDX)-1,wq=(0,yq.createToken)({name:"RECORDING_PHASE_TOKEN",pattern:YIe.Lexer.NA});(0,Iq.augmentTokenTypes)([wq]);var Bq=(0,yq.createTokenInstance)(wq,`This IToken indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(Bq);var JIe={name:`This CSTNode indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},WIe=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",function(){for(var t=function(n){var s=n>0?n:"";e["CONSUME"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e["SUBRULE"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e["OPTION"+s]=function(o){return this.optionInternalRecord(o,n)},e["OR"+s]=function(o){return this.orInternalRecord(o,n)},e["MANY"+s]=function(o){this.manyInternalRecord(n,o)},e["MANY_SEP"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e["AT_LEAST_ONE"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e["AT_LEAST_ONE_SEP"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",function(){for(var t=0;t<10;t++){var i=t>0?t:"";delete e["CONSUME"+i],delete e["SUBRULE"+i],delete e["OPTION"+i],delete e["OR"+i],delete e["MANY"+i],delete e["MANY_SEP"+i],delete e["AT_LEAST_ONE"+i],delete e["AT_LEAST_ONE_SEP"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return jIe.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Ro.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` + This error was thrown during the "grammar recording phase" For more info see: + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return bd.call(this,Ro.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){bd.call(this,Ro.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){bd.call(this,Ro.RepetitionMandatoryWithSeparator,t,e,Cq)},r.prototype.manyInternalRecord=function(e,t){bd.call(this,Ro.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){bd.call(this,Ro.RepetitionWithSeparator,t,e,Cq)},r.prototype.orInternalRecord=function(e,t){return zIe.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(fy(t),!e||(0,En.has)(e,"ruleName")===!1){var n=new Error(" argument is invalid"+(" expecting a Parser method reference but got: <"+JSON.stringify(e)+">")+(` + inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,En.peek)(this.recordingProdStack),o=e.ruleName,a=new Ro.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?JIe:hy},r.prototype.consumeInternalRecord=function(e,t,i){if(fy(t),!(0,Iq.hasShortKeyProperty)(e)){var n=new Error(" argument is invalid"+(" expecting a TokenType reference but got: <"+JSON.stringify(e)+">")+(` + inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,En.peek)(this.recordingProdStack),o=new Ro.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),Bq},r}();py.GastRecorder=WIe;function bd(r,e,t,i){i===void 0&&(i=!1),fy(t);var n=(0,En.peek)(this.recordingProdStack),s=(0,En.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,En.has)(e,"MAX_LOOKAHEAD")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),hy}function zIe(r,e){var t=this;fy(e);var i=(0,En.peek)(this.recordingProdStack),n=(0,En.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Ro.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,En.has)(r,"MAX_LOOKAHEAD")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,En.some)(s,function(l){return(0,En.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,En.forEach)(s,function(l){var c=new Ro.Alternative({definition:[]});o.definition.push(c),(0,En.has)(l,"IGNORE_AMBIGUITIES")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,En.has)(l,"GATE")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),hy}function Eq(r){return r===0?"":""+r}function fy(r){if(r<0||r>mq){var e=new Error("Invalid DSL Method idx value: <"+r+`> + `+("Idx value must be a none negative value smaller than "+(mq+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var Sq=w(dy=>{"use strict";Object.defineProperty(dy,"__esModule",{value:!0});dy.PerformanceTracer=void 0;var bq=Gt(),VIe=Hn(),XIe=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,bq.has)(e,"traceInitPerf")){var t=e.traceInitPerf,i=typeof t=="number";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=VIe.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <"+e+">");var n=(0,bq.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r}();dy.PerformanceTracer=XIe});var vq=w(Cy=>{"use strict";Object.defineProperty(Cy,"__esModule",{value:!0});Cy.applyMixins=void 0;function _Ie(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!=="constructor"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}Cy.applyMixins=_Ie});var Hn=w(dr=>{"use strict";var Dq=dr&&dr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dr,"__esModule",{value:!0});dr.EmbeddedActionsParser=dr.CstParser=dr.Parser=dr.EMPTY_ALT=dr.ParserDefinitionErrorType=dr.DEFAULT_RULE_CONFIG=dr.DEFAULT_PARSER_CONFIG=dr.END_OF_FILE=void 0;var Xi=Gt(),ZIe=fj(),xq=SA(),kq=Cd(),Pq=Kj(),$Ie=jv(),eye=Wj(),tye=iq(),rye=sq(),iye=aq(),nye=uq(),sye=fq(),oye=dq(),aye=Qq(),Aye=Sq(),lye=vq();dr.END_OF_FILE=(0,xq.createTokenInstance)(xq.EOF,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(dr.END_OF_FILE);dr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:kq.defaultParserErrorProvider,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1});dr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var cye;(function(r){r[r.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",r[r.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",r[r.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",r[r.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",r[r.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",r[r.LEFT_RECURSION=5]="LEFT_RECURSION",r[r.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",r[r.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",r[r.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",r[r.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",r[r.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",r[r.TOO_MANY_ALTS=12]="TOO_MANY_ALTS"})(cye=dr.ParserDefinitionErrorType||(dr.ParserDefinitionErrorType={}));function uye(r){return r===void 0&&(r=void 0),function(){return r}}dr.EMPTY_ALT=uye;var my=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,Xi.has)(t,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. + Please use the flag on the relevant DSL method instead. + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES + For further details.`);this.skipValidations=(0,Xi.has)(t,"skipValidations")?t.skipValidations:dr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT("performSelfAnalysis",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT("toFastProps",function(){(0,Xi.toFastProperties)(e)}),e.TRACE_INIT("Grammar Recording",function(){try{e.enableRecording(),(0,Xi.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+" Rule",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT("Grammar Resolving",function(){n=(0,Pq.resolveGrammar)({rules:(0,Xi.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT("Grammar Validations",function(){if((0,Xi.isEmpty)(n)&&e.skipValidations===!1){var s=(0,Pq.validateGrammar)({rules:(0,Xi.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,Xi.values)(e.tokensMap),errMsgProvider:kq.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,Xi.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT("computeAllProdsFollows",function(){var s=(0,ZIe.computeAllProdsFollows)((0,Xi.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT("ComputeLookaheadFunctions",function(){e.preComputeLookaheadFunctions((0,Xi.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,Xi.isEmpty)(e.definitionErrors))throw t=(0,Xi.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected: + `+t.join(` +------------------------------- +`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();dr.Parser=my;(0,lye.applyMixins)(my,[$Ie.Recoverable,eye.LooksAhead,tye.TreeBuilder,rye.LexerAdapter,nye.RecognizerEngine,iye.RecognizerApi,sye.ErrorHandler,oye.ContentAssist,aye.GastRecorder,Aye.PerformanceTracer]);var gye=function(r){Dq(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,Xi.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(my);dr.CstParser=gye;var fye=function(r){Dq(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,Xi.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(my);dr.EmbeddedActionsParser=fye});var Fq=w(Ey=>{"use strict";Object.defineProperty(Ey,"__esModule",{value:!0});Ey.createSyntaxDiagramsCode=void 0;var Rq=pv();function hye(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?"https://unpkg.com/chevrotain@"+Rq.VERSION+"/diagrams/":i,s=t.css,o=s===void 0?"https://unpkg.com/chevrotain@"+Rq.VERSION+"/diagrams/diagrams.css":s,a=` + + + + + +`,l=` + +`,c=` + -``` - -**CLI** - -The CLI export functions in a similar manner, following the pattern: - -```bash -gitbeaker [service name] [method name] --config_args pos_arg1 pos_arg2 --opts_arg1 -``` - -Where: - -- `service name` is any of the supported API names -- `method name` is any of the supported commands on that API service (See source for exceptions, but generally all, show, remove, update) -- `--config_args` is any of general configuration arguments such as your personal token. These are outlined in the table above or by looking at the cli help menu - `pos_arg1 pos_arg2..etc` is any of the arguments you would normally supply to the function. The names of the args should match the names in the method headers. These positional arguments can also be written as flag arguments, `--pos_arg1 --pos_arg2..etc` **BUT** must be written in the correct order. -- `--opts_arg1...etc` is any of the optional arguments that you would normally supply to the function. Their names should match what the GitLab API docs request. - -There is one small exception with the instantiating arguments, however, which must be supplied using a `gb` or `gl` prefix. ie. - -```bash -# To get all the projects -gitbeaker projects all --gb-token="personaltoken" - -# To get a project with id = 2 -gitbeaker projects show --gl-token="personaltoken" 2 -``` - -To reduce the annoyance of having to pass those configuration properties each time, it is also possible to pass the token and host information through environment variables in the form of `GITLAB_[option name]` or `GITBEAKER_[option name]` ie: - -```bash -GITLAB_HOST=http://example.com -GITLAB_TOKEN=personaltoken -GITBEAKER_CAMELIZE=true -``` - -This could be set globally or using a [.env](https://github.com/motdotla/dotenv#readme) file in the project folder. - - -**Instantiation** - -Instantiate the library using a basic token created in your [Gitlab Profile](https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html) - -```javascript -const api = new Gitlab({ - token: 'personaltoken', -}); -``` - -Available instantiating options: - -| Name | Optional | Default | Description | -| -------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | -| `host` | Yes | `https://gitlab.com` | Gitlab Instance Host URL | -| `token` | No\* | N/A | Personal Token. Required (one of the three tokens are required) | -| `oauthToken` | No\* | N/A | OAuth Token. Required (one of the three tokens are required) | -| `jobToken` | No\* | N/A | CI Job Token. Required (one of the three tokens are required) | -| `rejectUnauthorized` | Yes | `true` | Http Certificate setting, Only applies to non-browser releases and HTTPS hosts urls | -| `sudo` | Yes | `false` | [Sudo](https://docs.gitlab.com/ee/api/#sudo) query parameter | -| `version` | Yes | `4` | API Version ID | -| `camelize` | Yes | `false` | Camelizes all response body keys | -| `requesterFn` | Yes | @gitbeaker/node & @gitbeaker/cli : Got-based, @gitbeaker/browser: Ky-based. The @gitbeaker/core package **does not** have a default and thus must be set explicitly | Request Library Wrapper | -| `requestTimeout` | Yes | `300000` | Request Library Timeout in ms | -| `profileToken` | Yes | N/A | [Requests Profiles Token](https://docs.gitlab.com/ee/administration/monitoring/performance/request_profiling.html) | -| `profileMode` | Yes | `execution` | [Requests Profiles Token](https://docs.gitlab.com/ee/administration/monitoring/performance/request_profiling.html) | - ->*One of these options must be supplied. - -## Typing Support - -All the exposed types are exported though the `Types` export. - -```typescript -import { Types } from '@gitbeaker/node'; -``` - -## Docs - -Although there are the [official docs](https://gitlab.com/gitlab-org/gitlab/tree/master/doc/api) for the API, there are some extra goodies offered by this package! The next large project will be putting together proper documentation for these goodies [[#39](https://github.com/jdalrymple/gitbeaker/issues/39)]! Stay tuned!! - -### Supported APIs - -The API's that are currently supported are: - -``` -// General -ApplicationSettings -BroadcastMessages -Events -FeatureFlags -GeoNodes -GitignoreTemplates -GitLabCIYMLTemplates -Keys -License -LicenseTemplates -Lint -Namespaces -NotificationSettings -Markdown -PagesDomains -Search -SidekiqMetrics -Snippets -SystemHooks -Version -Wikis - -// Groups -Groups -GroupAccessRequests -GroupBadges -GroupCustomAttributes -GroupIssueBoards -GroupMembers -GroupMilestones -GroupRunners -GroupVariables -GroupLabels -GroupDeployTokens -Epics -EpicIssues -EpicNotes -EpicDiscussions - -// Users -Users -UserCustomAttributes -UserEmails -UserImpersonationTokens -UserSSHKeys -UserGPGKeys - -// Projects -Branches -Commits -CommitDiscussions -ContainerRegistry -Deployments -DeployKeys -Environments -FreezePeriods -Issues -IssuesStatistics -IssueNotes -IssueNoteAwardEmojis -IssueDiscussions -IssueAwardEmojis -Jobs -Labels -MergeRequests -MergeRequestApprovals -MergeRequestAwardEmojis -MergeRequestDiscussions -MergeRequestNotes -Packages -PackageRegistry -Pipelines -PipelineSchedules -PipelineScheduleVariables -Projects -ProjectAccessRequests -ProjectBadges -ProjectCustomAttributes -ProjectImportExport -ProjectIssueBoards -ProjectHooks -ProjectMembers -ProjectMilestones -ProjectSnippets -ProjectSnippetNotes -ProjectSnippetDiscussions -ProjectSnippetAwardEmojis -ProtectedBranches -ProtectedTags -ProjectVariables -ProjectDeployTokens -PushRules -Releases -ReleaseLinks -Repositories -RepositoryFiles -RepositorySubmodules -Runners -Services -Tags -Todos -Triggers -VulnerabilityFindings - -// Everything -Gitlab -``` - -### Examples - -Once you have your library instantiated, you can utilize many of the API's functionality: - -Using the await/async method - -```javascript -import { Gitlab } from '@gitbeaker/node'; - -const api = new Gitlab({ - host: 'http://example.com', - token: 'personaltoken', -}); - -// Listing users -let users = await api.Users.all(); - -// Or using Promise-Then notation -api.Projects.all().then((projects) => { - console.log(projects); -}); -``` - -A general rule about all the function parameters: - -- If it's a required parameter, it is a named argument in the functions -- If it's an optional parameter, it is defined in a options object following the named arguments - -ie. - -```javascript -import { Gitlab } from '@gitbeaker/node'; - -const api = new Gitlab({ - host: 'http://example.com', - token: 'personaltoken', -}); - -api.Projects.create({ - //options defined in the Gitlab API documentation -}); -``` +## Features +- **Complete** - All features of Gitlab's exposed APIs are covered up to version [15.7](). +- **Universal** - Works in all modern browsers, [Node.js](https://nodejs.org/), and [Deno](https://deno.land/) and supports [CLI](https://www.npmjs.com/package/@gitbeaker/cli) usage. +- **Tested** - All libraries have > 80% test coverage. +- **Typed** - All libraries have extensive TypeScript declarations. -### Pagination - -Available pagination options: - -| Name | Keyset | Offset | Type | Default | Description | -| -------------- | ------ | ------ | -------------------- | -------- | --------------------------------------------------------------- | -| `pagination` | X | X | 'offset' or 'keyset' | 'offset' | Defines which pagination type should be used | -| `perPage` | X | X | Number | 20 | Amount of results per request | -| `maxPages` | X | X | Number | N/A | Maximum amount of requests that should be made | -| `page` | | X | Number | N/A | Specific page to be retrieved | -| `showExpanded` | | X | Boolean | false | Returns with the pagination information in addition to the data | - -#### Offset Pagination - -For any .all() function on a resource, it will return all the items from Gitlab. This can be troublesome if there are many items, as the request itself can take a while to be fulfilled. As such, a maxPages option can be passed to limit the scope of the all function. - -```javascript -import { Gitlab } from 'gitlab'; - -const api = new Gitlab({ - host: 'http://example.com', - token: 'personaltoken', -}); - -let projects = await api.Projects.all({ maxPages: 2 }); -``` - -You can also use this in conjunction with the perPage argument which would override the default of 30 per page set by Gitlab: - -```javascript -import { Gitlab } from 'gitlab'; - -const api = new Gitlab({ - host: 'http://example.com', - token: 'personaltoken', -}); - -let projects = await api.Projects.all({ maxPages: 2, perPage: 40 }); -``` - -Additionally, if you would like to get back the pagination information, to know how many total pages there are for example, pass the option `showExpanded`. If there are multiple results the pagination property will be included as shown below: - -```javascript -... -const { data, paginationInfo } = await api.Projects.all({ - perPage:40, - maxPages:2, - showExpanded: true -}); -... -``` - -This will result in a response in this format: - -```javascript -data: [ -... -], -paginationInfo: { - next: 4, - current: 2, - previous: 1, - perPage: 3, -} -``` - -> Note: Supplying any pagination restrictions is call intensive. Some resources will require many requests which can put a significant load on the Gitlab Server. The general best practice would be setting the page request option to only return the first page if all results are not required. - -#### Keyset Pagination - -Similarly, support for [Keyset pagination](https://docs.gitlab.com/ee/api/#keyset-based-pagination) can be toggled on by passing a pagination parameter as a query option - -```js -const { data } = await api.Projects.all({ - pagination: 'keyset', -}); -``` - -Note that for keyset pagination, `page`, and `showExpanded` are **not supported**. - -### Sudo - -For private gitlab instances, administrators can impersonate users through the API. To do so, you have to set the 'Sudo' header on the services you want to impersonate the user for. - -For example, if you want to disable notifications for a specific user: - -```javascript -import { NotificationSettings } from 'gitlab'; - -const service = new NotificationSettings({ - host: 'http://example.com', - token: 'personaltoken' - sudo: 8 // Can be the user ID or a username -}); - -await service.edit({ - level: NotificationSettings.LEVELS.DISABLED -}) -``` - -### Custom Request Libraries - -There is another constructor parameter that allows the user to specify their custom request library -as long as it has a similar API to ky. To specify the library, simply set the `requester` property when -instatiating a service: - -An example can be seen in the [KyRequester.ts](./src/infrastructure/KyRequester.ts) file - -```javascript -import { Gitlab } from 'gitlab'; -import YourCustomRequester from 'custom-requester'; - -const api = new Gitlab({ - host: 'http://example.com', - token: 'personaltoken', - requester: YourCustomRequester, -}); -``` - -### Misc - -#### Handling HTTPS certificates - -If your Gitlab server is running via HTTPS, the proper way to pass in your certificates is via a `NODE_EXTRA_CA_CERTS` environment key, like this: - -```js -"scripts": { - "start": "NODE_EXTRA_CA_CERTS=./secrets/3ShapeCA.pem node bot.js" -}, -``` - -> **NOTE**: _Using `process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'` will not work with the `gitlab` library. The `rejectUnauthorized` key is the only way to allow insecure certificates to be bypassed._ - -#### Non JSON/Text Responses - -For responses such as file data that may be returned from the API, the data is exposed as a buffer. For example, when trying to write a file, this can be done like: - -```javascript -let bufferedData = await api.Jobs.downloadLatestArtifactFile(project.id, 'test', 'job_test'); - -fs.writeFileSync('test.zip', bufferedData); -``` - -## Debugging -Depending on the library used, the full information about the request error can be a bit obfuscated. Ideally, the entire information is returned from Ky (browser) or Got (nodejs) however for simplicity, a description property is added to the error object that has the error message attached. Simply look for e.description to have a better idea of what the error actually is. - -## Testing - -Testing is a work-in-progress right now but here is the start. - -**Unit Tests** - -Run: - -```bash -yarn test:unit -``` - -**Integration Tests** - -1. First, run Gitlab in a docker container: - -```bash -docker-compose -f scripts/docker-compose.yml up -``` - -1. Once GitLab is up on localhost:8080, get the two environment variables from the docker image could - either export them into environment variables locally: - -```bash -export PERSONAL_ACCESS_TOKEN=$(docker exec -it gitlab bash -lc 'printf "%q" "${PERSONAL_ACCESS_TOKEN}"') -export GITLAB_URL=$(docker exec -it gitlab bash -lc 'printf "%q" "${GITLAB_URL}"') -``` - -1. Now run the tests - -```bash -yarn test:integration:node -``` - -You can also define them in front of the yarn script - -``` -PERSONAL_ACCESS_TOKEN='abcdefg' GITLAB_URL='http://localhost:8080' yarn test -``` - -> Note it may take about 3 minutes to get the variables while Gitlab is starting up in the container +## Packages +- :wrench: [**@gitbeaker/requester-utils**](https://www.npmjs.com/package/@gitbeaker/requester-utils) - Utilities for the underlying HTTP request functionality. +- :scroll: [**@gitbeaker/core**](https://www.npmjs.com/package/@gitbeaker/core) - The core API detailing all the Gitlab resource support. +- :computer: [**@gitbeaker/rest**](https://www.npmjs.com/package/@gitbeaker/rest) - The Node.js, Deno and Modern Browser wrapper around the gitbeaker core API, using native fetch. +- :pager: [**@gitbeaker/cli**](https://www.npmjs.com/package/@gitbeaker/cli) - The CLI Wrapper around the @gitbeaker/rest distribution. ## Contributors - -This started as a fork from [node-gitlab-legacy](https://github.com/node-gitlab/node-gitlab-legacy) but I ended up rewriting much of the code. Here are the original work's [contributors](https://github.com/node-gitlab/node-gitlab-legacy#contributors). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Justin Dalrymple

💻 👀 🚧 🐛 🤔 📖 ⚠️ 🚇

akira345

📖 👀 💻

Pavel Birukov

👀 💻

Joseph Petersen

👀 🤔 🐛 💻

Louis Cherel

👀 💻

Adam Dehnel

👀 🚧 🐛 💻

Ev Haus

👀 💻

Loïc Mahieu

👀

Giuseppe Angri

👀 💻

jennparise

👀 🐛 💻

Oscar

👀

Daniel Ruf

👀 📖 🐛 🚧 💻

schindld

👀 💻

Alvaro

💻

Daniel Moore

💻

Dylan M. Taylor

📖 💻

Corentin Mors

💻

xatavian

💻

Yevgeny Petukhov

💻

Mickaël Tricot

📖

Andrea

💻

Flavien Bridault

⚠️ 💻

s-kazuki

💻

Kipras Melnikovas

💻

xieyu

💻

st1gok

💻

Max Wittig

📖 ⚠️ 💻

Niklas Lochschmidt

📖 ⚠️ 💻

Ilya Dus

💻

Omar Awamry

💻

Hennadii Varava

💻

xiezht

📖

Martin Helmich

💻

Sean McGivern

📖

Clemens Lieb

💻

Vojtěch Sajdl

⚠️ 💻

divido

⚠️ 💻

Vincent Boulaye

⚠️ 💻

Aliyss Snow

📖 ⚠️ 💻

Mahmoud Saada

💻

Feng Yu

💻

Roy Jacobs

💻

Paul Lemke

💻

Ian Jenkins

⚠️ 💻

nilennoct

⚠️ 💻

Laffargue Michael

💻

Martin Howarth

⚠️ 💻

pataar

💻

Ikko Ashimine

💻 ⚠️

Bilal Aslam

💻

youngje

💻

Sullivan SENECHAL

💻

Felix Herold

💻
+

+ + Justin Dalrymple + Dylan DesRosier + Mike Wyatt + Cory Zibeill + Martin Bour + akira345 + Pavel Birukov + Joseph Petersen + Louis Cherel + Adam Dehnel + Ev Haus + Loïc Mahieu + Giuseppe Angri + jennparise + Oscar + Daniel Ruf + schindld + Alvaro + Daniel Moore + Dylan M. Taylor + Corentin Mors + xatavian + Yevgeny Petukhov + Mickaël Tricot + Andrea + Flavien Bridault +
+ +
s-kazuki + Kipras Melnikovas + xieyu + st1gok + Max Wittig + Niklas Lochschmidt + Ilya Dus + Omar Awamry + Hennadii Varava + xiezht + Martin Helmich + Sean McGivern + Clemens Lieb + Vojtěch Sajdl + divido + Vincent Boulaye + Aliyss Snow + Mahmoud Saada + Feng Yu + Roy Jacobs + Paul Lemke + Ian Jenkins + nilennoct + Laffargue Michael + Martin Howarth + Christoph Lehmann +
+ +
Frank V + Salim Benabbou + Tamás Török-Vistai + Martin Benninger + fewieden + Jeff Pelton + Claude Abounegm + Stefan Hall + Jordan Wallet + zhao0 + Joshua Grosso + Isaac Ouellet Therrien + Rajat Sharma + Cesar B. + Igor Katsuba + Michael Townsend + bodtx + Artem + Munif Tanjim + Quentin Dreyer + Norm MacLennan + jnovick + Fabian Aussems + Michael Matzka + CraigAllardyce + Bruno Guimarães +
+ +
Lukas Eipert + Maximilian Krauß + Evolution Engineering + WEBER Logan + Anton Zhukov + Nicholas Loomans + Carl Kittelberger + Patrik Votoček + Kyrylo Fedorov + Claudio Vellage + Seb0uil + +

-- [Dylan DesRosier](https://github.com/ddesrosier) -- [Mike Wyatt](https://github.com/mikew) -- [Cory Zibeill](https://github.com/coryzibell) -- [Martin Bour](https://github.com/shadygrove) -- [Christoph Lehmann](https://github.com/christophlehmann) -- [Frank V](https://github.com/FrankV01) -- [Salim Benabbou](https://github.com/Salimlou) -- [Tamás Török-Vistai](https://github.com/tvtamas) -- [Martin Benninger](https://github.com/MartinBenninger) -- [Adam Dehnel](https://github.com/arsdehnel) -- [fewieden](https://github.com/fewieden) -- [Jeff Pelton](https://github.com/comster) -- [Claude Abounegm](https://github.com/claude-abounegm) -- [Stefan Hall](https://github.com/Marethyu1) -- [Jordan Wallet](https://github.com/Mr-Wallet) -- [Ev Haus](https://github.com/EvHaus) -- [zhao0](https://github.com/zhao0) -- [Joshua Grosso](https://github.com/jgrosso) -- [Frédéric Boutin](https://github.com/fboutin-pmc) -- [Isaac Ouellet Therrien](https://github.com/yonguelink) -- [Pavel Birukov](https://github.com/pablobirukov) -- [Sharma-Rajat](https://github.com/Sharma-Rajat) -- [Joseph Petersen](https://github.com/casz) -- [Igor Katsuba](https://github.com/IKatsuba) -- [Giuseppe Angri](https://github.com/giuseppeangri) -- [Michael Townsend](https://github.com/Continuities) -- [bodtx](https://github.com/bodtx) -- [Artem](https://github.com/arthot) -- [Munif Tanjim](https://github.com/MunifTanjim) -- [Max Wittig](https://github.com/max-wittig) -- [Quentin Dreyer](https://github.com/qkdreyer) -- [Norm MacLennan](https://github.com/maclennann) -- [jnovick](https://github.com/jnovick) -- [Fabian Aussems](https://github.com/mozinator) -- [jennparise](https://github.com/jennparise) -- [Michael Matzka](https://github.com/mimaidms) -- [CraigAllardyce](https://github.com/CraigAllardyce) -- [Bruno Guimarães](https://github.com/brunobastosg) -- [Louis Cherel](https://github.com/Musinux) -- [Lukas Eipert](https://github.com/leipert) -- [Maximilian Krauß](https://github.com/maximilian-krauss) -- [Evolution Gaming](https://github.com/evolution-gaming) -- [WEBER Logan](https://github.com/Neonox31) -- [Anton Zhukov](https://github.com/MrCheater) -- [Nic Loomans](https://github.com/beaverusiv) -- [Jennifer Everhart]() -- [Carl Kittelberger](https://github.com/icedream) -- [Patrik Votoček](https://github.com/Vrtak-CZ) -- [Kyrylo Fedorov](https://github.com/Kyr) -- [Claudio Vellage](https://github.com/jdalrymple/LRH539) -- [Seb0uil](https://github.com/seb0uil) -- [Dylan Taylor](https://github.com/dylanmtaylor) +This started as a fork from [node-gitlab-legacy](https://github.com/rest-gitlab/rest-gitlab-legacy) but I ended up rewriting much of the code. Here are the original work's [contributors](https://github.com/rest-gitlab/rest-gitlab-legacy#contributors). ## Sponsors diff --git a/codecov.yml b/codecov.yml deleted file mode 100644 index 4b58b7ca5..000000000 --- a/codecov.yml +++ /dev/null @@ -1,43 +0,0 @@ -codecov: - max_report_age: off - -comment: false - -coverage: - precision: 2 - round: down - status: - project: - default: off - cli: - target: 60% - flags: cli - core: - target: 90% - flags: core - browser: - target: 60% - flags: browser - node: - target: 60% - flags: node - utils: - target: 60% - flags: utils - -flags: - cli: - paths: - - packages/gitbeaker-cli/src - core: - paths: - - packages/gitbeaker-core/src - browser: - paths: - - packages/gitbeaker-browser/src - node: - paths: - - packages/gitbeaker-node/src - utils: - paths: - - packages/gitbeaker-requester-utils/src diff --git a/docs/FAQ.md b/docs/FAQ.md new file mode 100644 index 000000000..25a8f25c3 --- /dev/null +++ b/docs/FAQ.md @@ -0,0 +1,28 @@ +### Custom Request Libraries + +There is another constructor parameter that allows the user to specify their custom request library. To specify the library, simply set the `requester` property when instantiating a service: + +An example can be seen in the [Requester.ts](./packages/rest/src/Requester.ts) file. + +```javascript +import { Gitlab } from '@gitbeaker/rest'; +import YourCustomRequester from 'custom-requester'; + +const api = new Gitlab({ + host: 'http://example.com', + token: 'personaltoken', + requester: YourCustomRequester, +}); +``` + +#### Handling HTTPS certificates + +If your Gitlab server is running via HTTPS, the proper way to pass in your certificates is via a `NODE_EXTRA_CA_CERTS` environment key, like this: + +```js +"scripts": { + "start": "NODE_EXTRA_CA_CERTS=./secrets/3ShapeCA.pem node bot.js" +}, +``` + +> **NOTE**: _Using `process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'` will not work with the `gitlab` library. The `rejectUnauthorized` key is the only way to allow insecure certificates to be bypassed._ diff --git a/docs/TESTING.md b/docs/TESTING.md new file mode 100644 index 000000000..9d836a309 --- /dev/null +++ b/docs/TESTING.md @@ -0,0 +1,40 @@ + +Testing is a work-in-progress right now but here is the start. + +**Unit Tests** + +Run: + +```bash +yarn test:unit +``` + +**Integration Tests** + +1. First, run Gitlab in a docker container: + +```bash +docker-compose -f scripts/docker-compose.yml up +``` + +1. Once GitLab is up on localhost:8080, get the two environment variables from the docker image could + either export them into environment variables locally: + +```bash +export PERSONAL_ACCESS_TOKEN=$(docker exec -it gitlab bash -lc 'printf "%q" "${PERSONAL_ACCESS_TOKEN}"') +export GITLAB_URL=$(docker exec -it gitlab bash -lc 'printf "%q" "${GITLAB_URL}"') +``` + +1. Now run the tests + +```bash +yarn test:integration:node +``` + +You can also define them in front of the yarn script + +``` +PERSONAL_ACCESS_TOKEN='abcdefg' GITLAB_URL='http://localhost:8080' yarn test +``` + +> Note it may take about 3 minutes to get the variables while Gitlab is starting up in the container diff --git a/global.d.ts b/global.d.ts new file mode 100644 index 000000000..b68ae0770 --- /dev/null +++ b/global.d.ts @@ -0,0 +1 @@ +import 'jest-extended' diff --git a/jest.config.base.js b/jest.config.base.js deleted file mode 100644 index 9b1402612..000000000 --- a/jest.config.base.js +++ /dev/null @@ -1,24 +0,0 @@ -const { jsWithTs: tsjPreset } = require('ts-jest/presets'); -const { pathsToModuleNameMapper } = require('ts-jest'); -const { compilerOptions } = require('./tsconfig'); - -module.exports = { - ...tsjPreset, - - testEnvironment: 'node', - testRegex: 'test\\/.*\\.ts$', - testMatch: null, - testURL: 'http://localhost/', - testTimeout: 120000, - - coverageDirectory: 'coverage', - collectCoverage: true, - - setupFilesAfterEnv: ['jest-extended/all'], - - transformIgnorePatterns: ['node_modules/(?!(ky))'], - - moduleNameMapper: { - ...pathsToModuleNameMapper(compilerOptions.paths, { prefix: '/../../' }), - }, -}; diff --git a/jest.config.base.mjs b/jest.config.base.mjs new file mode 100644 index 000000000..a7c54d58b --- /dev/null +++ b/jest.config.base.mjs @@ -0,0 +1,16 @@ +export default { + testEnvironment: 'node', + testRegex: 'test\\/.*\\.ts$', + coverageDirectory: 'coverage', + collectCoverage: true, + coverageReporters: ['html', 'text', 'text-summary', 'cobertura'], + reporters: ['default', ['jest-junit', { outputFile: 'reports/nodejs_junit.xml' }]], + moduleNameMapper: { + "@gitbeaker/core/map.json": '/../core/dist/map.json', + '^@gitbeaker/(.*)$': '/../$1/src' + }, + transform: { + '^.+\\.(t|j)sx?$': '@swc/jest', + }, + setupFilesAfterEnv: ['jest-extended/all'], +}; diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 60b78386f..000000000 --- a/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -const base = require('./jest.config.base'); - -module.exports = { - ...base, - projects: ['/packages/*'], -}; diff --git a/jest.setup.ts b/jest.setup.ts new file mode 100644 index 000000000..e1fd2b7a9 --- /dev/null +++ b/jest.setup.ts @@ -0,0 +1,2 @@ +import 'jest-extended'; +import 'jest-extended/all'; diff --git a/lerna.json b/lerna.json index 15ee4ab40..df1a0fc03 100644 --- a/lerna.json +++ b/lerna.json @@ -4,6 +4,6 @@ ], "npmClient": "yarn", "useWorkspaces": true, - "version": "35.8.0", + "version": "36.0.1", "tagVersionPrefix": "" } diff --git a/lint-staged.config.base.mjs b/lint-staged.config.base.mjs new file mode 100644 index 000000000..82a0fd9b2 --- /dev/null +++ b/lint-staged.config.base.mjs @@ -0,0 +1,8 @@ +export default { + "**/*.{ts,js,json,md,yml}": [ + "prettier --write" + ], + "**/*.{ts,js}": [ + "eslint --fix" + ] +} diff --git a/nx.json b/nx.json new file mode 100644 index 000000000..891a349b6 --- /dev/null +++ b/nx.json @@ -0,0 +1,38 @@ +{ + "tasksRunnerOptions": { + "default": { + "runner": "nx/tasks-runners/default", + "options": { + "cacheableOperations": [ + "lint", + "lint:fix", + "format", + "format:fix", + "test:types", + "test:unit", + "test:integration", + "test:e2e", + "build:" + ] + } + } + }, + "targetDefaults": { + "build": { + "dependsOn": [ + "^build" + ] + }, + "test:types": { + "dependsOn": [ + "build" + ] + }, + "test:e2e": { + "dependsOn": [ + "build" + ] + } + }, + "defaultBase": "main" +} diff --git a/package.json b/package.json index 4ac45561f..315732374 100644 --- a/package.json +++ b/package.json @@ -1,52 +1,63 @@ { + "name": "gitbeaker", + "private": true, + "repository": "github:jdalrymple/gitbeaker", "bugs": { "url": "https://github.com/jdalrymple/gitbeaker/issues" }, - "repository": "github:jdalrymple/gitbeaker", - "devDependencies": { - "@auto-it/all-contributors": "^10.27.1", - "@auto-it/core": "^10.27.1", - "@auto-it/first-time-contributor": "^10.27.1", - "@auto-it/released": "^10.27.1", - "@types/jest": "^27.0.1", - "@typescript-eslint/eslint-plugin": "^4.23.0", - "@typescript-eslint/parser": "^4.23.0", - "all-contributors-cli": "^6.20.0", - "auto": "^10.27.1", - "codecov": "^3.8.2", - "eslint": "^7.26.0", - "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-prettier": "^8.3.0", - "eslint-import-resolver-typescript": "^3.2.5", - "eslint-plugin-import": "^2.23.4", - "eslint-plugin-jest": "^26.0.0", - "eslint-plugin-prettier": "^4.0.0", - "got": "^12.0.0", - "husky": "^7.0.0", - "jest": "^27.0.4", - "jest-extended": "^3.0.0", - "lerna": "^5.1.8", - "lint-staged": "^13.0.3", - "prettier": "^2.3.0", - "ts-jest": "^27.0.3", - "typescript": "^4.3.2", - "uuid": "^8.3.2" - }, - "private": true, + "author": "Justin Dalrymple", "workspaces": [ "packages/*" ], "scripts": { - "build": "lerna run build", - "lint": "prettier --check 'packages/**/{src,test}/**/*.ts' && eslint 'packages/**/{src,test}/**/*/*.ts'", - "lint:docs": "prettier --check './**/*.json' './**/*.yml' './**/*.js' '!./**/(dist|coverage)/**'", - "lint:docs:fix": "prettier --write './**/*.json' './**/*.yml' './**/*.js' '!./**/(dist|coverage)/**'", - "lint:fix": "prettier --write 'packages/**/{src,test}/**/*.ts' && eslint 'packages/**/{src,test}/**/*/*.ts' --fix", - "test:unit": "yarn workspaces run test:unit", - "test:integration": "yarn workspaces run test:integration", - "release": "auto shipit --verbose --verbose", - "clean": "lerna exec -- rimraf dist coverage && lerna clean --yes && rm -rf node_modules coverage" + "build": "nx run-many --target=build", + "clean": "npx rimraf --glob '**/{dist,node_modules,coverage,reports}'", + "lint": "nx run-many --target=lint", + "lint:fix": "nx run-many --target=lint:fix", + "format": "nx run-many --target=format", + "format:fix": "nx run-many --target=format:fix", + "test:types": "nx run-many --target=test:types", + "test:unit": "nx run-many --target=test:unit", + "test:integration": "nx run-many --target=test:integration", + "test:e2e": "nx run-many --target=test:e2e", + "release:next": "auto next", + "release:canary": "auto canary", + "release": "auto shipit", + "postinstall": "husky install" + }, + "dependencies": { + "types": "^0.1.1" + }, + "devDependencies": { + "@auto-it/all-contributors": "^10.46.0", + "@auto-it/core": "^10.46.0", + "@auto-it/first-time-contributor": "^10.46.0", + "@auto-it/omit-commits": "^10.46.0", + "@auto-it/omit-release-notes": "^10.46.0", + "@auto-it/released": "^10.46.0", + "@swc/core": "^1.3.55", + "@swc/jest": "^0.2.26", + "@types/jest": "^29.5.1", + "@typescript-eslint/eslint-plugin": "^5.59.1", + "@typescript-eslint/parser": "^5.59.1", + "auto": "^10.46.0", + "eslint": "^8.39.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-prettier": "^8.8.0", + "eslint-import-resolver-typescript": "^3.5.5", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-jest": "^27.2.1", + "eslint-plugin-jest-extended": "^2.0.0", + "eslint-plugin-prettier": "^4.2.1", + "husky": "^8.0.3", + "jest": "^29.5.0", + "jest-extended": "^3.2.4", + "jest-junit": "^15.0.0", + "lerna": "^6.6.1", + "lint-staged": "^13.2.1", + "nx": "15.8.6", + "prettier": "^2.8.8", + "typescript": "^4.9.5" }, - "author": "Justin Dalrymple ", - "name": "gitbeaker" + "packageManager": "yarn@3.4.1" } diff --git a/packages/browser/CHANGELOG.md b/packages/browser/CHANGELOG.md deleted file mode 100644 index a7258c204..000000000 --- a/packages/browser/CHANGELOG.md +++ /dev/null @@ -1,844 +0,0 @@ -# v35.8.0 (Wed Nov 16 2022) - -#### 🔩 Dependency Updates - -- Bump @types/node from 17.0.15 to 18.0.3 [#2586](https://github.com/jdalrymple/gitbeaker/pull/2586) ([@dependabot[bot]](https://github.com/dependabot[bot])) -- Bump jest-extended from 1.2.0 to 3.0.0 [#2590](https://github.com/jdalrymple/gitbeaker/pull/2590) ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### Authors: 1 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) - ---- - -# v35.3.0 (Sat Feb 05 2022) - -#### 🐛 Bug Fix - -- Set the minimum supported node version [#2353](https://github.com/jdalrymple/gitbeaker/pull/2353) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v35.2.0 (Sat Feb 05 2022) - -#### 🔩 Dependency Updates - -- Bump @types/node from 16.11.14 to 17.0.0 in /packages/browser [#2283](https://github.com/jdalrymple/gitbeaker/pull/2283) ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### Authors: 1 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) - ---- - -# v34.7.0 (Tue Nov 30 2021) - -#### 🔩 Dependency Updates - -- Bump rollup-plugin-typescript2 from 0.30.0 to 0.31.1 [#2229](https://github.com/jdalrymple/gitbeaker/pull/2229) ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### Authors: 1 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) - ---- - -# v34.6.0 (Mon Nov 15 2021) - -#### 🔩 Dependency Updates - -- Bump ky from 0.28.6 to 0.28.7 [#2199](https://github.com/jdalrymple/gitbeaker/pull/2199) ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### Authors: 1 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) - ---- - -# v34.3.0 (Sun Oct 17 2021) - -#### 🐛 Bug Fix - -- Fix the typing for the supported links functions [#2154](https://github.com/jdalrymple/gitbeaker/pull/2154) ([@jdalrymple](https://github.com/jdalrymple)) -- Exclude agent from browser release [#2153](https://github.com/jdalrymple/gitbeaker/pull/2153) ([@jdalrymple](https://github.com/jdalrymple)) -- Circleci editor/circleci project setup [#2124](https://github.com/jdalrymple/gitbeaker/pull/2124) ([@jdalrymple](https://github.com/jdalrymple)) - -#### 🔩 Dependency Updates - -- Bump @rollup/plugin-commonjs from 20.0.0 to 21.0.0 in /packages/browser [#2123](https://github.com/jdalrymple/gitbeaker/pull/2123) ([@dependabot[bot]](https://github.com/dependabot[bot]) [@jdalrymple](https://github.com/jdalrymple)) -- Bump jest-extended from 0.11.5 to 1.0.0 in /packages/browser [#2140](https://github.com/jdalrymple/gitbeaker/pull/2140) ([@dependabot[bot]](https://github.com/dependabot[bot]) [@jdalrymple](https://github.com/jdalrymple)) -- Bump ky from 0.28.5 to 0.28.6 in /packages/browser [#2146](https://github.com/jdalrymple/gitbeaker/pull/2146) ([@dependabot[bot]](https://github.com/dependabot[bot]) [@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 2 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v34.2.0 (Sat Sep 18 2021) - -#### 🔩 Dependency Updates - -- Bump @rollup/plugin-replace from 2.4.2 to 3.0.0 [#1947](https://github.com/jdalrymple/gitbeaker/pull/1947) ([@dependabot[bot]](https://github.com/dependabot[bot]) [@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 2 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v34.1.0 (Sat Sep 04 2021) - -#### 🔩 Dependency Updates - -- Bump node-fetch from 2.6.1 to 3.0.0 [#2049](https://github.com/jdalrymple/gitbeaker/pull/2049) ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### Authors: 1 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) - ---- - -# v34.0.0 (Sat Sep 04 2021) - -#### 🐛 Bug Fix - -- Using arrayBuffer for unknown content types [#2040](https://github.com/jdalrymple/gitbeaker/pull/2040) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v33.0.1 (Thu Sep 02 2021) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Roy Jacobs ([@sagacity](https://github.com/sagacity)), for all your work! - -#### 🐛 Bug Fix - -- Add a CJS build to the browser package [#2047](https://github.com/jdalrymple/gitbeaker/pull/2047) ([@sagacity](https://github.com/sagacity)) - -#### Authors: 1 - -- Roy Jacobs ([@sagacity](https://github.com/sagacity)) - ---- - -# v32.3.0 (Fri Aug 27 2021) - -#### 🐛 Bug Fix - -- Adding a core integration test, and fixing the resource imports [#2039](https://github.com/jdalrymple/gitbeaker/pull/2039) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v32.2.0 (Mon Aug 23 2021) - -#### 🔩 Dependency Updates - -- Bump @rollup/plugin-commonjs from 19.0.2 to 20.0.0 [#1983](https://github.com/jdalrymple/gitbeaker/pull/1983) ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### Authors: 1 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) - ---- - -# v32.1.1 (Mon Aug 09 2021) - -#### 👷🏼‍♀️ Technical Debt - -- Improved mime handling [#1979](https://github.com/jdalrymple/gitbeaker/pull/1979) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v31.1.0 (Tue Jul 27 2021) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Aliyss Snow ([@Aliyss](https://github.com/Aliyss)), for all your work! - -#### 💥 Feature - -- Added RepositorySubmodules.ts [#1931](https://github.com/jdalrymple/gitbeaker/pull/1931) ([@Aliyss](https://github.com/Aliyss) [@jdalrymple](https://github.com/jdalrymple)) - -#### 🔩 Dependency Updates - -- Bump @types/node from 15.14.0 to 16.0.0 [#1914](https://github.com/jdalrymple/gitbeaker/pull/1914) ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### Authors: 3 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) -- Aliyss Snow ([@Aliyss](https://github.com/Aliyss)) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v31.0.0 (Mon Jul 05 2021) - -#### 💥 Breaking Change - -- Expose typing to consumer and remove export complexity [#1818](https://github.com/jdalrymple/gitbeaker/pull/1818) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v30.1.0 (Mon Jun 07 2021) - -#### 🔩 Dependency Updates - -- Tests back up and running [#1858](https://github.com/jdalrymple/gitbeaker/pull/1858) ([@jdalrymple](https://github.com/jdalrymple)) -- Bump ky from 0.25.0 to 0.28.5 in /packages/browser [#1858](https://github.com/jdalrymple/gitbeaker/pull/1858) ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### Authors: 2 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v30.0.0 (Mon Jun 07 2021) - -#### 💥 Breaking Change - -- Package Registry Support [#1822](https://github.com/jdalrymple/gitbeaker/pull/1822) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v29.3.0 (Mon Jun 07 2021) - -#### 🐛 Bug Fix - -- Revert build system changes [#1851](https://github.com/jdalrymple/gitbeaker/pull/1851) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v29.2.4 (Sun May 30 2021) - -#### 🐛 Bug Fix - -- Updating browser build and testing [#1780](https://github.com/jdalrymple/gitbeaker/pull/1780) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v29.2.2 (Sat May 29 2021) - -#### ⚠️ Pushed to `master` - -- Merge remote-tracking branch 'origin/master' ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v29.2.1 (Sat May 29 2021) - -#### 🔩 Dependency Updates - -- Bump ts-node from 9.1.1 to 10.0.0 [#1798](https://github.com/jdalrymple/gitbeaker/pull/1798) ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### Authors: 1 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) - ---- - -# v29.2.0 (Tue May 18 2021) - -#### 🔩 Dependency Updates - -- Updating all dependencies [#1775](https://github.com/jdalrymple/gitbeaker/pull/1775) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v29.0.0 (Fri May 14 2021) - -#### 💥 Breaking Change - -- Update service typing and peripheral endpoints [#1768](https://github.com/jdalrymple/gitbeaker/pull/1768) ([@jdalrymple](https://github.com/jdalrymple)) - -#### 🔩 Dependency Updates - -- Bump @rollup/plugin-node-resolve from 11.2.1 to 13.0.0 [#1753](https://github.com/jdalrymple/gitbeaker/pull/1753) ([@dependabot[bot]](https://github.com/dependabot[bot])) -- Bump @rollup/plugin-commonjs from 18.1.0 to 19.0.0 [#1754](https://github.com/jdalrymple/gitbeaker/pull/1754) ([@dependabot[bot]](https://github.com/dependabot[bot])) -- Bump puppeteer from 9.0.0 to 9.1.1 [#1750](https://github.com/jdalrymple/gitbeaker/pull/1750) ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### Authors: 2 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v28.4.0 (Tue May 04 2021) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump @types/node from 14.14.41 to 15.0.1 [#1719](https://github.com/jdalrymple/gitbeaker/pull/1719) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) -- chore(deps-dev): bump puppeteer from 8.0.0 to 9.0.0 [#1705](https://github.com/jdalrymple/gitbeaker/pull/1705) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) -- chore(deps-dev): bump jest-puppeteer from 4.4.0 to 5.0.2 [#1709](https://github.com/jdalrymple/gitbeaker/pull/1709) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 1 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) - ---- - -# v28.3.0 (Sun Apr 04 2021) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump @rollup/plugin-commonjs from 17.1.0 to 18.0.0 [#1668](https://github.com/jdalrymple/gitbeaker/pull/1668) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 1 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) - ---- - -# v28.2.0 (Sat Mar 20 2021) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Vojtěch Sajdl ([@Pryx](https://github.com/Pryx)), for all your work! - -#### 🐛 Bug Fix - -- Fix #1624 - Fixed mime type handling [#1633](https://github.com/jdalrymple/gitbeaker/pull/1633) ([@Pryx](https://github.com/Pryx)) - -#### Authors: 1 - -- Vojtěch Sajdl ([@Pryx](https://github.com/Pryx)) - ---- - -# v28.1.0 (Sun Mar 14 2021) - -#### 🐛 Bug Fix - -- Package updates to fix build pipeline \[skip ci\] ([@jdalrymple](https://github.com/jdalrymple)) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump puppeteer from 7.0.0 to 7.1.0 [#1556](https://github.com/jdalrymple/gitbeaker/pull/1556) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) -- chore(deps-dev): bump puppeteer from 6.0.0 to 7.0.0 [#1522](https://github.com/jdalrymple/gitbeaker/pull/1522) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) -- chore(deps-dev): bump puppeteer from 5.5.0 to 6.0.0 [#1513](https://github.com/jdalrymple/gitbeaker/pull/1513) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 2 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v28.0.3 (Sun Jan 24 2021) - -#### 🐛 Bug Fix - -- Remove possibility of char type information polluting check of content-type [#1467](https://github.com/jdalrymple/gitbeaker/pull/1467) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# vnull (Sun Jan 03 2021) - -#### ⚠️ Pushed to `master` - -- Merge remote-tracking branch 'origin/master' ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v27.0.0 (Fri Dec 18 2020) - -#### 💥 Breaking Change - -- Removed circular references [#1387](https://github.com/jdalrymple/gitbeaker/pull/1387) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v26.0.0 (Sun Dec 06 2020) - -#### 💥 Breaking Change - -- Export the APIMap through a compile-time replacement [#1352](https://github.com/jdalrymple/gitbeaker/pull/1352) ([@jdalrymple](https://github.com/jdalrymple)) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump @rollup/plugin-node-resolve from 10.0.0 to 11.0.0 [#1361](https://github.com/jdalrymple/gitbeaker/pull/1361) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) -- chore(deps-dev): bump @rollup/plugin-commonjs from 16.0.0 to 17.0.0 [#1358](https://github.com/jdalrymple/gitbeaker/pull/1358) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 2 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v25.5.0 (Sun Nov 29 2020) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump rollup-plugin-typescript2 from 0.28.0 to 0.29.0 [#1324](https://github.com/jdalrymple/gitbeaker/pull/1324) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) -- chore(deps): bump ky from 0.24.0 to 0.25.0 [#1330](https://github.com/jdalrymple/gitbeaker/pull/1330) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) -- chore(deps-dev): bump puppeteer from 5.4.1 to 5.5.0 [#1334](https://github.com/jdalrymple/gitbeaker/pull/1334) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 1 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) - ---- - -# v25.4.0 (Tue Nov 24 2020) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump @rollup/plugin-node-resolve from 9.0.0 to 10.0.0 [#1319](https://github.com/jdalrymple/gitbeaker/pull/1319) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) -- chore(deps-dev): bump @rollup/plugin-commonjs from 15.1.0 to 16.0.0 [#1314](https://github.com/jdalrymple/gitbeaker/pull/1314) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) -- chore(deps-dev): bump @types/puppeteer from 3.0.2 to 5.4.0 [#1316](https://github.com/jdalrymple/gitbeaker/pull/1316) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 1 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) - ---- - -# v25.2.0 (Fri Oct 30 2020) - -#### 🐛 Bug Fix - -- Fixing header conversion from Header to plain object [#1290](https://github.com/jdalrymple/gitbeaker/pull/1290) ([@jdalrymple](https://github.com/jdalrymple)) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump puppeteer from 5.4.0 to 5.4.1 [#1274](https://github.com/jdalrymple/gitbeaker/pull/1274) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) -- chore(deps-dev): bump puppeteer from 5.3.1 to 5.4.0 [#1267](https://github.com/jdalrymple/gitbeaker/pull/1267) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 2 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v25.1.0 (Tue Oct 20 2020) - -#### 🐛 Bug Fix - -- RejectUnauthorized being set incorrectly for the NodeJS release [#1252](https://github.com/jdalrymple/gitbeaker/pull/1252) ([@jdalrymple](https://github.com/jdalrymple)) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump rollup-plugin-typescript2 from 0.27.3 to 0.28.0 [#1248](https://github.com/jdalrymple/gitbeaker/pull/1248) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 2 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v25.0.0 (Thu Oct 15 2020) - -#### 💥 Breaking Change - -- Add approval rule management [#1233](https://github.com/jdalrymple/gitbeaker/pull/1233) ([@nlochschmidt](https://github.com/nlochschmidt)) - -#### Authors: 1 - -- Niklas Lochschmidt ([@nlochschmidt](https://github.com/nlochschmidt)) - ---- - -# v24.3.0 (Thu Oct 15 2020) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Niklas Lochschmidt ([@nlochschmidt](https://github.com/nlochschmidt)), for all your work! - -#### 💥 Feature - -- Add support for Freeze Periods [#1231](https://github.com/jdalrymple/gitbeaker/pull/1231) ([@nlochschmidt](https://github.com/nlochschmidt) [@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 2 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) -- Niklas Lochschmidt ([@nlochschmidt](https://github.com/nlochschmidt)) - ---- - -# v24.0.3 (Mon Oct 12 2020) - -#### 🐛 Bug Fix - -- Merge branch '1222-integration-stability' \[skip ci\] ([@jdalrymple](https://github.com/jdalrymple)) - -#### ⚠️ Pushed to `master` - -- perform retries on a wider range of error codes ([@jdalrymple](https://github.com/jdalrymple)) -- Wrapping error messages to avoid JSON.parse non json responses ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v24.0.0 (Mon Oct 05 2020) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Sander Cox ([@sandercox](https://github.com/sandercox)), for all your work! - -#### 💥 Feature - -- feat: Get runners for a group [#1182](https://github.com/jdalrymple/gitbeaker/pull/1182) ([@sandercox](https://github.com/sandercox) [@jdalrymple](https://github.com/jdalrymple)) - -#### 🔩 Dependency Updates - -- chore(deps): bump ky from 0.23.0 to 0.24.0 [#1171](https://github.com/jdalrymple/gitbeaker/pull/1171) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) [@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 3 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) -- Sander Cox ([@sandercox](https://github.com/sandercox)) - ---- - -# v23.7.0 (Tue Sep 29 2020) - -#### 🐛 Bug Fix - -- Updating changelog \[skip ci\] ([@jdalrymple](https://github.com/jdalrymple)) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump @rollup/plugin-commonjs from 14.0.0 to 15.1.0 [#1166](https://github.com/jdalrymple/gitbeaker/pull/1166) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) [@jdalrymple](https://github.com/jdalrymple)) -- chore(deps-dev): bump @rollup/plugin-node-resolve from 8.4.0 to 9.0.0 [#1164](https://github.com/jdalrymple/gitbeaker/pull/1164) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) [@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 2 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v23.6.0 (Mon Sep 28 2020) - -#### 🚀 Enhancement - -- Restructuring the requester utils and update the related typings [#1163](https://github.com/jdalrymple/gitbeaker/pull/1163) ([@jdalrymple](https://github.com/jdalrymple)) -- Updating terser usage to be only on the browser release [#1163](https://github.com/jdalrymple/gitbeaker/pull/1163) ([@jdalrymple](https://github.com/jdalrymple)) -- Externalize formdata [#1163](https://github.com/jdalrymple/gitbeaker/pull/1163) ([@jdalrymple](https://github.com/jdalrymple)) - -#### 💥 Feature - -- Apply exponential backoff for 429 errors ([@max-wittig](https://github.com/max-wittig)) - -#### 🔩 Dependency Updates - -- Updating browser deps [#1163](https://github.com/jdalrymple/gitbeaker/pull/1163) ([@jdalrymple](https://github.com/jdalrymple)) -- Update ts-node [#1163](https://github.com/jdalrymple/gitbeaker/pull/1163) ([@jdalrymple](https://github.com/jdalrymple)) -- chore(deps-dev): bump typescript from 3.9.7 to 4.0.3 [#1163](https://github.com/jdalrymple/gitbeaker/pull/1163) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) -- chore(deps-dev): bump rollup-plugin-terser from 6.1.0 to 7.0.0 [#1058](https://github.com/jdalrymple/gitbeaker/pull/1058) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) [@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 3 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) -- Max Wittig ([@max-wittig](https://github.com/max-wittig)) - ---- - -# v23.5.0 (Sun Aug 09 2020) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Kipras Melnikovas ([@kiprasmel](https://github.com/kiprasmel)), for all your work! - -#### 🐛 Bug Fix - -- Fixing check for FormData [#1056](https://github.com/jdalrymple/gitbeaker/pull/1056) ([@jdalrymple](https://github.com/jdalrymple)) -- fix(browser): return early if response headers empty [#1034](https://github.com/jdalrymple/gitbeaker/pull/1034) ([@kiprasmel](https://github.com/kiprasmel)) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump puppeteer from 5.0.0 to 5.2.1 [#1000](https://github.com/jdalrymple/gitbeaker/pull/1000) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) [@jdalrymple](https://github.com/jdalrymple)) -- chore(deps-dev): bump @rollup/plugin-commonjs from 13.0.0 to 14.0.0 [#973](https://github.com/jdalrymple/gitbeaker/pull/973) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) [@jdalrymple](https://github.com/jdalrymple)) -- chore(deps): bump ky from 0.21.0 to 0.23.0 [#1001](https://github.com/jdalrymple/gitbeaker/pull/1001) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 3 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) -- Kipras Melnikovas ([@kiprasmel](https://github.com/kiprasmel)) - ---- - -# v23.4.1 (Wed Jul 22 2020) - -#### 🔩 Dependency Updates - -- chore(deps): bump ky from 0.20.0 to 0.21.0 [#961](https://github.com/jdalrymple/gitbeaker/pull/961) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) [@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 2 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v23.4.0 (Sun Jul 12 2020) - -#### 🐛 Bug Fix - -- Updating min node version supported [#957](https://github.com/jdalrymple/gitbeaker/pull/957) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v23.1.0 (Wed Jul 08 2020) - -#### 🐛 Bug Fix - -- Fixing up the Type exports for all the distributed libraries [#795](https://github.com/jdalrymple/gitbeaker/pull/795) ([@jdalrymple](https://github.com/jdalrymple)) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump puppeteer from 4.0.0 to 5.0.0 [#928](https://github.com/jdalrymple/gitbeaker/pull/928) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) [@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 2 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v22.0.0 (Sat Jun 20 2020) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump puppeteer from 3.1.0 to 4.0.0 [#895](https://github.com/jdalrymple/gitbeaker/pull/895) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 1 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) - ---- - -# v21.6.0 (Tue Jun 16 2020) - -#### 🐛 Bug Fix - -- Removal of esinterlop to prefer namespace imports over default exports [#893](https://github.com/jdalrymple/gitbeaker/pull/893) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v21.4.0 (Sun Jun 14 2020) - -#### 🐛 Bug Fix - -- Updating Changelog.md \[skip ci\] ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v21.3.0 (Sun Jun 14 2020) - -#### 🐛 Bug Fix - -- Bump version to: 21.3.0 \[skip ci\] ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v21.2.0 (Sun Jun 14 2020) - -#### 🐛 Bug Fix - -- Fixing package versions \[skip ci\] ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v21.0.1 (Fri Jun 12 2020) - -#### 👷🏼‍♀️ Technical Debt - -- Remove Gitlab Instance dependency for CLI tests [#883](https://github.com/jdalrymple/gitbeaker/pull/883) ([@jdalrymple](https://github.com/jdalrymple)) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump @rollup/plugin-commonjs from 11.1.0 to 13.0.0 [#876](https://github.com/jdalrymple/gitbeaker/pull/876) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) [@jdalrymple](https://github.com/jdalrymple)) -- chore(deps): bump ky from 0.19.1 to 0.20.0 [#804](https://github.com/jdalrymple/gitbeaker/pull/804) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 2 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v19.6.0 (Sat May 16 2020) - -#### 🔩 Dependencies - -- chore(deps-dev): bump @types/node from 13.13.5 to 14.0.1 [#790](https://github.com/jdalrymple/gitbeaker/pull/790) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 1 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) - ---- - -# v19.3.0 (Fri May 01 2020) - -#### 🐛 Bug Fix - -- Fixing types field to utils and browser package.json [#742](https://github.com/jdalrymple/gitbeaker/pull/742) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v19.2.0 (Wed Apr 29 2020) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Daniel Moore ([@danielmoore](https://github.com/danielmoore)), for all your work! - -#### 🐛 Bug Fix - -- Add types field to node and browser package.json [#737](https://github.com/jdalrymple/gitbeaker/pull/737) ([@danielmoore](https://github.com/danielmoore)) - -#### Authors: 1 - -- Daniel Moore ([@danielmoore](https://github.com/danielmoore)) - ---- - -# v19.0.0 (Thu Apr 23 2020) - -#### 💥 Breaking Change - -- Adding CLI Integration Tests and Preferring named exports [#711](https://github.com/jdalrymple/gitbeaker/pull/711) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v18.2.0 (Wed Apr 22 2020) - -#### 🐛 Bug Fix - -- Updating agent property based on new changes in Got [#712](https://github.com/jdalrymple/gitbeaker/pull/712) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v18.1.0 (Wed Apr 22 2020) - -#### 🚀 Enhancement - -- Adding integration tests for the browser usage [#697](https://github.com/jdalrymple/gitbeaker/pull/697) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v18.0.0 (Tue Apr 21 2020) - -#### 🐛 Bug Fix - -- Testing with verbose logs ([@jdalrymple](https://github.com/jdalrymple)) -- docs: Updating README badges ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v17.0.2 (Sun Apr 19 2020) - -#### 🔩 Dependencies - -- chore(deps-dev): bump rollup-plugin-typescript2 from 0.26.0 to 0.27.0 [#654](https://github.com/jdalrymple/gitbeaker/pull/654) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 1 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) diff --git a/packages/browser/README.md b/packages/browser/README.md deleted file mode 100644 index c9cb1b8c1..000000000 --- a/packages/browser/README.md +++ /dev/null @@ -1,39 +0,0 @@ -
-
- gitbeaker -
-
-

- - CircleCI Pipeline Status - - - Code Climate maintainability - - - CodeCov test coverage - - - Dependency Status - - - Dev Dependency Status - - - Auto - - - All Contributors - -Prettier - - Licence: MIT - - - Install Size: Core - -

- -🤖 [GitLab](https://gitlab.com/gitlab-org/gitlab/) API Browser library with full support of all the [Gitlab API](https://gitlab.com/gitlab-org/gitlab/tree/master/doc/api) services. - -[Read More](https://github.com/jdalrymple/gitbeaker#readme) diff --git a/packages/browser/jest.config.js b/packages/browser/jest.config.js deleted file mode 100644 index c9fcc3a48..000000000 --- a/packages/browser/jest.config.js +++ /dev/null @@ -1,7 +0,0 @@ -const base = require('../../jest.config.base'); - -module.exports = { - ...base, - preset: 'jest-playwright-preset', - displayName: '-- Gitbeaker Browser', -}; diff --git a/packages/browser/package.json b/packages/browser/package.json deleted file mode 100644 index 0c03442cb..000000000 --- a/packages/browser/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "@gitbeaker/browser", - "description": "Full Browser implementation of the GitLab API. Supports Promises, Async/Await.", - "version": "35.8.0", - "author": { - "name": "Justin Dalrymple" - }, - "bugs": { - "url": "https://github.com/jdalrymple/gitbeaker/issues" - }, - "dependencies": { - "@gitbeaker/core": "^35.8.0", - "@gitbeaker/requester-utils": "^35.8.0", - "delay": "^5.0.0", - "ky": "0.28.7" - }, - "devDependencies": { - "@rollup/plugin-commonjs": "^21.0.0", - "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-node-resolve": "^13.0.0", - "@rollup/plugin-replace": "^3.0.0", - "@types/node": "^18.0.3", - "headers-utils": "^3.0.2", - "jest-extended": "^3.0.0", - "jest-playwright-preset": "^1.5.1", - "node-fetch": "^3.0.0", - "playwright": "^1.9.2", - "rollup": "^2.47.0", - "rollup-plugin-node-globals": "^1.4.0", - "rollup-plugin-node-polyfills": "^0.2.1", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.31.1", - "tslib": "^2.3.1", - "typescript": "^4.2.4", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.2.0" - }, - "files": [ - "dist" - ], - "homepage": "https://github.com/jdalrymple/gitbeaker#readme", - "keywords": [ - "api", - "es5", - "es6", - "gitlab", - "gitbeaker", - "ky" - ], - "license": "MIT", - "browser": "dist/index.js", - "main": "dist/index.cjs.js", - "types": "dist/types", - "repository": { - "type": "git", - "url": "https://github.com/jdalrymple/gitbeaker" - }, - "scripts": { - "build": "rollup -c", - "test:integration": "TEST_ID=$(uuid) node --expose-gc ../../node_modules/.bin/jest --runInBand --logHeapUsage test/integration", - "test:unit": "node --expose-gc ../../node_modules/.bin/jest --runInBand --logHeapUsage test/unit" - } -} diff --git a/packages/browser/rollup.config.js b/packages/browser/rollup.config.js deleted file mode 100644 index 34c0dc4bb..000000000 --- a/packages/browser/rollup.config.js +++ /dev/null @@ -1,46 +0,0 @@ -import resolve from '@rollup/plugin-node-resolve'; -import commonjs from '@rollup/plugin-commonjs'; -import builtins from 'rollup-plugin-node-polyfills'; -import globals from 'rollup-plugin-node-globals'; -import ts from 'rollup-plugin-typescript2'; -import json from '@rollup/plugin-json'; -import { terser } from 'rollup-plugin-terser'; -import pkg from './package.json'; - -export default [ - { - input: 'src/index.ts', - external: ['form-data'], - output: [ - { - file: pkg.browser, - name: 'gitbeaker', - format: 'umd', - exports: 'named', - globals: { 'form-data': 'FormData' }, - sourcemap: true, - }, - { - file: pkg.main, // CommonJS (for Node) build. - format: 'cjs', - sourcemap: true, - }, - ], - plugins: [ - globals(), - builtins(), - resolve({ browser: true }), - ts({ - useTsconfigDeclarationDir: true, - tsconfigOverride: { - compilerOptions: { - baseUrl: '.', - }, - }, - }), - json(), - commonjs(), - terser({ mangle: false }), - ], - }, -]; diff --git a/packages/browser/src/KyRequester.ts b/packages/browser/src/KyRequester.ts deleted file mode 100644 index 21d458388..000000000 --- a/packages/browser/src/KyRequester.ts +++ /dev/null @@ -1,75 +0,0 @@ -import ky from 'ky'; -import delay from 'delay'; -import { - DefaultResourceOptions, - DefaultRequestReturn, - DefaultRequestOptions, - createRequesterFn, - defaultOptionsHandler as baseOptionsHandler, -} from '@gitbeaker/requester-utils'; - -export function defaultOptionsHandler( - serviceOptions: DefaultResourceOptions, - options: DefaultRequestOptions = {}, -): DefaultRequestReturn { - const opts: DefaultRequestReturn = baseOptionsHandler(serviceOptions, options); - - return { ...opts, headers: new Headers(opts.headers as Record) }; -} - -export async function processBody(response: Response) { - // Split to remove potential charset info from the content type - const contentType = (response.headers.get('content-type') || '').split(';')[0].trim(); - - if (contentType === 'application/json') { - return response.json().then((v) => v || {}); - } - - if (contentType.startsWith('text/')) { - return response.text().then((t) => t || ''); - } - - return response.arrayBuffer(); -} - -export async function handler(endpoint: string, options: Record) { - const retryCodes = [429, 502]; - const maxRetries = 10; - - for (let i = 0; i < maxRetries; i += 1) { - try { - const response = ky(endpoint, options); - - if (options.method === 'stream') return response; - - const resolved = await response; // eslint-disable-line - const { status, headers: rawHeaders } = resolved; - const headers = Object.fromEntries(rawHeaders.entries()); - const body = await processBody(resolved); // eslint-disable-line - - return { body, headers, status }; - } catch (e) { - const waitTime = 2 ** i * 0.1; - - if (e.response) { - if (retryCodes.includes(e.response.status)) { - await delay(waitTime); // eslint-disable-line - continue; // eslint-disable-line - } - - try { - const output = await e.response.json(); // eslint-disable-line - e.description = output.error || output.message; - } catch (err) { - e.description = await e.response.text(); // eslint-disable-line - } - } - - throw e; - } - } - - throw new Error('Could not successfully complete this request'); -} - -export const requesterFn = createRequesterFn(defaultOptionsHandler, handler); diff --git a/packages/browser/src/index.ts b/packages/browser/src/index.ts deleted file mode 100644 index 8d082e90c..000000000 --- a/packages/browser/src/index.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { Resources } from '@gitbeaker/core'; -import { presetResourceArguments } from '@gitbeaker/requester-utils'; -import { requesterFn } from './KyRequester'; - -const API = presetResourceArguments(Resources, { requesterFn }); - -export { Types } from '@gitbeaker/core'; - -export const { - // Groups - Groups, - GroupAccessRequests, - GroupBadges, - GroupCustomAttributes, - GroupIssueBoards, - GroupMembers, - GroupMilestones, - GroupRunners, - GroupVariables, - GroupLabels, - GroupDeployTokens, - Epics, - EpicIssues, - EpicNotes, - EpicDiscussions, - - // Users - Users, - UserCustomAttributes, - UserEmails, - UserImpersonationTokens, - UserSSHKeys, - UserGPGKeys, - - // Projects - Branches, - Commits, - CommitDiscussions, - ContainerRegistry, - Deployments, - DeployKeys, - Environments, - FreezePeriods, - Issues, - IssuesStatistics, - IssueNotes, - IssueNoteAwardEmojis, - IssueDiscussions, - IssueAwardEmojis, - Jobs, - Labels, - MergeRequests, - MergeRequestApprovals, - MergeRequestAwardEmojis, - MergeRequestDiscussions, - MergeRequestNotes, - Packages, - PackageRegistry, - Pipelines, - PipelineSchedules, - PipelineScheduleVariables, - Projects, - ProjectAccessRequests, - ProjectBadges, - ProjectCustomAttributes, - ProjectImportExport, - ProjectIssueBoards, - ProjectHooks, - ProjectMembers, - ProjectMilestones, - ProjectSnippets, - ProjectSnippetNotes, - ProjectSnippetDiscussions, - ProjectSnippetAwardEmojis, - ProtectedBranches, - ProtectedTags, - ProjectVariables, - ProjectDeployTokens, - PushRules, - Releases, - ReleaseLinks, - Repositories, - RepositoryFiles, - RepositorySubmodules, - Runners, - Services, - Tags, - Todos, - Triggers, - VulnerabilityFindings, - - // Genral - ApplicationSettings, - BroadcastMessages, - Events, - FeatureFlags, - GeoNodes, - GitignoreTemplates, - GitLabCIYMLTemplates, - Keys, - License, - LicenseTemplates, - Lint, - Namespaces, - NotificationSettings, - Markdown, - PagesDomains, - Search, - SidekiqMetrics, - Snippets, - SystemHooks, - Version, - Wikis, - - Gitlab, -} = API; diff --git a/packages/browser/test/integration/assets/test-import.html b/packages/browser/test/integration/assets/test-import.html deleted file mode 100644 index 8e8f2fd45..000000000 --- a/packages/browser/test/integration/assets/test-import.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - Document - - - - - diff --git a/packages/browser/test/integration/index.ts b/packages/browser/test/integration/index.ts deleted file mode 100644 index bf137bb8c..000000000 --- a/packages/browser/test/integration/index.ts +++ /dev/null @@ -1,72 +0,0 @@ -import 'jest-extended'; -import * as path from 'path'; -import { Resources } from '@gitbeaker/core'; -import { chromium, Browser, Page } from 'playwright'; - -const { TEST_ID = '', GITLAB_PERSONAL_ACCESS_TOKEN = '', GITLAB_URL = '' } = process.env; -let browser: Browser; -let page: Page; - -beforeAll(async () => { - browser = await chromium.launch({ - timeout: 120000, - }); -}); - -afterAll(async () => { - await browser.close(); -}); - -beforeEach(async () => { - page = await browser.newPage(); - page.setDefaultTimeout(120000); -}); - -afterEach(async () => { - await page.close(); -}); - -describe('Browser Import', () => { - it('should import the Gitbeaker library though the global gitbeaker', async () => { - const { Gitlab, ...coreResources } = Resources; - - await page.goto(`file://${path.resolve(__dirname, 'assets', 'test-import.html')}`); - - // Run import JS - /* eslint-disable */ - const importObject = await page.evaluate(() => { - // @ts-ignore - const { Gitlab } = gitbeaker; - const gl = new Gitlab(); - - return gl; - }); - /* eslint-enable */ - - expect(Object.keys(importObject)).toIncludeAllMembers(Object.keys(coreResources)); - }); -}); - -describe('Projects API', () => { - it('should create a project', async () => { - await page.goto(`file://${path.resolve(__dirname, 'assets', 'test-import.html')}`); - - /* eslint-disable */ - const project = await page.evaluate( - ([host, token, id]) => { - // @ts-ignore - const { Projects } = gitbeaker; - const resource = new Projects({ - host, - token, - }); - - return resource.create({ name: `Project Creation Integration Test ${id}` }); - }, - [GITLAB_URL, GITLAB_PERSONAL_ACCESS_TOKEN, TEST_ID], - ); - - expect(project).toBeInstanceOf(Object); - expect(project.name).toEqual(`Project Creation Integration Test ${TEST_ID}`); - }); -}); diff --git a/packages/browser/test/unit/KyRequester.ts b/packages/browser/test/unit/KyRequester.ts deleted file mode 100644 index 45a0625a5..000000000 --- a/packages/browser/test/unit/KyRequester.ts +++ /dev/null @@ -1,183 +0,0 @@ -import ky from 'ky'; -import { Headers } from 'headers-utils'; -import { processBody, handler, defaultOptionsHandler } from '../../src/KyRequester'; - -global.Headers = Headers; - -jest.mock('ky'); - -const MockKy = ky as unknown as jest.Mock; - -describe('processBody', () => { - it('should return a json object if type is application/json', async () => { - const output = await processBody({ - json() { - return Promise.resolve({ test: 5 }); - }, - headers: { - get() { - return 'application/json'; - }, - }, - } as unknown as Response); - - expect(output).toMatchObject({ test: 5 }); - }); - - it('should return a buffer if type is octet-stream, binary, or gzip', async () => { - const output = [ - processBody({ - arrayBuffer() { - return Promise.resolve(Buffer.alloc(0)); - }, - headers: { - get() { - return 'application/octet-stream'; - }, - }, - } as unknown as Response), - processBody({ - arrayBuffer() { - return Promise.resolve(Buffer.alloc(0)); - }, - headers: { - get() { - return 'binary/octet-stream'; - }, - }, - } as unknown as Response), - processBody({ - arrayBuffer() { - return Promise.resolve(Buffer.alloc(0)); - }, - headers: { - get() { - return 'image/png'; - }, - }, - } as unknown as Response), - processBody({ - arrayBuffer() { - return Promise.resolve(Buffer.alloc(0)); - }, - headers: { - get() { - return 'application/gzip'; - }, - }, - } as unknown as Response), - ]; - - const fulfilled = await Promise.all(output); - - fulfilled.forEach((o) => expect(o).toBeInstanceOf(Buffer)); - }); - - it('should return a string if type is text/', async () => { - const output = await processBody({ - text() { - return Promise.resolve('test'); - }, - headers: { - get() { - return 'text/plain'; - }, - }, - } as unknown as Response); - - expect(typeof output).toBe('string'); - expect(output).toEqual('test'); - }); - - it('should return a empty string when presented with an unknown content-type and empty body', async () => { - const output = await processBody({ - arrayBuffer() { - return Promise.resolve(Buffer.alloc(0)); - }, - headers: { - get() { - return 'fake'; - }, - }, - } as unknown as Response); - - expect(output).toBeInstanceOf(Buffer); - expect(output.length).toBe(0); - }); -}); - -describe('handler', () => { - it('should return an error with a description when response has an error prop', async () => { - MockKy.mockImplementationOnce(() => { - const e = { - response: { - json() { - return Promise.resolve({ error: 'msg' }); - }, - }, - }; - return Promise.reject(e); - }); - - await expect(handler('http://test.com', {})).rejects.toMatchObject({ description: 'msg' }); - }); - - it('should return an error with a description when response has an message prop', async () => { - MockKy.mockImplementationOnce(() => { - const e = { - response: { - json() { - return Promise.resolve({ message: 'msg' }); - }, - }, - }; - return Promise.reject(e); - }); - - await expect(handler('http://test.com', {})).rejects.toMatchObject({ description: 'msg' }); - }); - - it('should return correct properties if request is valid', async () => { - MockKy.mockImplementationOnce(() => ({ - status: 404, - headers: { - get() { - return 'application/json'; - }, - entries() { - return [['token', '1234']]; - }, - }, - json() { - return Promise.resolve({}); - }, - })); - - const output = await handler('http://test.com', {}); - - expect(output).toMatchObject({ - body: {}, - headers: {}, - status: 404, - }); - }); -}); - -describe('defaultRequest', () => { - const service = { - headers: { test: '5' }, - url: 'testurl', - requestTimeout: 50, - rejectUnauthorized: true, - }; - - it('should stringify body if it isnt of type FormData', () => { - const testBody = { test: 6 }; - const { body, headers } = defaultOptionsHandler(service, { - body: testBody, - }); - - expect(headers).toBeInstanceOf(Headers); - expect(body).toBe(JSON.stringify(testBody)); - }); -}); diff --git a/packages/browser/test/unit/index.ts b/packages/browser/test/unit/index.ts deleted file mode 100644 index 0372e8c74..000000000 --- a/packages/browser/test/unit/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import 'jest-extended'; -import { Resources as coreResources } from '@gitbeaker/core'; -import * as BrowserGB from '../../src'; - -const { Types, ...browserResources } = BrowserGB; - -describe('Browser Import', () => { - it('should re-export all resources from core', () => { - expect(Object.keys(browserResources)).toIncludeAllMembers(Object.keys(coreResources)); - }); -}); diff --git a/packages/browser/tsconfig.json b/packages/browser/tsconfig.json deleted file mode 100644 index 253883196..000000000 --- a/packages/browser/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "target": "es2016", - "lib": ["es2017", "esnext", "dom", "dom.iterable"], - "outDir": "./dist", - "declaration": true, - "declarationDir": "dist/types" - }, - "include": ["src"] -} diff --git a/packages/cli/README.md b/packages/cli/README.md index f5852a57f..b74fa67ba 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -1,39 +1,198 @@

- gitbeaker + gitbeaker

- - CircleCI Pipeline Status - - - Code Climate maintainability - - - CodeCov test coverage - - - Dependency Status - - - Dev Dependency Status - - - Auto - - - All Contributors - -Prettier + pipeline status + coverage report + + Code Climate maintainability + + + Dependency Status + + + Auto + + + All Contributors + + Prettier Licence: MIT - Install Size: Core + Install Size: CLI

-🤖 [GitLab](https://gitlab.com/gitlab-org/gitlab/) API CLI library with full support of all the [Gitlab API](https://gitlab.com/gitlab-org/gitlab/tree/master/doc/api) services. +> A CLI Wrapper for the [@gitbeaker/rest](https://www.npmjs.com/package/@gitbeaker/rest) SDK. + +## Table of Contents + +- [Usage](#usage) +- [Contributors](#contributors) +- [Changelog](./CHANGELOG.md) + +## Usage + + + + + +
+Node 18+ + + +Install with npm install -g @gitbeaker/cli, or yarn add -g @gitbeaker/cli + +```bash +gitbeaker [service name] [method name] --config_args pos_arg1 pos_argN --opts_arg1 --opts_argN + +# A shorthand can also be used: +gb [service name] [method name] --config_args pos_arg1 pos_argN --opts_arg1 --opts_argN +``` + +Where: + +- `service name` is any of the supported API names of the [@gitbeaker/rest](https://github.com/jdalrymple/gitbeaker/blob/main/packages/rest/README.md) sdk +- `method name` is any of the supported commands on that API service (See source for exceptions, but generally all, show, remove, update) +- `--config_args` is any of general configuration arguments such as your personal token. These are outlined in this [table](https://github.com/jdalrymple/gitbeaker/blob/main/README.md?#api-client) and can also be found by looking at the cli help menu. These arguments must also include a `gb` or `gl` prefix. ie. + +```bash +# To get all the projects +gitbeaker projects all --gb-token="personaltoken" +``` + +- `pos_arg1 ... pos_argN` are any of the arguments you would normally supply to the function. The names of the args should match the names in the method headers. These positional arguments can also be written as flag arguments: `--pos_arg1 ... --pos_argN`, **BUT** must be written in the correct order. +- `--opts_arg1 ...--opts_argN` are any of the optional arguments that you would normally supply to the function. Their names should match what the GitLab API docs request. + +```bash +# To get all the projects id=2 and optional parameter "search" = "cool" +gitbeaker projects all --gb-token="personaltoken" 2 --search="cool" +``` + +To reduce the annoyance of having to pass those configuration properties each time, it is also possible to pass the token and host information through environment variables in the form of `GITLAB_[option name]` or `GITBEAKER_[option name]` ie: + +```bash +GITLAB_HOST=http://example.com +GITLAB_TOKEN=personaltoken +GITBEAKER_CAMELIZE=true +``` + +This could be set globally or using a [.env](https://github.com/motdotla/dotenv#readme) file in the project folder. + +
+ +## Contributors + + + + +

+ + Justin Dalrymple + Dylan DesRosier + Mike Wyatt + Cory Zibeill + Martin Bour + akira345 + Pavel Birukov + Joseph Petersen + Louis Cherel + Adam Dehnel + Ev Haus + Loïc Mahieu + Giuseppe Angri + jennparise + Oscar + Daniel Ruf + schindld + Alvaro + Daniel Moore + Dylan M. Taylor + Corentin Mors + xatavian + Yevgeny Petukhov + Mickaël Tricot + Andrea + Flavien Bridault +
+ +
s-kazuki + Kipras Melnikovas + xieyu + st1gok + Max Wittig + Niklas Lochschmidt + Ilya Dus + Omar Awamry + Hennadii Varava + xiezht + Martin Helmich + Sean McGivern + Clemens Lieb + Vojtěch Sajdl + divido + Vincent Boulaye + Aliyss Snow + Mahmoud Saada + Feng Yu + Roy Jacobs + Paul Lemke + Ian Jenkins + nilennoct + Laffargue Michael + Martin Howarth + Christoph Lehmann +
+ +
Frank V + Salim Benabbou + Tamás Török-Vistai + Martin Benninger + fewieden + Jeff Pelton + Claude Abounegm + Stefan Hall + Jordan Wallet + zhao0 + Joshua Grosso + Isaac Ouellet Therrien + Rajat Sharma + Cesar B. + Igor Katsuba + Michael Townsend + bodtx + Artem + Munif Tanjim + Quentin Dreyer + Norm MacLennan + jnovick + Fabian Aussems + Michael Matzka + CraigAllardyce + Bruno Guimarães +
+ +
Lukas Eipert + Maximilian Krauß + Evolution Engineering + WEBER Logan + Anton Zhukov + Nicholas Loomans + Carl Kittelberger + Patrik Votoček + Kyrylo Fedorov + Claudio Vellage + Seb0uil + +

+ + + + + -[Read More](https://github.com/jdalrymple/gitbeaker#readme) +This started as a fork from [node-gitlab-legacy](https://github.com/rest-gitlab/rest-gitlab-legacy) but I ended up rewriting much of the code. Here are the original work's [contributors](https://github.com/rest-gitlab/rest-gitlab-legacy#contributors). diff --git a/packages/cli/jest.config.js b/packages/cli/jest.config.js deleted file mode 100644 index c3a174ab4..000000000 --- a/packages/cli/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -const base = require('../../jest.config.base'); - -module.exports = { - ...base, - displayName: 'Gitbeaker CLI', -}; diff --git a/packages/cli/jest.config.mjs b/packages/cli/jest.config.mjs new file mode 100644 index 000000000..75f21487e --- /dev/null +++ b/packages/cli/jest.config.mjs @@ -0,0 +1,6 @@ +import base from '../../jest.config.base.mjs'; + +export default { + ...base, + displayName: 'Gitbeaker CLI', +}; diff --git a/packages/cli/lint-staged.config.mjs b/packages/cli/lint-staged.config.mjs new file mode 100644 index 000000000..2e761d30e --- /dev/null +++ b/packages/cli/lint-staged.config.mjs @@ -0,0 +1 @@ +export { default } from '../../lint-staged.config.base.mjs' diff --git a/packages/cli/package.json b/packages/cli/package.json index 73419fa45..b41de63df 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,57 +1,60 @@ { "name": "@gitbeaker/cli", - "description": "Full NodeJS CLI implementation of the GitLab API.", - "version": "35.8.0", - "author": { - "name": "Justin Dalrymple" + "version": "36.0.1", + "description": "CLI implementation of the GitLab API.", + "license": "MIT", + "engines": { + "node": ">=18.0.0" }, - "bin": { - "gitbeaker": "dist/index.js" + "repository": { + "type": "git", + "url": "https://github.com/jdalrymple/gitbeaker" }, "bugs": { "url": "https://github.com/jdalrymple/gitbeaker/issues" }, - "dependencies": { - "@gitbeaker/core": "^35.8.0", - "@gitbeaker/node": "^35.8.0", - "chalk": "4.1.2", - "ora": "^6.0.0", - "sywac": "^1.3.0", - "xcase": "^2.0.1" - }, - "devDependencies": { - "@rollup/plugin-json": "^4.1.0", - "jest-extended": "^3.0.0", - "rollup": "^2.47.0", - "rollup-plugin-preserve-shebangs": "^0.2.0", - "rollup-plugin-typescript2": "^0.31.1", - "strip-ansi": "^7.0.0", - "tslib": "^2.3.1", - "typescript": "^4.2.4", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.2.0" - }, - "files": [ - "dist" - ], "homepage": "https://github.com/jdalrymple/gitbeaker#readme", + "author": { + "name": "Justin Dalrymple" + }, "keywords": [ - "api", - "cli", "gitbeaker", "gitlab", - "got" + "api", + "cli" ], - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/jdalrymple/gitbeaker" + "bin": { + "gb": "dist/index.mjs", + "gitbeaker": "dist/index.mjs" }, + "files": [ + "dist" + ], "scripts": { - "build": "rollup -c", - "test:integration": "TEST_ID=$(uuid) node --expose-gc ../../node_modules/.bin/jest --runInBand --logHeapUsage test/integration", - "test:unit": "node --expose-gc ../../node_modules/.bin/jest --runInBand --logHeapUsage test/unit" + "build": "tsup src/index.ts --format esm --treeshake --target node18", + "test:integration": "jest --maxWorkers=50% test/integration", + "test:e2e": "jest --maxWorkers=50% test/e2e", + "format:docs": "prettier '**/(*.json|.yml|.js|.md)' --ignore-path ../../.prettierignore", + "format:docs:fix": "yarn format:docs --write", + "format:src": "prettier '{src,test}/**/*.ts' --ignore-path ../../.prettierignore", + "format:src:fix": "yarn format:src --write", + "format": "yarn format:src && yarn format:docs", + "format:fix": "yarn format:src:fix && yarn format:docs:fix", + "lint": "eslint '{src,test}/**/*.ts'", + "lint:fix": "yarn lint --fix", + "release:rc": "auto next", + "release:canary": "auto canary", + "release": "auto shipit" + }, + "dependencies": { + "@gitbeaker/core": "36.0.1", + "@gitbeaker/rest": "36.0.1", + "chalk": "4.1.2", + "sywac": "^1.3.0", + "xcase": "^2.0.1" + }, + "devDependencies": { + "tsup": "^6.7.0", + "typescript": "^4.9.5" } } diff --git a/packages/cli/rollup.config.js b/packages/cli/rollup.config.js deleted file mode 100644 index 156ae1a25..000000000 --- a/packages/cli/rollup.config.js +++ /dev/null @@ -1,24 +0,0 @@ -import json from '@rollup/plugin-json'; -import ts from 'rollup-plugin-typescript2'; -import { preserveShebangs } from 'rollup-plugin-preserve-shebangs'; -import pkg from './package.json'; - -export default { - input: 'src/index.ts', - external: [...Object.keys(pkg.dependencies || {}), ...Object.keys(pkg.peerDependencies || {})], - output: { - file: pkg.bin.gitbeaker, - format: 'cjs', - sourcemap: true, - }, - plugins: [ - ts({ - tsconfigOverride: { - baseUrl: '.', - }, - useTsconfigDeclarationDir: true, - }), - json(), - preserveShebangs(), - ], -}; diff --git a/packages/cli/src/cli.ts b/packages/cli/src/cli.ts index 4a22ad0e6..9f6305011 100644 --- a/packages/cli/src/cli.ts +++ b/packages/cli/src/cli.ts @@ -1,8 +1,8 @@ import Chalk from 'chalk'; import Sywac from 'sywac'; import { camelize, decamelize, depascalize } from 'xcase'; -import * as Gitbeaker from '@gitbeaker/node'; -import { getAPIMap } from '@gitbeaker/core'; +import * as Gitbeaker from '@gitbeaker/rest'; +import API_MAP from '@gitbeaker/core/map.json' assert { type: 'json' }; // eslint-disable-line import/no-unresolved // Styling settings const commandStyle = Chalk.hex('#e34329').bold; @@ -12,74 +12,93 @@ const optionStyle = Chalk.white.bold; const descriptionStyle = Chalk.hex('#848484'); const hintStyle = Chalk.hex('#6a5f88'); +interface MethodTemplate { + name: string; + args: string[]; +} + // Globally configurable arguments +function normalizeEnviromentVariables(env): Record { + const normalized = { ...env }; + const suffixes = [ + 'TOKEN', + 'OAUTH_TOKEN', + 'JOB_TOKEN', + 'HOST', + 'SUDO', + 'CAMELIZE', + 'REQUEST_TIMEOUT', + 'PROFILE_TOKEN', + 'PROFILE_MODE', + ]; + + suffixes.forEach((s) => { + if (normalized[`GITLAB_${s}`] && !normalized[`GITBEAKER_${s}`]) { + normalized[`GITBEAKER_${s}`] = normalized[`GITLAB_${s}`]; + } + }); + + return normalized; +} + function globalConfig(env = process.env): { [name: string]: Sywac.Options } { + const normalEnv = normalizeEnviromentVariables(env); + return { 'gb-token': { alias: 'gl-token', desc: 'Your Gitlab Personal Token', type: 'string', - defaultValue: env.GITBEAKER_TOKEN || env.GITLAB_TOKEN, + defaultValue: normalEnv.GITBEAKER_TOKEN, }, 'gb-oauth-token': { alias: 'gl-oauth-token', desc: 'Your Gitlab OAuth Token', type: 'string', - defaultValue: env.GITBEAKER_OAUTH_TOKEN || env.GITLAB_OAUTH_TOKEN, + defaultValue: normalEnv.GITBEAKER_OAUTH_TOKEN, }, 'gb-job-token': { alias: 'gl-job-token', desc: 'Your Gitlab Job Token', type: 'string', - defaultValue: env.GITBEAKER_JOB_TOKEN || env.GITLAB_JOB_TOKEN, + defaultValue: normalEnv.GITBEAKER_JOB_TOKEN, }, 'gb-host': { alias: 'gl-host', desc: 'Your Gitlab API host (Defaults to https://www.gitlab.com)', type: 'string', - defaultValue: env.GITBEAKER_HOST || env.GITLAB_HOST, - }, - 'gb-version': { - alias: 'gl-version', - desc: 'The targetted Gitlab API version (Defaults to 4)', - type: 'number', - defaultValue: - (env.GITBEAKER_VERSION && parseInt(env.GITBEAKER_VERSION, 10)) || - (env.GITLAB_VERSION && parseInt(env.GITLAB_VERSION, 10)), + defaultValue: normalEnv.GITBEAKER_HOST, }, 'gb-sudo': { alias: 'gl-sudo', desc: '[Sudo](https://docs.gitlab.com/ee/api/#sudo) query parameter', type: 'string', - defaultValue: env.GITBEAKER_SUDO || env.GITLAB_SUDO, + defaultValue: normalEnv.GITBEAKER_SUDO, }, 'gb-camelize': { alias: 'gl-camelize', desc: 'Camelizes all response body keys', type: 'boolean', - defaultValue: - (env.GITBEAKER_CAMELIZE && env.GITBEAKER_CAMELIZE === 'true') || - (env.GITLAB_CAMELIZE && env.GITLAB_CAMELIZE === 'true'), + defaultValue: normalEnv.GITBEAKER_CAMELIZE, }, 'gb-request-timeout': { alias: 'gl-request-timeout', desc: 'Timeout for API requests. Measured in ms', type: 'number', defaultValue: - (env.GITBEAKER_REQUEST_TIMEOUT && parseInt(env.GITBEAKER_REQUEST_TIMEOUT, 10)) || - (env.GITBEAKER_REQUEST_TIMEOUT && parseInt(env.GITBEAKER_REQUEST_TIMEOUT, 10)), + normalEnv.GITBEAKER_REQUEST_TIMEOUT && parseInt(normalEnv.GITBEAKER_REQUEST_TIMEOUT, 10), }, 'gb-profile-token': { alias: 'gl-profile-token', desc: '[Requests Profiles Token](https://docs.gitlab.com/ee/administration/monitoring/performance/request_profiling.html)', type: 'string', - defaultValue: env.GITBEAKER_PROFILE_TOKEN || env.GITLAB_PROFILE_TOKEN, + defaultValue: normalEnv.GITBEAKER_PROFILE_TOKEN, }, 'gb-profile-mode': { alias: 'gl-profile-mode', desc: '[Requests Profiles Token](https://docs.gitlab.com/ee/administration/monitoring/performance/request_profiling.html)', type: 'string', - defaultValue: env.GITBEAKER_PROFILE_MODE || env.GITLAB_PROFILE_MODE, + defaultValue: normalEnv.GITBEAKER_PROFILE_MODE, }, }; } @@ -88,15 +107,26 @@ function globalConfig(env = process.env): { [name: string]: Sywac.Options } { const ignoreOptions = ['_', '$0', 'v', 'version', 'h', 'help', 'g', 'global-args']; // Helper function to param case strings -function param(string: string): string { - let cleaned = string; +function param(value: string): string { + let cleaned = value; // Handle exceptions - const exceptions = ['GitLabCI', 'YML', 'GPG', 'SSH']; - - const ex = exceptions.find((e) => string.includes(e)); - - if (ex) cleaned = cleaned.replace(ex, ex.charAt(0).toUpperCase() + ex.slice(1)); + const exceptions = [ + 'GitLabCI', + 'YML', + 'GPG', + 'SSH', + 'IId', + 'NPM', + 'NuGet', + 'DORA4', + 'LDAP', + 'CICD', + ]; + + const ex = exceptions.find((e) => value.includes(e)); + + if (ex) cleaned = cleaned.replace(ex, ex.charAt(0).toUpperCase() + ex.slice(1).toLowerCase()); // Decamelize const decamelized = decamelize(cleaned, '-'); @@ -104,7 +134,7 @@ function param(string: string): string { return decamelized !== cleaned ? decamelized : depascalize(cleaned, '-'); } -function setupAPIMethods(setupArgs, methodArgs: unknown[]) { +function setupAPIMethods(setupArgs, methodArgs: string[]) { methodArgs.forEach((name) => { if (typeof name !== 'string') return; @@ -117,7 +147,7 @@ function setupAPIMethods(setupArgs, methodArgs: unknown[]) { return setupArgs; } -function runAPIMethod(ctx, args, apiName: string, method) { +function runAPIMethod(ctx, args: Record, apiName: string, method: MethodTemplate) { const coreArgs = {}; const optionalArgs = {}; const initArgs = {}; @@ -125,7 +155,7 @@ function runAPIMethod(ctx, args, apiName: string, method) { Object.entries(args).forEach(([argName, value]) => { if (ignoreOptions.includes(argName) || value == null) return; - const camelCased = camelize(argName.replace('gb-', '').replace('gl-', ''), '-'); + const camelCased: string = camelize(argName.replace('gb-', '').replace('gl-', ''), '-'); if (globalConfig()[argName.replace('gl-', 'gb-')]) { initArgs[camelCased] = value; @@ -146,7 +176,7 @@ function runAPIMethod(ctx, args, apiName: string, method) { }); } -function setupAPIs(setupArgs, apiName: string, methods) { +function setupAPIs(setupArgs, apiName: string, methods: MethodTemplate[]) { Object.entries(globalConfig()).forEach(([k, v]) => { setupArgs.option(`${k} `, { group: 'Base Options', @@ -159,7 +189,7 @@ function setupAPIs(setupArgs, apiName: string, methods) { setupArgs.command(param(method.name), { setup: (setupMethodArgs) => setupAPIMethods(setupMethodArgs, method.args), - run: (args, ctx) => runAPIMethod(ctx, args, apiName, method), + run: (args: Record, ctx) => runAPIMethod(ctx, args, apiName, method), }); } @@ -170,7 +200,7 @@ function setupAPIs(setupArgs, apiName: string, methods) { const cli = Sywac.version('-v, --version') .help('-h, --help') .showHelpByDefault() - .epilogue('Copyright 2019') + .epilogue('Copyright 2023') .style({ usagePrefix: (s) => usageStyle(s), group: (s) => groupStyle(s), @@ -208,7 +238,7 @@ cli.command('*', (argv, ctx) => { }); // Add all supported API's -Object.entries(getAPIMap()).forEach(([apiName, methods]) => { +Object.entries(API_MAP as Record).forEach(([apiName, methods]) => { // Skip Gitlab export if (apiName === 'Gitlab') return; diff --git a/packages/cli/test/e2e/index.ts b/packages/cli/test/e2e/index.ts new file mode 100644 index 000000000..4b6fbdcae --- /dev/null +++ b/packages/cli/test/e2e/index.ts @@ -0,0 +1,11 @@ +import pkg from '../../package.json'; + +describe('General', () => { + it('should return the expose a gitbeaker commnad', () => { + expect(pkg.bin).toHaveProperty('gitbeaker'); + }); + + it('should return the expose a gb commnad', () => { + expect(pkg.bin).toHaveProperty('gb'); + }); +}); diff --git a/packages/cli/test/e2e/resources/Projects.ts b/packages/cli/test/e2e/resources/Projects.ts new file mode 100644 index 000000000..1d28f180d --- /dev/null +++ b/packages/cli/test/e2e/resources/Projects.ts @@ -0,0 +1,16 @@ +import { promisify } from 'node:util'; +import { exec } from 'node:child_process'; + +const execP = promisify(exec); + +const { GITLAB_PERSONAL_ACCESS_TOKEN = '', GITLAB_URL = '', TEST_ID = Date.now() } = process.env; + +describe('gitbeaker projects create', () => { + it('should create a valid project', async () => { + const command = `projects create --name="CLI Project - e2e ${TEST_ID}" --gb-token="${GITLAB_PERSONAL_ACCESS_TOKEN}" --gb-host="${GITLAB_URL}"`; + const { stdout } = await execP(`node dist/index.mjs ${command}`); + const { name } = JSON.parse(stdout); + + expect(name).toBe(`CLI Project - e2e ${TEST_ID}`); + }); +}); diff --git a/packages/cli/test/integration/index.ts b/packages/cli/test/integration/index.ts new file mode 100644 index 000000000..37d1992e2 --- /dev/null +++ b/packages/cli/test/integration/index.ts @@ -0,0 +1,311 @@ +import pkg from '../../package.json'; + +jest.mock('@gitbeaker/core/map.json', () => ({ + Projects: [ + { + name: 'constructor', + args: [ + 'token', + 'jobToken', + 'oauthToken', + 'sudo', + 'profileToken', + 'requesterFn', + 'profileMode', + 'host', + 'prefixUrl', + 'version', + 'camelize', + 'rejectUnauthorized', + 'requestTimeout', + ], + }, + { + name: 'all', + args: [], + }, + { + name: 'create', + args: [], + }, + ], +})); + +jest.mock('@gitbeaker/rest'); + +const OLD_ENV = process.env; +let Projects; + +beforeEach(async () => { + jest.resetModules(); + + ({ Projects } = await import('@gitbeaker/rest')); + + process.env = { ...OLD_ENV }; +}); + +afterEach(() => { + process.env = OLD_ENV; +}); + +describe('gitbeaker -v -- Package Version', () => { + it('should return the current version number of the package', async () => { + const { cli } = await import('../../src/cli'); + const { output } = await cli.parse('-v'); + + expect(output).toBe(pkg.version); + }); +}); + +describe('gitbeaker -g -- CLI global Enviroment Variables', () => { + it('should return an object of available gitbeaker cli.parse environment variables -- --global-args alias', async () => { + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(output).toBe('No global variables have been set!'); + }); + + it('should return an object of available gitbeaker cli.parse environment variables -- -g alias', async () => { + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(output).toBe('No global variables have been set!'); + }); + + it('should only have the personal token set', async () => { + process.env.GITBEAKER_TOKEN = 'token1'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-token'].value as string).toBe('token1'); + }); + + it('should only have the personal token set by alias', async () => { + process.env.GITLAB_TOKEN = 'glfaketoken'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-token'].value as string).toBe('glfaketoken'); + }); + + it('should only have the oauth token set', async () => { + process.env.GITBEAKER_OAUTH_TOKEN = 'gboafaketoken'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-oauth-token'].value as string).toBe('gboafaketoken'); + }); + + it('should only have the oauth token set by alias', async () => { + process.env.GITLAB_OAUTH_TOKEN = 'gloafaketoken'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-oauth-token'].value as string).toBe('gloafaketoken'); + }); + + it('should only have the job token set', async () => { + process.env.GITBEAKER_JOB_TOKEN = 'gbjfaketoken'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-job-token'].value as string).toBe('gbjfaketoken'); + }); + + it('should only have the job token set by alias', async () => { + process.env.GITLAB_JOB_TOKEN = 'gljfaketoken'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-job-token'].value as string).toBe('gljfaketoken'); + }); + + it('should only have the host set', async () => { + process.env.GITBEAKER_HOST = 'www.gbfakehost.com'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-host'].value as string).toBe('www.gbfakehost.com'); + }); + + it('should only have the host set by alias', async () => { + process.env.GITLAB_HOST = 'www.ghfakehost.com'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-host'].value as string).toBe('www.ghfakehost.com'); + }); + + it('should only have sudo set', async () => { + process.env.GITBEAKER_SUDO = 'gbsudoaccount'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-sudo'].value as string).toBe('gbsudoaccount'); + }); + + it('should only have sudo set by alias', async () => { + process.env.GITLAB_SUDO = 'glsudoaccount'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-sudo'].value as string).toBe('glsudoaccount'); + }); + + it('should only have the camelize set', async () => { + process.env.GITBEAKER_CAMELIZE = 'true'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-camelize'].value as string).toBe('true'); + }); + + it('should only have the camelize set by alias', async () => { + process.env.GITLAB_CAMELIZE = 'true'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-camelize'].value as string).toBe('true'); + }); + + it('should only have the profile token set', async () => { + process.env.GITBEAKER_PROFILE_TOKEN = 'gbptoken'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-profile-token'].value as string).toBe('gbptoken'); + }); + + it('should only have the profile token set by alias', async () => { + process.env.GITLAB_PROFILE_TOKEN = 'glptoken'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-profile-token'].value as string).toBe('glptoken'); + }); + + it('should only have the profile mode set', async () => { + process.env.GITBEAKER_PROFILE_MODE = 'gbpmode'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-profile-mode'].value as string).toBe('gbpmode'); + }); + + it('should only have the profile mode set by alias', async () => { + process.env.GITLAB_PROFILE_MODE = 'glpmode'; + + const { cli } = await import('../../src/cli'); + const { output }: { output: string } = await cli.parse('-g'); + + expect(JSON.parse(output)['gb-profile-mode'].value as string).toBe('glpmode'); + }); +}); + +describe('gitbeaker projects create', () => { + it('should create a valid project using configuration from environment variables', async () => { + process.env.GITBEAKER_HOST = 'host'; + process.env.GITBEAKER_TOKEN = 'token'; + + const { cli } = await import('../../src/cli'); + + await cli.parse('projects create --name="Project Creation CLI test"'); + + expect(Projects).toHaveBeenCalledWith({ + host: 'host', + token: 'token', + camelize: false, + }); + + expect(Projects.mock.instances[0].create).toHaveBeenCalledWith({ + name: 'Project Creation CLI test', + }); + }); + + it('should create a valid project using configuration passed in arguments', async () => { + const { cli } = await import('../../src/cli'); + + await cli.parse( + 'projects create --gb-token=token1 --gb-host=host1 --name="Project Creation CLI test1"', + ); + + expect(Projects).toHaveBeenCalledWith({ + host: 'host1', + token: 'token1', + camelize: false, + }); + + expect(Projects.mock.instances[0].create).toHaveBeenCalledWith({ + name: 'Project Creation CLI test1', + }); + }); + + it('should create a valid project using configuration passed in arguments and defined in the environment variables', async () => { + process.env.GITBEAKER_HOST = 'host2'; + + const { cli } = await import('../../src/cli'); + + await cli.parse('projects create --gb-token=token2 --name="Project Creation CLI test2"'); + + expect(Projects).toHaveBeenCalledWith({ + host: 'host2', + token: 'token2', + camelize: false, + }); + + expect(Projects.mock.instances[0].create).toHaveBeenCalledWith({ + name: 'Project Creation CLI test2', + }); + }); + + it('should create a valid project using configuration passed in arguments, overriding those defined in the environment variables', async () => { + process.env.GITBEAKER_HOST = 'host'; + process.env.GITBEAKER_TOKEN = 'token'; + + const { cli } = await import('../../src/cli'); + + await cli.parse( + 'projects create --gb-token=token3 --gb-host=host3 --name="Project Creation CLI test3"', + ); + + expect(Projects).toHaveBeenCalledWith({ + host: 'host3', + token: 'token3', + camelize: false, + }); + + expect(Projects.mock.instances[0].create).toHaveBeenCalledWith({ + name: 'Project Creation CLI test3', + }); + }); +}); + +describe('gitbeaker projects all', () => { + it('should create a valid project using configuration from environment variables', async () => { + process.env.GITBEAKER_HOST = 'host'; + process.env.GITBEAKER_TOKEN = 'token'; + + const { cli } = await import('../../src/cli'); + + await cli.parse('projects all --simple=true'); + + expect(Projects.mock.instances[0].all).toHaveBeenCalledWith({ + simple: 'true', + }); + }); +}); diff --git a/packages/cli/test/integration/resources/Projects.ts b/packages/cli/test/integration/resources/Projects.ts deleted file mode 100644 index 1220ee948..000000000 --- a/packages/cli/test/integration/resources/Projects.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { promisify } from 'util'; -import { exec } from 'child_process'; - -const execP = promisify(exec); - -const { TEST_ID = '', GITLAB_PERSONAL_ACCESS_TOKEN = '', GITLAB_URL = '' } = process.env; - -describe('gitbeaker projects create', () => { - it('should create a valid project', async () => { - const command = `projects create --name="CLI Project ${TEST_ID}" --gb-token="${GITLAB_PERSONAL_ACCESS_TOKEN}" --gb-host="${GITLAB_URL}"`; - const { stdout } = await execP(`node dist/index.js ${command}`); - let name; - - try { - ({ name } = JSON.parse(stdout)); - } catch (e) { - console.log(stdout); - } - - expect(name).toBe(`CLI Project ${TEST_ID}`); - }); -}); diff --git a/packages/cli/test/unit/index.ts b/packages/cli/test/unit/index.ts deleted file mode 100644 index 38949eef0..000000000 --- a/packages/cli/test/unit/index.ts +++ /dev/null @@ -1,370 +0,0 @@ -import * as pkg from '../../package.json'; - -jest.mock('@gitbeaker/core', () => ({ - ...jest.requireActual('@gitbeaker/core'), - getAPIMap: jest.fn(() => ({ - Projects: [ - { - name: 'constructor', - args: [ - 'token', - 'jobToken', - 'oauthToken', - 'sudo', - 'profileToken', - 'requesterFn', - 'profileMode', - 'host', - 'prefixUrl', - 'version', - 'camelize', - 'rejectUnauthorized', - 'requestTimeout', - ], - }, - { - name: 'all', - args: [], - }, - { - name: 'create', - args: [], - }, - ], - })), -})); -jest.mock('@gitbeaker/node'); -jest.mock('ora', () => ({ - start: () => ({ - success: jest.fn(), - fail: jest.fn(), - }), -})); - -const OLD_ENV = process.env; -let Projects; - -beforeEach(async () => { - jest.resetModules(); - - // eslint-disable-next-line - ({ Projects } = await import('@gitbeaker/node')); - - process.env = { ...OLD_ENV }; -}); - -afterEach(() => { - process.env = OLD_ENV; -}); - -describe('General', () => { - it('should return the expose a gitbeaker commnad', () => { - expect(pkg.bin).toHaveProperty('gitbeaker'); - }); -}); - -describe('gitbeaker -g -- CLI global Environment Variables', () => { - it('should return an object of available gitbeaker cli.parse environment variables -- --global-args alias', async () => { - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(output).toBe('No global variables have been set!'); - }); - - it('should return an object of available gitbeaker cli.parse environment variables -- -g alias', async () => { - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(output).toBe('No global variables have been set!'); - }); - - it('should only have the personal token set', async () => { - process.env.GITBEAKER_TOKEN = 'token1'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-token'].value).toBe('token1'); - }); - - it('should only have the personal token set by alias', async () => { - process.env.GITLAB_TOKEN = 'glfaketoken'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-token'].value).toBe('glfaketoken'); - }); - - it('should only have the oauth token set', async () => { - process.env.GITBEAKER_OAUTH_TOKEN = 'gboafaketoken'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-oauth-token'].value).toBe('gboafaketoken'); - }); - - it('should only have the oauth token set by alias', async () => { - process.env.GITLAB_OAUTH_TOKEN = 'gloafaketoken'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-oauth-token'].value).toBe('gloafaketoken'); - }); - - it('should only have the job token set', async () => { - process.env.GITBEAKER_JOB_TOKEN = 'gbjfaketoken'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-job-token'].value).toBe('gbjfaketoken'); - }); - - it('should only have the job token set by alias', async () => { - process.env.GITLAB_JOB_TOKEN = 'gljfaketoken'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-job-token'].value).toBe('gljfaketoken'); - }); - - it('should only have the host set', async () => { - process.env.GITBEAKER_HOST = 'www.gbfakehost.com'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-host'].value).toBe('www.gbfakehost.com'); - }); - - it('should only have the host set by alias', async () => { - process.env.GITLAB_HOST = 'www.ghfakehost.com'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-host'].value).toBe('www.ghfakehost.com'); - }); - - it('should only have the version set', async () => { - process.env.GITBEAKER_VERSION = '4'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-version'].value).toBe(4); - }); - - it('should only have the version set by alias', async () => { - process.env.GITLAB_VERSION = '4'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-version'].value).toBe(4); - }); - - it('should only have sudo set', async () => { - process.env.GITBEAKER_SUDO = 'gbsudoaccount'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-sudo'].value).toBe('gbsudoaccount'); - }); - - it('should only have sudo set by alias', async () => { - process.env.GITLAB_SUDO = 'glsudoaccount'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-sudo'].value).toBe('glsudoaccount'); - }); - - it('should only have the camelize set', async () => { - process.env.GITBEAKER_CAMELIZE = 'true'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-camelize'].value).toBe(true); - }); - - it('should only have the camelize set by alias', async () => { - process.env.GITLAB_CAMELIZE = 'true'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-camelize'].value).toBe(true); - }); - - it('should only have the profile token set', async () => { - process.env.GITBEAKER_PROFILE_TOKEN = 'gbptoken'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-profile-token'].value).toBe('gbptoken'); - }); - - it('should only have the profile token set by alias', async () => { - process.env.GITLAB_PROFILE_TOKEN = 'glptoken'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-profile-token'].value).toBe('glptoken'); - }); - - it('should only have the profile mode set', async () => { - process.env.GITBEAKER_PROFILE_MODE = 'gbpmode'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-profile-mode'].value).toBe('gbpmode'); - }); - - it('should only have the profile mode set by alias', async () => { - process.env.GITLAB_PROFILE_MODE = 'glpmode'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-g'); - - expect(JSON.parse(output)['gb-profile-mode'].value).toBe('glpmode'); - }); -}); - -describe('gitbeaker -v -- Package Version', () => { - it('should return the current version number of the package', async () => { - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - const { output } = await cli.parse('-v'); - - expect(output).toBe(pkg.version); - }); -}); - -describe('gitbeaker projects create', () => { - it('should create a valid project using configuration from environment variables', async () => { - process.env.GITBEAKER_HOST = 'host'; - process.env.GITBEAKER_TOKEN = 'token'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - - await cli.parse('projects create --name="Project Creation CLI test"'); - - expect(Projects).toHaveBeenCalledWith({ - host: 'host', - token: 'token', - camelize: false, - }); - - expect(Projects.mock.instances[0].create).toHaveBeenCalledWith({ - name: 'Project Creation CLI test', - }); - }); - - it('should create a valid project using configuration passed in arguments', async () => { - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - - await cli.parse( - 'projects create --gb-token=token1 --gb-host=host1 --name="Project Creation CLI test1"', - ); - - expect(Projects).toHaveBeenCalledWith({ - host: 'host1', - token: 'token1', - camelize: false, - }); - - expect(Projects.mock.instances[0].create).toHaveBeenCalledWith({ - name: 'Project Creation CLI test1', - }); - }); - - it('should create a valid project using configuration passed in arguments and defined in the environment variables', async () => { - process.env.GITBEAKER_HOST = 'host2'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - - await cli.parse('projects create --gb-token=token2 --name="Project Creation CLI test2"'); - - expect(Projects).toHaveBeenCalledWith({ - host: 'host2', - token: 'token2', - camelize: false, - }); - - expect(Projects.mock.instances[0].create).toHaveBeenCalledWith({ - name: 'Project Creation CLI test2', - }); - }); - - it('should create a valid project using configuration passed in arguments, overriding those defined in the environment variables', async () => { - process.env.GITBEAKER_HOST = 'host'; - process.env.GITBEAKER_TOKEN = 'token'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - - await cli.parse( - 'projects create --gb-token=token3 --gb-host=host3 --name="Project Creation CLI test3"', - ); - - expect(Projects).toHaveBeenCalledWith({ - host: 'host3', - token: 'token3', - camelize: false, - }); - - expect(Projects.mock.instances[0].create).toHaveBeenCalledWith({ - name: 'Project Creation CLI test3', - }); - }); -}); - -describe('gitbeaker projects all', () => { - it('should create a valid project using configuration from environment variables', async () => { - process.env.GITBEAKER_HOST = 'host'; - process.env.GITBEAKER_TOKEN = 'token'; - - // eslint-disable-next-line - const { cli } = require('../../src/cli'); - - await cli.parse('projects all --simple=true'); - - expect(Projects.mock.instances[0].all).toHaveBeenCalledWith({ - simple: 'true', - }); - }); -}); diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index 596e2cf72..6762e0cff 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -1,4 +1,10 @@ { - "extends": "../../tsconfig.json", - "include": ["src"] + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "paths": { + "@gitbeaker/core/map.json": ["../core/dist/map.json"], + "@gitbeaker/*": ["../*/src"] + } + }, + "include": ["./**/*.ts"] } diff --git a/packages/core/README.md b/packages/core/README.md index aaa7ff2b3..d98abf5e3 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -1,31 +1,24 @@

- gitbeaker + gitbeaker

- - CircleCI Pipeline Status - - - Code Climate maintainability - - - CodeCov test coverage - - - Dependency Status - - - Dev Dependency Status - - - Auto - - - All Contributors - -Prettier + pipeline status + coverage report + + Code Climate maintainability + + + Dependency Status + + + Auto + + + All Contributors + + Prettier Licence: MIT @@ -34,6 +27,162 @@

-🤖 [GitLab](https://gitlab.com/gitlab-org/gitlab/) API NodeJS library with full support of all the [Gitlab API](https://gitlab.com/gitlab-org/gitlab/tree/master/doc/api) services. This library is generally for internal use only. +> Core SDK for the [GitLab](https://gitlab.com/gitlab-org/gitlab/) API. This is not intended for direct use, see [@gitbeaker/rest](https://www.npmjs.com/package/@gitbeaker/rest) or [gitbeaker/cli](https://www.npmjs.com/package/@gitbeaker/cli) instead. + +## Table of Contents + +- [Usage](#usage) +- [Contributors](#contributors) +- [Changelog](./CHANGELOG.md) + +## Usage + + + + + + + +
+Browsers + +Load @gitbeaker/core directly from cdn.skypack.dev + +```html + +``` + +
+Deno + +Load @gitbeaker/core directly from cdn.skypack.dev + +```ts +import { Gitlab } from 'https://cdn.skypack.dev/@gitbeaker/core?dts'; +``` + +
+Node 18+ + + +Install with npm install @gitbeaker/core, or yarn add @gitbeaker/core + +```js +import { Gitlab } from '@gitbeaker/core'; +``` + +
+ +## Contributors + + + + +

+ + Justin Dalrymple + Dylan DesRosier + Mike Wyatt + Cory Zibeill + Martin Bour + akira345 + Pavel Birukov + Joseph Petersen + Louis Cherel + Adam Dehnel + Ev Haus + Loïc Mahieu + Giuseppe Angri + jennparise + Oscar + Daniel Ruf + schindld + Alvaro + Daniel Moore + Dylan M. Taylor + Corentin Mors + xatavian + Yevgeny Petukhov + Mickaël Tricot + Andrea + Flavien Bridault +
+ +
s-kazuki + Kipras Melnikovas + xieyu + st1gok + Max Wittig + Niklas Lochschmidt + Ilya Dus + Omar Awamry + Hennadii Varava + xiezht + Martin Helmich + Sean McGivern + Clemens Lieb + Vojtěch Sajdl + divido + Vincent Boulaye + Aliyss Snow + Mahmoud Saada + Feng Yu + Roy Jacobs + Paul Lemke + Ian Jenkins + nilennoct + Laffargue Michael + Martin Howarth + Christoph Lehmann +
+ +
Frank V + Salim Benabbou + Tamás Török-Vistai + Martin Benninger + fewieden + Jeff Pelton + Claude Abounegm + Stefan Hall + Jordan Wallet + zhao0 + Joshua Grosso + Isaac Ouellet Therrien + Rajat Sharma + Cesar B. + Igor Katsuba + Michael Townsend + bodtx + Artem + Munif Tanjim + Quentin Dreyer + Norm MacLennan + jnovick + Fabian Aussems + Michael Matzka + CraigAllardyce + Bruno Guimarães +
+ +
Lukas Eipert + Maximilian Krauß + Evolution Engineering + WEBER Logan + Anton Zhukov + Nicholas Loomans + Carl Kittelberger + Patrik Votoček + Kyrylo Fedorov + Claudio Vellage + Seb0uil + +

+ + + + + -[Read More](https://github.com/jdalrymple/gitbeaker#readme) +This started as a fork from [node-gitlab-legacy](https://github.com/rest-gitlab/rest-gitlab-legacy) but I ended up rewriting much of the code. Here are the original work's [contributors](https://github.com/rest-gitlab/rest-gitlab-legacy#contributors). diff --git a/packages/core/jest.config.js b/packages/core/jest.config.js deleted file mode 100644 index 3e18e5b8f..000000000 --- a/packages/core/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -const base = require('../../jest.config.base'); - -module.exports = { - ...base, - displayName: 'Gitbeaker Core', -}; diff --git a/packages/core/jest.config.mjs b/packages/core/jest.config.mjs new file mode 100644 index 000000000..345a48304 --- /dev/null +++ b/packages/core/jest.config.mjs @@ -0,0 +1,6 @@ +import base from '../../jest.config.base.mjs'; + +export default { + ...base, + displayName: 'Gitbeaker Core', +}; diff --git a/packages/core/lint-staged.config.mjs b/packages/core/lint-staged.config.mjs new file mode 100644 index 000000000..2e761d30e --- /dev/null +++ b/packages/core/lint-staged.config.mjs @@ -0,0 +1 @@ +export { default } from '../../lint-staged.config.base.mjs' diff --git a/packages/core/package.json b/packages/core/package.json index 6c4eda9a5..9ccaca443 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,62 +1,69 @@ { "name": "@gitbeaker/core", - "description": "Core API implementation of the GitLab API. Supports Promises, Async/Await.", - "version": "35.8.0", - "author": { - "name": "Justin Dalrymple" + "version": "36.0.1", + "description": "Core API implementation of the GitLab API", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/jdalrymple/gitbeaker" }, "bugs": { "url": "https://github.com/jdalrymple/gitbeaker/issues" }, - "dependencies": { - "@gitbeaker/requester-utils": "^35.8.0", - "form-data": "^4.0.0", - "li": "^1.3.0", - "mime": "^3.0.0", - "query-string": "^7.0.0", - "xcase": "^2.0.1" - }, - "devDependencies": { - "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-replace": "^3.0.0", - "@types/mime": "^3.0.1", - "@types/node": "^18.0.3", - "esm": "^3.2.25", - "fs-extra": "^10.0.0", - "get-param-names": "github:jdalrymple/get-param-names#1-improve-functionality", - "jest-extended": "^3.0.0", - "rollup": "^2.47.0", - "rollup-plugin-typescript2": "^0.31.1", - "ts-node": "^10.0.0", - "tslib": "^2.3.1", - "typescript": "^4.2.4" - }, - "engines": { - "node": ">=14.2.0" - }, - "files": [ - "dist" - ], "homepage": "https://github.com/jdalrymple/gitbeaker#readme", + "author": { + "name": "Justin Dalrymple" + }, "keywords": [ + "gitbeaker", + "gitlab", "api", - "es5", - "es6", - "gitlab" + "core" ], - "license": "MIT", - "main": "dist/index.js", - "module": "dist/index.es.js", - "types": "dist/types", - "repository": { - "type": "git", - "url": "https://github.com/jdalrymple/gitbeaker" + "types": "./dist/index.d.ts", + "exports": { + "./map.json": "./dist/map.json", + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.js" + } }, + "files": [ + "dist" + ], "scripts": { - "build:self": "rollup -c", - "build": "yarn run build:map & yarn run build:self", - "build:map": "ESM_DISABLE_CACHE=true TS_NODE_PROJECT=scripts/tsconfig.json node -r esm -r ts-node/register scripts/generate.ts", - "test:integration": "node --expose-gc ../../node_modules/.bin/jest --runInBand --logHeapUsage test/integration", - "test:unit": "node --expose-gc ../../node_modules/.bin/jest --runInBand --logHeapUsage test/unit" + "build": "yarn run build:map && yarn run build:self", + "build:map": "tsx scripts/generate.ts", + "build:self": "tsup src/index.ts --format esm,cjs --dts --treeshake", + "test:types": "tsc", + "test:e2e": "jest --maxWorkers=50% test/e2e", + "test:unit": "jest --maxWorkers=50% test/unit", + "format:docs": "prettier '**/(*.json|.yml|.js|.md)' --ignore-path ../../.prettierignore", + "format:docs:fix": "yarn format:docs --write", + "format:src": "prettier '{src,test}/**/*.ts' --ignore-path ../../.prettierignore", + "format:src:fix": "yarn format:src --write", + "format": "yarn format:src && yarn format:docs", + "format:fix": "yarn format:src:fix && yarn format:docs:fix", + "lint": "eslint '{src,test,scripts}/**/*.ts'", + "lint:fix": "yarn lint --fix", + "release:rc": "auto next", + "release:canary": "auto canary", + "release": "auto shipit" + }, + "dependencies": { + "@gitbeaker/requester-utils": "36.0.1", + "qs": "^6.11.1", + "xcase": "^2.0.1" + }, + "devDependencies": { + "@types/node": "^18.16.1", + "get-param-names": "github:jdalrymple/get-param-names#1-improve-functionality", + "tsup": "^6.7.0", + "tsx": "^3.12.6", + "typescript": "^4.9.5" } } diff --git a/packages/core/rollup.config.js b/packages/core/rollup.config.js deleted file mode 100644 index 250ec18d9..000000000 --- a/packages/core/rollup.config.js +++ /dev/null @@ -1,37 +0,0 @@ -import replace from '@rollup/plugin-replace'; -import ts from 'rollup-plugin-typescript2'; -import json from '@rollup/plugin-json'; -import pkg from './package.json'; - -export default { - input: 'src/index.ts', - external: [...Object.keys(pkg.dependencies || {}), ...Object.keys(pkg.peerDependencies || {})], - output: [ - { - file: pkg.main, // CommonJS (for Node) build. - format: 'cjs', - sourcemap: true, - }, - { - file: pkg.module, // ES module (for bundlers) build. - format: 'es', - sourcemap: true, - }, - ], - plugins: [ - replace({ - '../../dist/map.json': './map.json', - delimiters: ['', ''], - preventAssignment: true, - }), - ts({ - tsconfigOverride: { - compilerOptions: { - baseUrl: '.', - }, - }, - useTsconfigDeclarationDir: true, - }), - json(), - ], -}; diff --git a/packages/core/scripts/generate.ts b/packages/core/scripts/generate.ts index 04dad3b64..50817a3c8 100644 --- a/packages/core/scripts/generate.ts +++ b/packages/core/scripts/generate.ts @@ -1,60 +1,51 @@ +import FS from 'node:fs'; import getParamNames from 'get-param-names'; import { BaseResource, RequesterType } from '@gitbeaker/requester-utils'; -import { outputJsonSync } from 'fs-extra'; import * as resources from '../src/resources'; +function getInstanceMethods(x: object): string[] { + if (!x) return []; -function isGetter(x: object, name: string) { - return (Object.getOwnPropertyDescriptor(x, name) || {}).get; -} - -function isFunction(x: object, name: string) { - return typeof x[name] === 'function'; -} - -function deepFunctions(x: object): string[] { - if (x !== Object.prototype) { - return Object.getOwnPropertyNames(x) - .filter((name) => isGetter(x, name) || isFunction(x, name)) - .concat(deepFunctions(Object.getPrototypeOf(x)) || []); - } + const proto = Reflect.getPrototypeOf(x); - return []; -} + if (!proto) return []; -function distinctDeepFunctions(x: object): string[] { - return Array.from(new Set(deepFunctions(x))); -} + const methods = new Set(Reflect.ownKeys(proto)); -function getInstanceMethods(x: object): string[] { - return distinctDeepFunctions(x).filter((name) => name !== 'constructor' && !~name.indexOf('__')); + return Array.from(methods) + .filter((name) => name !== 'constructor') + .map((name) => name.toString()); } -function removeOptionalArg(list: string[]) { - if (['options', '_a'].includes(list[list.length - 1])) list.pop(); +function removeOptionalArg(list: (string | Record)[] = []): string[] { + // Only the last item could be an object + if (list.length > 0) { + if (list.at(-1) === 'options') list.pop(); + else if (list.at(-1)?.constructor === Object) list.pop(); + } - return list; + return list as string[]; } export function buildMap() { - const map = {}; - const baseArgs = Object.keys(getParamNames(BaseResource)[0]); - - for (const [name, resource] of Object.entries(resources)) { - const r = new resource({ requesterFn: () => ({} as RequesterType) }); + const map: Record = {}; + const baseArgs = Object.keys(getParamNames(BaseResource)[0] as Record); + const { Gitlab, ...directResources } = resources; - map[name] = [{ name: 'constructor', args: baseArgs }]; + Object.entries(directResources).forEach(([name, Resource]) => { + const r = new Resource({ requesterFn: () => ({} as RequesterType) }); + const formattedInstanceMethods = getInstanceMethods(r).map((m) => ({ + name: m, + args: removeOptionalArg(getParamNames(r[m]) as (string | Record)[]), + })); - for (const m of getInstanceMethods(r)) { - map[name].push({ - name: m, - args: removeOptionalArg(getParamNames(r[m])), - }); - } - } + map[name] = [{ name: 'constructor', args: baseArgs }].concat(formattedInstanceMethods); + }); return map; } // Generate the resources map -outputJsonSync('./dist/map.json', buildMap()); +FS.rmSync('./dist/map.json', { recursive: true, force: true }); +FS.mkdirSync('dist', { recursive: true }); +FS.writeFileSync('./dist/map.json', JSON.stringify(buildMap(), null, 2)); diff --git a/packages/core/scripts/tsconfig.json b/packages/core/scripts/tsconfig.json deleted file mode 100644 index 2805bfa6f..000000000 --- a/packages/core/scripts/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "module": "esnext", - "allowSyntheticDefaultImports": true, - "moduleResolution": "node" - } -} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 0442fe5f6..ff556154b 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,10 +1,2 @@ -/* ----------------- API Map --------------- */ - -export { getAPIMap } from './infrastructure'; - /* ---------------- Resources --------------- */ export * from './resources'; -export * as Resources from './resources'; - -/* ---------------- Types ----------------- */ -export * as Types from './types'; diff --git a/packages/core/src/infrastructure/RequestHelper.ts b/packages/core/src/infrastructure/RequestHelper.ts index b284988d8..4f65e5041 100644 --- a/packages/core/src/infrastructure/RequestHelper.ts +++ b/packages/core/src/infrastructure/RequestHelper.ts @@ -1,272 +1,407 @@ -import { parse as parseLink } from 'li'; -import { parseUrl as parseQueryString } from 'query-string'; +import { parse as parseQueryString } from 'qs'; import { camelizeKeys } from 'xcase'; import { BaseResource } from '@gitbeaker/requester-utils'; -import { appendFormFromObject, Camelize } from './Utils'; - -// Request Options -export type IsForm = { +import type { + FormattedResponse, + RequestHandlerFn, + ResponseBodyTypes, +} from '@gitbeaker/requester-utils'; +import { appendFormFromObject, parseLinkHeader } from './Utils'; +import type { Camelize, OptionValueType } from './Utils'; + +export interface IsForm { isForm?: boolean; -}; +} -export type Sudo = { +export interface Sudo { sudo?: string | number; -}; +} -export type ShowExpanded = { - showExpanded?: T; -}; +export interface AsStream { + asStream?: boolean; +} -export type BaseRequestOptions = Sudo & Record; +export interface ShowExpanded { + showExpanded?: E; +} -export type BasePaginationRequestOptions

= - BaseRequestOptions & { - pagination?: P; - perPage?: number; - }; +export type PaginationTypes = 'keyset' | 'offset'; + +export type BaseRequestOptions = Sudo & + ShowExpanded & { [Key in string]?: any }; -export type OffsetPaginationRequestOptions = { - page?: number; +export interface KeysetPaginationRequestOptions { + orderBy: string; + sort: 'asc' | 'dec'; +} + +export interface OffsetPaginationRequestOptions { + page?: number | string; maxPages?: number; -}; +} + +export interface BasePaginationRequestOptions

{ + pagination?: P; + perPage?: number | string; +} -export type PaginatedRequestOptions

= - P extends 'keyset' - ? BasePaginationRequestOptions

- : BasePaginationRequestOptions

& OffsetPaginationRequestOptions; +export type PaginationRequestSubOptions

= P extends 'keyset' + ? KeysetPaginationRequestOptions + : P extends 'offset' + ? OffsetPaginationRequestOptions + : Record; + +export type PaginationRequestOptions

= + BasePaginationRequestOptions

& PaginationRequestSubOptions

; // Response Formats -export interface ExpandedResponse> { +export type CamelizedResponse = C extends true ? Camelize : T; + +export interface OffsetPagination { + total: number; + next: number | null; + current: number; + previous: number | null; + perPage: number; + totalPages: number; +} + +export interface KeysetPagination { + idAfter: number; + perPage: number; + orderBy: string; + sort: 'asc' | 'dec'; +} + +export interface ExpandedResponse { data: T; - headers: Record; + headers: Record; status: number; } -export interface PaginationResponse[]> { - data: T; - paginationInfo: { - total: number; - next: number | null; - current: number; - previous: number | null; - perPage: number; - totalPages: number; + +export type PaginatedResponse = { + [U in P]: { + paginationInfo: P extends 'keyset' ? KeysetPagination : OffsetPagination; + data: T; }; -} +}[P]; -export type CamelizedRecord = C extends true ? Camelize : T; +export type GitlabAPIExpandedResponse = E extends true + ? P extends PaginationTypes + ? PaginatedResponse + : ExpandedResponse + : T; -export type ExtendedRecordReturn< - C extends boolean, - E extends boolean, - T extends Record | void, -> = T extends void - ? void - : E extends false - ? CamelizedRecord - : ExpandedResponse>; - -export type ExtendedArrayReturn< - C extends boolean, - E extends boolean, +export type GitlabAPISingleResponse< T, - P extends 'keyset' | 'offset', -> = E extends false - ? CamelizedRecord[] - : P extends 'keyset' - ? CamelizedRecord[] - : PaginationResponse[]>; - -export type ExtendedReturn< - C extends boolean, - E extends boolean, - P extends 'keyset' | 'offset', - T extends Record | Record[], + C extends boolean | void, + E extends boolean | void, > = T extends Record - ? ExtendedRecordReturn - : T extends (infer R)[] - ? ExtendedArrayReturn - : never; + ? GitlabAPIExpandedResponse, E, undefined> + : GitlabAPIExpandedResponse; -async function getHelper

( - service: BaseResource, - endpoint: string, - { - sudo, - showExpanded, - maxPages, - ...query - }: BasePaginationRequestOptions

& ShowExpanded & { maxPages?: number } = {}, - acc: Record[] = [], -): Promise { - const response = await service.requester.get(endpoint, { query, sudo }); - const { headers, status } = response; +export type GitlabAPIMultiResponse< + T, + C extends boolean | void, + E extends boolean | void, + P extends PaginationTypes | void, +> = T extends Record + ? GitlabAPIExpandedResponse[], E, P> + : GitlabAPIExpandedResponse; + +export type GitlabAPIResponse< + T, + C extends boolean | void, + E extends boolean | void, + P extends PaginationTypes | void, +> = T extends (infer R)[] ? GitlabAPIMultiResponse : GitlabAPISingleResponse; + +function packageResponse( + response: FormattedResponse, + showExpanded?: E, +): E extends true ? ExpandedResponse : T; +function packageResponse( + response: FormattedResponse, + showExpanded?: boolean, +): T | ExpandedResponse { + return showExpanded + ? { + data: response.body, + status: response.status, + headers: response.headers, + } + : response.body; +} + +function getStream( + response: FormattedResponse, + showExpanded?: E, +) { + return packageResponse(response, showExpanded); +} + +function getSingle( + camelize: boolean, + response: FormattedResponse>, + showExpanded?: E, +) { + const { status, headers } = response; let { body } = response; // Camelize response body if specified - if (service.camelize) body = camelizeKeys(body); + if (camelize) body = camelizeKeys(body); - // Handle object responses - if (!Array.isArray(body)) { - if (!showExpanded) return body; + return packageResponse({ body, status, headers }, showExpanded); +} - return { - data: body, - headers, - status, - }; - } +function getManyMore< + T extends Record[], + E extends boolean, + P extends PaginationTypes = PaginationTypes, +>( + camelize: boolean, + getFn: RequestHandlerFn, + endpoint: string, + response: FormattedResponse, + requestOptions: { maxPages?: number } & PaginationRequestOptions

& BaseRequestOptions, + acc?: T, +): E extends true ? Promise> : Promise; + +async function getManyMore< + T extends Record[], + E extends boolean, + P extends PaginationTypes = PaginationTypes, +>( + camelize: boolean, + getFn: RequestHandlerFn, + endpoint: string, + response: FormattedResponse, + requestOptions: { maxPages?: number } & PaginationRequestOptions

& BaseRequestOptions, + acc?: T, +): Promise> { + const { sudo, showExpanded, maxPages, pagination, page, perPage, idAfter, orderBy, sort } = + requestOptions; - // Handle array responses - const newAcc = [...acc, ...body]; - const { next }: { next: string } = parseLink(headers.link); - const { query: qs = {} } = next - ? parseQueryString(next, { parseNumbers: true, arrayFormat: 'bracket' }) - : {}; - const withinBounds = maxPages - ? newAcc.length / ((qs.per_page as unknown as number) || 20) < maxPages - : true; + // Camelize response body if specified + if (camelize) response.body = camelizeKeys(response?.body); + + const newAcc = [...(acc || []), ...response.body] as T; + const withinBounds = maxPages && perPage ? newAcc.length / +perPage < maxPages : true; // Recurse through pagination results - if (!(query.page && acc.length === 0) && next && withinBounds) { - return getHelper( - service, - endpoint, - { - ...qs, - maxPages, - sudo, - }, - newAcc, - ); + const { next = '' } = parseLinkHeader(response.headers.link); + + if (!(page && (acc || []).length === 0) && next && withinBounds) { + const parsedQueryString = parseQueryString(next.split('?')[1]); + const qs = { ...camelizeKeys(parsedQueryString) }; + const newOpts = { + ...qs, + maxPages, + sudo, + showExpanded, + } as unknown as { maxPages?: number } & PaginationRequestOptions

& BaseRequestOptions; + + const nextResponse: FormattedResponse = await getFn(endpoint, { + searchParams: qs, + sudo, + }); + + return getManyMore(camelize, getFn, endpoint, nextResponse, newOpts, newAcc); } - if (!showExpanded || query.pagination === 'keyset') return newAcc; + if (!showExpanded) return newAcc; + + const paginationInfo = + pagination === 'keyset' + ? { + idAfter: idAfter ? +idAfter : null, + perPage: perPage ? +perPage : null, + orderBy: orderBy as string, + sort: sort as 'asc' | 'dec', + } + : { + total: parseInt(response.headers['x-total'], 10), + next: parseInt(response.headers['x-next-page'], 10) || null, + current: parseInt(response.headers['x-page'], 10) || 1, + previous: parseInt(response.headers['x-prev-page'], 10) || null, + perPage: parseInt(response.headers['x-per-page'], 10), + totalPages: parseInt(response.headers['x-total-pages'], 10), + }; return { data: newAcc, - paginationInfo: { - total: parseInt(headers['x-total'], 10), - next: parseInt(headers['x-next-page'], 10) || null, - current: parseInt(headers['x-page'], 10) || 1, - previous: parseInt(headers['x-prev-page'], 10) || null, - perPage: parseInt(headers['x-per-page'], 10), - totalPages: parseInt(headers['x-total-pages'], 10), - }, - }; + paginationInfo, + } as PaginatedResponse; } -export function get< - T extends Record | Record[] = Record, ->() { - return ( +type getOverloadImproved = { + ( service: BaseResource, endpoint: string, - options?: PaginatedRequestOptions

& ShowExpanded & Record, - ): Promise> => getHelper(service, endpoint, options); -} + options: BaseRequestOptions & { asStream: true }, + ): Promise>; + < + C extends boolean = false, + E extends boolean = false, + P extends 'keyset' | 'offset' | void = void, + >( + service: BaseResource, + endpoint: string, + options?: BaseRequestOptions, + ): Promise>; + < + C extends boolean = false, + E extends boolean = false, + P extends 'keyset' | 'offset' | void = void, + >( + service: BaseResource, + endpoint: string, + options?: PaginationRequestOptions

& BaseRequestOptions, + ): Promise>; + < + C extends boolean = false, + E extends boolean = false, + P extends 'keyset' | 'offset' | void = void, + >( + service: BaseResource, + endpoint: string, + options?: AsStream & PaginationRequestOptions

& BaseRequestOptions, + ): Promise>; +}; -export function post | void = Record>() { - return async ( +export function get< + T extends ResponseBodyTypes = Record, +>(): getOverloadImproved { + return async ( service: BaseResource, endpoint: string, - { - query, - isForm, + options?: BaseRequestOptions, + ): Promise => { + const { asStream, sudo, showExpanded, maxPages, ...searchParams } = options || {}; + + const response = await service.requester.get(endpoint, { + searchParams, + sudo, + asStream, + }); + + const camelizeResponseBody = service.camelize || false; + + // Handle streaming, single and paginated responses + if (asStream) return getStream(response as FormattedResponse, showExpanded); + if (!Array.isArray(response.body)) + return getSingle( + camelizeResponseBody, + response as FormattedResponse>, + showExpanded, + ); + + const reqOpts = { sudo, showExpanded, - ...options - }: IsForm & BaseRequestOptions & ShowExpanded = {}, - ): Promise> => { - const body = isForm ? appendFormFromObject(options) : options; + maxPages, + ...searchParams, + }; - const r = await service.requester.post(endpoint, { - query, + return getManyMore( + camelizeResponseBody, + (...args) => service.requester.get(...args), + endpoint, + response as FormattedResponse[]>, + reqOpts, + ); + }; +} + +export function post() { + return async ( + service: BaseResource, + endpoint: string, + { searchParams, isForm, sudo, showExpanded, ...options }: IsForm & BaseRequestOptions = {}, + ): Promise> => { + const body = isForm + ? appendFormFromObject(options as Record) + : options; + + const response = await service.requester.post(endpoint, { + searchParams, body, sudo, }); - return showExpanded - ? { - data: r.body, - status: r.status, - headers: r.headers, - } - : r.body; + // Camelize response body if specified + if (service.camelize) response.body = camelizeKeys(response.body); + + return packageResponse(response, showExpanded) as GitlabAPIResponse; }; } -export function put = Record>() { - return async ( +export function put() { + return async ( service: BaseResource, endpoint: string, - { - query, - isForm, - sudo, - showExpanded, - ...options - }: IsForm & BaseRequestOptions & ShowExpanded = {}, - ): Promise> => { - const body = isForm ? appendFormFromObject(options) : options; + { searchParams, isForm, sudo, showExpanded, ...options }: IsForm & BaseRequestOptions = {}, + ): Promise> => { + const body = isForm + ? appendFormFromObject(options as Record) + : options; - const r = await service.requester.put(endpoint, { + const response = await service.requester.put(endpoint, { body, - query, + searchParams, sudo, }); - return showExpanded - ? { - data: r.body, - status: r.status, - headers: r.headers, - } - : r.body; + // Camelize response body if specified + if (service.camelize) response.body = camelizeKeys(response.body); + + return packageResponse(response, showExpanded) as GitlabAPIResponse; }; } -export function del | void = void>() { - return async ( +export function patch() { + return async ( service: BaseResource, endpoint: string, - { sudo, showExpanded, query, ...options }: BaseRequestOptions & ShowExpanded = {}, - ): Promise> => { - const body = options; + { searchParams, isForm, sudo, showExpanded, ...options }: IsForm & BaseRequestOptions = {}, + ): Promise> => { + const body = isForm + ? appendFormFromObject(options as Record) + : options; - const r = await service.requester.delete(endpoint, { + const response = await service.requester.patch(endpoint, { body, - query, + searchParams, sudo, }); - return showExpanded - ? { - data: r.body, - status: r.status, - headers: r.headers, - } - : r.body; + // Camelize response body if specified + if (service.camelize) response.body = camelizeKeys(response.body); + + return packageResponse(response, showExpanded) as GitlabAPIResponse; }; } -function stream( - service: BaseResource, - endpoint: string, - options?: BaseRequestOptions, -): NodeJS.ReadableStream { - if (typeof service.requester.stream !== 'function') { - throw new Error('Stream method is not implementated in requester!'); - } +export function del() { + return async ( + service: BaseResource, + endpoint: string, + { sudo, showExpanded, searchParams, ...options }: BaseRequestOptions = {}, + ): Promise> => { + const response = await service.requester.delete(endpoint, { + body: options, + searchParams, + sudo, + }); - return service.requester.stream(endpoint, { - query: options, - }); + return packageResponse(response, showExpanded) as GitlabAPIResponse; + }; } export const RequestHelper = { post, put, + patch, get, del, - stream, }; diff --git a/packages/core/src/infrastructure/Utils.ts b/packages/core/src/infrastructure/Utils.ts index 1d636d766..5d2fbf409 100644 --- a/packages/core/src/infrastructure/Utils.ts +++ b/packages/core/src/infrastructure/Utils.ts @@ -1,4 +1,8 @@ -import FormData from 'form-data'; +export interface UserAgentDetailSchema extends Record { + user_agent: string; + ip_address: string; + akismet_submitted: boolean; +} export type CamelizeString = T extends string ? string extends T @@ -10,40 +14,76 @@ export type CamelizeString = T extends string export type Camelize = { [K in keyof T as CamelizeString]: T[K] }; -export function appendFormFromObject(object: Record): FormData { - /* eslint @typescript-eslint/ban-ts-comment: 0 */ - // @ts-ignore +export type Never = { + [P in keyof T]?: never; +}; + +export type Only = Required & Never; +export type Only3 = Required & Never & Never; +export type Only4 = Required & Never & Never & Never; +export type OnlyOrNone = Partial & Never; +export type OnlyOrNone3 = Partial & Never & Never; +export type OnlyOrNone4 = Partial & Never & Never & Never; + +export type Either = Only | Only; +export type Either3 = Only3 | Only3 | Only3; + +export type Either4 = + | Only4 + | Only4 + | Only4 + | Only4; +export type EitherOrNone = OnlyOrNone | OnlyOrNone; +export type EitherOrNone3 = + | OnlyOrNone3 + | OnlyOrNone3 + | OnlyOrNone3; +export type EitherOrNone4 = + | OnlyOrNone4 + | OnlyOrNone4 + | OnlyOrNone4 + | OnlyOrNone4; + +export type OptionValueType = undefined | string | boolean | Blob | number | (Blob | string)[]; + +export function appendFormFromObject(object: Record): FormData { const form = new FormData(); Object.entries(object).forEach(([k, v]) => { - if (Array.isArray(v)) form.append(k, v[0], v[1]); - else form.append(k, v as any); + if (!v) return; + if (Array.isArray(v)) form.append(k, v[0] as Blob, v[1] as string); + else form.append(k, v as unknown as string | Blob); }); return form; } -export function getAPIMap(): Record { - try { - // eslint-disable-next-line @typescript-eslint/no-var-requires, global-require, import/no-unresolved - return require('../../dist/map.json') as Record; - } catch (e) { - throw new Error('This function is only available in the distributed code'); - } -} - /** * Normalize GitLab API endpoint by encoding route parameters. * @param strings * @param values */ -export function endpoint( - strings: TemplateStringsArray, - ...values: T -): T extends number[] ? void : string; export function endpoint(strings: TemplateStringsArray, ...values: (string | number)[]): string { return values.reduce( (string, value, index) => string + encodeURIComponent(value) + strings[index + 1], strings[0], ); } + +/** + * Parse link header + * @param linkString + */ +export function parseLinkHeader(linkString: string): { next?: string; prev?: string } { + const output: Record = {}; + const regex = /<([^>]+)>; rel="([^"]+)"/g; + let m: RegExpExecArray | null; + + // eslint-disable-next-line + while ((m = regex.exec(linkString))) { + const [, v, k] = m; + output[k] = v; + } + + return output; +} diff --git a/packages/core/src/resources/Agents.ts b/packages/core/src/resources/Agents.ts new file mode 100644 index 000000000..7326ef945 --- /dev/null +++ b/packages/core/src/resources/Agents.ts @@ -0,0 +1,129 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; +import type { SimpleProjectSchema } from './Projects'; + +export interface ClusterAgentSchema extends Record { + id: number; + name: string; + config_project: SimpleProjectSchema; + created_at: string; + created_by_user_id: number; +} + +export interface ClusterAgentTokenSchema extends Record { + id: number; + name: string; + description: string; + agent_id: number; + status: string; + token?: string; + created_at: string; + created_by_user_id: number; +} + +export class Agents extends BaseResource { + all( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/cluster_agents`, + options, + ); + } + + allTokens( + projectId: string | number, + agentId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/cluster_agents/${agentId}/tokens`, + options, + ); + } + + createToken( + projectId: string | number, + agentId: number, + name: string, + options?: { description?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/cluster_agents/${agentId}/tokens`, + { + name, + ...options, + }, + ); + } + + show( + projectId: string | number, + agentId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/cluster_agents/${agentId}`, + options, + ); + } + + showToken( + projectId: string | number, + agentId: number, + tokenId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/cluster_agents/${agentId}/tokens/${tokenId}`, + options, + ); + } + + register( + projectId: string | number, + name: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/cluster_agents`, + { + name, + ...options, + }, + ); + } + + removeToken( + projectId: string | number, + agentId: number, + tokenId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`projects/${projectId}/cluster_agents/${agentId}/tokens/${tokenId}`, + options, + ); + } + + deregister( + projectId: string | number, + agentId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`projects/${projectId}/cluster_agents/${agentId}`, + options, + ); + } +} diff --git a/packages/core/src/resources/AlertManagement.ts b/packages/core/src/resources/AlertManagement.ts new file mode 100644 index 000000000..952c91b45 --- /dev/null +++ b/packages/core/src/resources/AlertManagement.ts @@ -0,0 +1,81 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface MetricImageSchema extends Record { + id: number; + created_at: string; + filename: string; + file_path: string; + url: string; + url_text: string; +} + +export class AlertManagement extends BaseResource { + all( + projectId: string | number, + alertIId: number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`/projects/${projectId}/alert_management_alerts/${alertIId}/metric_images`, + options, + ); + } + + edit( + projectId: string | number, + alertIId: number, + imageId: number, + options?: { url?: string; urlText?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`/projects/${projectId}/alert_management_alerts/${alertIId}/metric_images/${imageId}`, + options, + ); + } + + remove( + projectId: string | number, + alertIId: number, + imageId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`/projects/${projectId}/alert_management_alerts/${alertIId}/metric_images/${imageId}`, + options, + ); + } + + upload( + projectId: string | number, + alertIId: number, + metricImage: { content: Blob; filename: string }, + { + url, + urlText, + ...options + }: { url?: string; urlText?: string } & Sudo & ShowExpanded = {} as any, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`/projects/${projectId}/alert_management_alerts/${alertIId}/metric_images`, + { + isForm: true, + ...options, + file: [metricImage.content, metricImage.filename], + url_text: urlText, + url, + }, + ); + } +} diff --git a/packages/core/src/resources/ApplicationAppearance.ts b/packages/core/src/resources/ApplicationAppearance.ts new file mode 100644 index 000000000..e250e7064 --- /dev/null +++ b/packages/core/src/resources/ApplicationAppearance.ts @@ -0,0 +1,63 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { BaseRequestOptions, GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface ApplicationAppearanceSchema extends Record { + title: string; + description: string; + pwa_name: string; + pwa_short_name: string; + pwa_description: string; + pwa_icon: string; + logo: string; + header_logo: string; + favicon: string; + new_project_guidelines: string; + profile_image_guidelines: string; + header_message: string; + footer_message: string; + message_background_color: string; + message_font_color: string; + email_header_and_footer_enabled: boolean; +} + +export class ApplicationAppearance extends BaseResource { + show( + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + 'application/appearence', + options, + ); + } + + edit( + { + logo, + pwaIcon, + ...options + }: { + logo?: { content: Blob; filename: string }; + pwaIcon?: { content: Blob; filename: string }; + } & BaseRequestOptions = {} as any, + ): Promise> { + if (logo || pwaIcon) { + const opts: BaseRequestOptions = { + ...options, + isForm: true, + }; + + if (logo) opts.logo = [logo.content, logo.filename]; + if (pwaIcon) opts.pwaIcon = [pwaIcon.content, pwaIcon.filename]; + + return RequestHelper.put()(this, 'application/appearence', opts); + } + + return RequestHelper.put()( + this, + 'application/appearence', + options, + ); + } +} diff --git a/packages/core/src/resources/ApplicationPlanLimits.ts b/packages/core/src/resources/ApplicationPlanLimits.ts new file mode 100644 index 000000000..2d8158352 --- /dev/null +++ b/packages/core/src/resources/ApplicationPlanLimits.ts @@ -0,0 +1,87 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { Camelize, GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface ApplicationPlanLimitSchema extends Record { + ci_pipeline_size: number; + ci_active_jobs: number; + ci_active_pipelines: number; + ci_project_subscriptions: number; + ci_pipeline_schedules: number; + ci_needs_size_limit: number; + ci_registered_group_runners: number; + ci_registered_project_runners: number; + conan_max_file_size: number; + generic_packages_max_file_size: number; + helm_max_file_size: number; + maven_max_file_size: number; + npm_max_file_size: number; + nuget_max_file_size: number; + pypi_max_file_size: number; + terraform_module_max_file_size: number; + storage_size_limit: number; +} + +export type ApplicationPlanLimitOptions = Partial>; + +export class ApplicationPlanLimits extends BaseResource { + show( + options?: { planName?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + 'application/plan_limits', + options, + ); + } + + edit( + planName: string, + options: ApplicationPlanLimitOptions & Sudo & ShowExpanded = {}, + ): Promise> { + const { + ciPipelineSize, + ciActiveJobs, + ciActivePipelines, + ciProjectSubscriptions, + ciPipelineSchedules, + ciNeedsSizeLimit, + ciRegisteredGroupRunners, + ciRegisteredProjectRunners, + conanMaxFileSize, + genericPackagesMaxFileSize, + helmMaxFileSize, + mavenMaxFileSize, + npmMaxFileSize, + nugetMaxFileSize, + pypiMaxFileSize, + terraformModuleMaxFileSize, + storageSizeLimit, + ...opts + } = options; + + return RequestHelper.put()(this, 'application/plan_limits', { + searchParams: { + planName, + ciPipelineSize, + ciActiveJobs, + ciActivePipelines, + ciProjectSubscriptions, + ciPipelineSchedules, + ciNeedsSizeLimit, + ciRegisteredGroupRunners, + ciRegisteredProjectRunners, + conanMaxFileSize, + genericPackagesMaxFileSize, + helmMaxFileSize, + mavenMaxFileSize, + npmMaxFileSize, + nugetMaxFileSize, + pypiMaxFileSize, + terraformModuleMaxFileSize, + storageSizeLimit, + }, + opts, + }); + } +} diff --git a/packages/core/src/resources/ApplicationSettings.ts b/packages/core/src/resources/ApplicationSettings.ts index 032795603..3ffc7698a 100644 --- a/packages/core/src/resources/ApplicationSettings.ts +++ b/packages/core/src/resources/ApplicationSettings.ts @@ -1,76 +1,274 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { RequestHelper, Sudo, BaseRequestOptions } from '../infrastructure'; +import { RequestHelper } from '../infrastructure'; +import type { BaseRequestOptions, GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; export interface ApplicationSettingsSchema extends Record { - default_projects_limit: number; - signup_enabled: boolean; - id: number; - default_branch_protection: number; - restricted_visibility_levels?: string[]; - password_authentication_enabled_for_web: boolean; + admin_mode?: boolean; + admin_notification_email?: string; + abuse_notification_email?: string; after_sign_out_path?: string; - max_attachment_size: number; - max_import_size: number; - user_oauth_applications: boolean; - updated_at: string; - session_expire_delay: number; + after_sign_up_text?: string; + akismet_api_key?: string; + akismet_enabled?: boolean; + allow_group_owners_to_manage_ldap?: boolean; + allow_local_requests_from_hooks_and_services?: boolean; + allow_local_requests_from_system_hooks?: boolean; + allow_local_requests_from_web_hooks_and_services?: boolean; + allow_runner_registration_token?: boolean; + archive_builds_in_human_readable?: string; + asset_proxy_enabled?: boolean; + asset_proxy_secret_key?: string; + asset_proxy_url?: string; + asset_proxy_whitelist?: string | string[]; + asset_proxy_allowlist?: string | string[]; + authorized_keys_enabled?: boolean; + auto_devops_domain?: string; + auto_devops_enabled?: boolean; + automatic_purchased_storage_allocation?: boolean; + bulk_import_enabled?: boolean; + can_create_group?: boolean; + check_namespace_plan?: boolean; + commit_email_hostname?: string; + container_expiration_policies_enable_historic_entries?: boolean; + container_registry_cleanup_tags_service_max_list_size?: number; + container_registry_delete_tags_service_timeout?: number; + container_registry_expiration_policies_caching?: boolean; + container_registry_expiration_policies_worker_capacity?: number; + container_registry_token_expire_delay?: number; + package_registry_cleanup_policies_worker_capacity?: number; + deactivate_dormant_users?: boolean; + deactivate_dormant_users_period?: number; + default_artifacts_expire_in?: string; + default_branch_name?: string; + default_branch_protection?: number; + default_ci_config_path?: string; + default_group_visibility?: string; + default_preferred_language?: string; + default_project_creation?: number; + default_project_visibility?: string; + default_projects_limit?: number; + default_snippet_visibility?: string; + default_syntax_highlighting_theme?: number; + delayed_project_deletion?: boolean; + delayed_group_deletion?: boolean; + deletion_adjourned_period?: number; + diff_max_patch_bytes?: number; + diff_max_files?: number; + diff_max_lines?: number; + disable_admin_oauth_scopes?: boolean; + disable_feed_token?: boolean; + disable_personal_access_token?: boolean; + disabled_oauth_sign_in_sources?: string[]; + dns_rebinding_protection_enabled?: boolean; + domain_denylist_enabled?: boolean; + domain_denylist?: string[]; + domain_allowlist?: string[]; + dsa_key_restriction?: number; + ecdsa_key_restriction?: number; + ecdsa_sk_key_restriction?: number; + ed25519_key_restriction?: number; + ed25519_sk_key_restriction?: number; + eks_access_key_id?: string; + eks_account_id?: string; + eks_integration_enabled?: boolean; + eks_secret_access_key?: string; + elasticsearch_aws_access_key?: string; + elasticsearch_aws_region?: string; + elasticsearch_aws_secret_access_key?: string; + elasticsearch_aws?: boolean; + elasticsearch_indexed_field_length_limit?: number; + elasticsearch_indexed_file_size_limit_kb?: number; + elasticsearch_indexing?: boolean; + elasticsearch_limit_indexing?: boolean; + elasticsearch_max_bulk_concurrency?: number; + elasticsearch_max_bulk_size_mb?: number; + elasticsearch_namespace_ids?: number[]; + elasticsearch_project_ids?: number[]; + elasticsearch_search?: boolean; + elasticsearch_url?: string; + elasticsearch_username?: string; + elasticsearch_password?: string; + email_additional_text?: string; + email_author_in_body?: boolean; + email_confirmation_setting?: string; + enabled_git_access_protocol?: string; + enforce_namespace_storage_limit?: boolean; + enforce_terms?: boolean; + external_auth_client_cert?: string; + external_auth_client_key_pass?: string; + external_auth_client_key?: string; + external_authorization_service_default_label?: string; + external_authorization_service_enabled?: boolean; + external_authorization_service_timeout?: number; + external_authorization_service_url?: string; + external_pipeline_validation_service_url?: string; + external_pipeline_validation_service_token?: string; + external_pipeline_validation_service_timeout?: number; + file_template_project_id?: number; + first_day_of_week?: number; + geo_node_allowed_ips?: string; + geo_status_timeout?: number; + git_two_factor_session_expiry?: number; + gitaly_timeout_default?: number; + gitaly_timeout_fast?: number; + gitaly_timeout_medium?: number; + gitlab_dedicated_instance?: boolean; + grafana_enabled?: boolean; + grafana_url?: string; + gravatar_enabled?: boolean; + group_owners_can_manage_default_branch_protection?: boolean; + hashed_storage_enabled?: boolean; + help_page_hide_commercial_content?: boolean; + help_page_support_url?: string; + help_page_text?: string; + help_text?: string; + hide_third_party_offers?: boolean; home_page_url?: string; - default_snippet_visibility: string; + housekeeping_enabled?: boolean; + housekeeping_optimize_repository_period?: number; + html_emails_enabled?: boolean; + import_sources?: string[]; + in_product_marketing_emails_enabled?: boolean; + invisible_captcha_enabled?: boolean; + issues_create_limit?: number; + keep_latest_artifact?: boolean; + local_markdown_version?: number; + mailgun_signing_key?: string; + mailgun_events_enabled?: boolean; + maintenance_mode_message?: string; + maintenance_mode?: boolean; + max_artifacts_size?: number; + max_attachment_size?: number; + max_export_size?: number; + max_import_size?: number; + max_pages_size?: number; + max_personal_access_token_lifetime?: number; + max_ssh_key_lifetime?: number; + max_terraform_state_size_bytes?: number; + metrics_method_call_threshold?: number; + max_number_of_repository_downloads?: number; + max_number_of_repository_downloads_within_time_period?: number; + git_rate_limit_users_allowlist?: string[]; + git_rate_limit_users_alertlist?: number[]; + auto_ban_user_on_excessive_projects_download?: boolean; + mirror_available?: boolean; + mirror_capacity_threshold?: number; + mirror_max_capacity?: number; + mirror_max_delay?: number; + maven_package_requests_forwarding?: boolean; + npm_package_requests_forwarding?: boolean; + pypi_package_requests_forwarding?: boolean; outbound_local_requests_whitelist?: string[]; - domain_allowlist?: string[]; - domain_denylist_enabled: boolean; - domain_denylist?: string[]; - created_at: string; - default_ci_config_path?: string; - default_project_visibility: string; - default_group_visibility: string; - gravatar_enabled: boolean; - sign_in_text?: string; - container_expiration_policies_enable_historic_entries: boolean; - container_registry_token_expire_delay: number; - repository_storages_weighted: { - [name: string]: number; - }; - plantuml_enabled: boolean; + pages_domain_verification_enabled?: boolean; + password_authentication_enabled_for_git?: boolean; + password_authentication_enabled_for_web?: boolean; + password_number_required?: boolean; + password_symbol_required?: boolean; + password_uppercase_required?: boolean; + password_lowercase_required?: boolean; + performance_bar_allowed_group_path?: string; + personal_access_token_prefix?: string; + pipeline_limit_per_project_user_sha?: number; + plantuml_enabled?: boolean; plantuml_url?: string; - kroki_enabled: boolean; - kroki_url?: string; - terminal_max_session_time: number; - polling_interval_multiplier: number; - rsa_key_restriction: number; - dsa_key_restriction: number; - ecdsa_key_restriction: number; - ed25519_key_restriction: number; - first_day_of_week: number; - enforce_terms: boolean; - terms: string; - performance_bar_allowed_group_id: number; - user_show_add_ssh_key_message: boolean; - local_markdown_version: number; - allow_local_requests_from_hooks_and_services: boolean; - allow_local_requests_from_web_hooks_and_services: boolean; - allow_local_requests_from_system_hooks: boolean; - asset_proxy_enabled: boolean; - asset_proxy_url: string; - asset_proxy_whitelist?: string[]; - asset_proxy_allowlist?: string[]; - npm_package_requests_forwarding: boolean; - snippet_size_limit: number; - issues_create_limit: number; - raw_blob_request_limit: number; - wiki_page_max_content_bytes: number; - require_admin_approval_after_user_signup: boolean; - personal_access_token_prefix: string; + polling_interval_multiplier?: number; + project_export_enabled?: boolean; + projects_api_rate_limit_unauthenticated?: number; + prometheus_metrics_enabled?: boolean; + protected_ci_variables?: boolean; + push_event_activities_limit?: number; + push_event_hooks_limit?: number; rate_limiting_response_text?: string; - keep_latest_artifact: boolean; + raw_blob_request_limit?: number; + search_rate_limit?: number; + search_rate_limit_unauthenticated?: number; + recaptcha_enabled?: boolean; + recaptcha_private_key?: string; + recaptcha_site_key?: string; + receive_max_input_size?: number; + repository_checks_enabled?: boolean; + repository_size_limit?: number; + repository_storages_weighted?: Record; + repository_storages?: string[]; + require_admin_approval_after_user_signup?: boolean; + require_two_factor_authentication?: boolean; + restricted_visibility_levels?: string[]; + rsa_key_restriction?: number; + session_expire_delay?: number; + shared_runners_enabled?: boolean; + shared_runners_minutes?: number; + shared_runners_text?: string; + sidekiq_job_limiter_mode?: string; + sidekiq_job_limiter_compression_threshold_bytes?: number; + sidekiq_job_limiter_limit_bytes?: number; + sign_in_text?: string; + signup_enabled?: boolean; + slack_app_enabled?: boolean; + slack_app_id?: string; + slack_app_secret?: string; + slack_app_signing_secret?: string; + slack_app_verification_token?: string; + snippet_size_limit?: number; + snowplow_app_id?: string; + snowplow_collector_hostname?: string; + snowplow_cookie_domain?: string; + snowplow_enabled?: boolean; + sourcegraph_enabled?: boolean; + sourcegraph_public_only?: boolean; + sourcegraph_url?: string; + spam_check_endpoint_enabled?: boolean; + spam_check_endpoint_url?: string; + spam_check_api_key?: string; + suggest_pipeline_enabled?: boolean; + terminal_max_session_time?: number; + terms?: string; + throttle_authenticated_api_enabled?: boolean; + throttle_authenticated_api_period_in_seconds?: number; + throttle_authenticated_api_requests_per_period?: number; + throttle_authenticated_packages_api_enabled?: boolean; + throttle_authenticated_packages_api_period_in_seconds?: number; + throttle_authenticated_packages_api_requests_per_period?: number; + throttle_authenticated_web_enabled?: boolean; + throttle_authenticated_web_period_in_seconds?: number; + throttle_authenticated_web_requests_per_period?: number; + throttle_unauthenticated_api_enabled?: boolean; + throttle_unauthenticated_api_period_in_seconds?: number; + throttle_unauthenticated_api_requests_per_period?: number; + throttle_unauthenticated_packages_api_enabled?: boolean; + throttle_unauthenticated_packages_api_period_in_seconds?: number; + throttle_unauthenticated_packages_api_requests_per_period?: number; + throttle_unauthenticated_web_enabled?: boolean; + throttle_unauthenticated_web_period_in_seconds?: number; + throttle_unauthenticated_web_requests_per_period?: number; + time_tracking_limit_to_hours?: boolean; + two_factor_grace_period?: number; + unique_ips_limit_enabled?: boolean; + unique_ips_limit_per_user?: number; + unique_ips_limit_time_window?: number; + usage_ping_enabled?: boolean; + user_deactivation_emails_enabled?: boolean; + user_default_external?: boolean; + user_default_internal_regex?: string; + user_defaults_to_private_profile?: boolean; + user_oauth_applications?: boolean; + user_show_add_ssh_key_message?: boolean; + version_check_enabled?: boolean; + whats_new_variant?: string; + wiki_page_max_content_bytes?: number; + jira_connect_application_key?: string; + jira_connect_proxy_url?: string; } export class ApplicationSettings extends BaseResource { - all(options?: Sudo) { + show( + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()(this, 'application/settings', options); } - edit(options?: BaseRequestOptions) { + edit( + options?: BaseRequestOptions, + ): Promise> { return RequestHelper.put()(this, 'application/settings', options); } } diff --git a/packages/core/src/resources/ApplicationStatistics.ts b/packages/core/src/resources/ApplicationStatistics.ts new file mode 100644 index 000000000..477078af0 --- /dev/null +++ b/packages/core/src/resources/ApplicationStatistics.ts @@ -0,0 +1,25 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface ApplicationStatisticSchema extends Record { + forks: string; + issues: string; + merge_requests: string; + notes: string; + snippets: string; + ssh_keys: string; + milestones: string; + users: string; + groups: string; + projects: string; + active_users: string; +} + +export class ApplicationStatistics extends BaseResource { + show( + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'application/statistics', options); + } +} diff --git a/packages/core/src/resources/Applications.ts b/packages/core/src/resources/Applications.ts new file mode 100644 index 000000000..4c9234324 --- /dev/null +++ b/packages/core/src/resources/Applications.ts @@ -0,0 +1,47 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface ApplicationSchema extends Record { + id: number; + application_id: string; + application_name: string; + secret: string; + callback_url: string; + confidential: boolean; +} + +export class Applications extends BaseResource { + all( + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'applications', options); + } + + create( + name: string, + redirectUri: string, + scopes: string, + options?: { confidential?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, 'applications', { + name, + redirectUri, + scopes, + ...options, + }); + } + + remove( + applicationId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, `applications/${applicationId}`, options); + } +} diff --git a/packages/core/src/resources/AuditEvents.ts b/packages/core/src/resources/AuditEvents.ts new file mode 100644 index 000000000..751411c0b --- /dev/null +++ b/packages/core/src/resources/AuditEvents.ts @@ -0,0 +1,71 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + EitherOrNone, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface AuditEventSchema extends Record { + id: number; + author_id: number; + entity_id: number; + entity_type: string; + details: { + change?: string; + from?: string; + to?: string; + custom_message?: string; + author_name: string; + author_email: string; + target_id: string; + target_type: string; + target_details: string; + ip_address: string; + entity_path: string; + }; + created_at: string; +} + +function url({ + projectId, + groupId, +}: { projectId?: string | number; groupId?: string | number } = {}): string { + let prefix = ''; + + if (projectId) prefix = endpoint`projects/${projectId}/`; + else if (groupId) prefix = endpoint`groups/${groupId}/`; + + return `${prefix}audit_events`; +} + +export class AuditEvents extends BaseResource { + all( + options?: EitherOrNone<{ projectId?: string | number }, { groupId?: string | number }> & { + createdAfter?: string; + createdBefore?: string; + entityType?: string; + entityId?: number; + } & Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): Promise> { + const uri = url(options); + + return RequestHelper.get()(this, uri, options); + } + + show( + auditEventId: number, + options?: EitherOrNone<{ projectId?: string | number }, { groupId?: string | number }> & + Sudo & + ShowExpanded, + ): Promise> { + const uri = url(options); + + return RequestHelper.get()(this, `${uri}/${auditEventId}`, options); + } +} diff --git a/packages/core/src/resources/Avatar.ts b/packages/core/src/resources/Avatar.ts new file mode 100644 index 000000000..e03fbde5f --- /dev/null +++ b/packages/core/src/resources/Avatar.ts @@ -0,0 +1,16 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface AvatarSchema extends Record { + avatar_url: string; +} + +export class Avatar extends BaseResource { + show( + email: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'avatar', { email, ...options }); + } +} diff --git a/packages/core/src/resources/Branches.ts b/packages/core/src/resources/Branches.ts index 738dbedbc..9d4464366 100644 --- a/packages/core/src/resources/Branches.ts +++ b/packages/core/src/resources/Branches.ts @@ -1,6 +1,13 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { CommitSchema } from './Commits'; -import { endpoint, PaginatedRequestOptions, RequestHelper, Sudo } from '../infrastructure'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { CommitSchema } from './Commits'; export interface BranchSchema extends Record { name: string; @@ -15,7 +22,12 @@ export interface BranchSchema extends Record { } export class Branches extends BaseResource { - all(projectId: string | number, options?: PaginatedRequestOptions) { + all( + projectId: string | number, + options?: { search?: string; regex?: string } & PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/repository/branches`, @@ -23,21 +35,28 @@ export class Branches extends BaseResource { ); } - create(projectId: string | number, branchName: string, ref: string, options?: Sudo) { - const branchKey = this.url.includes('v3') ? 'branchName' : 'branch'; - + create( + projectId: string | number, + branchName: string, + ref: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/repository/branches`, { - [branchKey]: branchName, + branch: branchName, ref, ...options, }, ); } - remove(projectId: string | number, branchName: string, options?: Sudo) { + remove( + projectId: string | number, + branchName: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, endpoint`projects/${projectId}/repository/branches/${branchName}`, @@ -45,7 +64,22 @@ export class Branches extends BaseResource { ); } - show(projectId: string | number, branchName: string, options?: Sudo) { + removeMerged( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`projects/${projectId}/repository/merged_branches`, + options, + ); + } + + show( + projectId: string | number, + branchName: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/repository/branches/${branchName}`, diff --git a/packages/core/src/resources/BroadcastMessages.ts b/packages/core/src/resources/BroadcastMessages.ts index d08dd209a..4b19694e8 100644 --- a/packages/core/src/resources/BroadcastMessages.ts +++ b/packages/core/src/resources/BroadcastMessages.ts @@ -1,10 +1,13 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - PaginatedRequestOptions, - RequestHelper, - Sudo, +import { RequestHelper } from '../infrastructure'; +import type { AccessLevel } from '../templates/ResourceAccessRequests'; +import type { Camelize, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, } from '../infrastructure'; export interface BroadcastMessageSchema extends Record { @@ -16,20 +19,30 @@ export interface BroadcastMessageSchema extends Record { id: number; active: boolean; target_path: string; + target_access_levels: AccessLevel[]; broadcast_type: string; dismissable: boolean; } +export type BroadcastMessageOptions = Camelize>; + export class BroadcastMessages extends BaseResource { - all(options?: PaginatedRequestOptions) { + all( + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()(this, 'broadcast_messages', options); } - create(options?: Camelize> & Sudo) { + create( + options?: BroadcastMessageOptions & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()(this, 'broadcast_messages', options); } - edit(broadcastMessageId: number, options?: Camelize> & Sudo) { + edit( + broadcastMessageId: number, + options?: BroadcastMessageOptions & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.put()( this, `broadcast_messages/${broadcastMessageId}`, @@ -37,11 +50,17 @@ export class BroadcastMessages extends BaseResource( + broadcastMessageId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()(this, `broadcast_messages/${broadcastMessageId}`, options); } - show(broadcastMessageId: number, options?: BaseRequestOptions) { + show( + broadcastMessageId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, `broadcast_messages/${broadcastMessageId}`, diff --git a/packages/core/src/resources/CommitDiscussions.ts b/packages/core/src/resources/CommitDiscussions.ts index 7640cf2a3..d7b725115 100644 --- a/packages/core/src/resources/CommitDiscussions.ts +++ b/packages/core/src/resources/CommitDiscussions.ts @@ -1,58 +1,68 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceDiscussions } from '../templates'; -import { DiscussionSchema } from '../templates/types'; -import { - BaseRequestOptions, - PaginatedRequestOptions, +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - CamelizedRecord, } from '../infrastructure'; +import type { + DiscussionNotePositionSchema, + DiscussionNoteSchema, + DiscussionSchema, +} from '../templates/ResourceDiscussions'; export interface CommitDiscussions extends ResourceDiscussions { - addNote( + addNote( projectId: string | number, commitId: number, - discussionId: string | number, + discussionId: string, noteId: number, body: string, - options?: BaseRequestOptions, - ): Promise>; + options?: { createdAt?: string } & Sudo & ShowExpanded, + ): Promise>; - all( + all( projectId: string | number, commitId: number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - create( + create( projectId: string | number, commitId: number, body: string, - options?: BaseRequestOptions, - ): Promise>; + options?: { + position?: DiscussionNotePositionSchema; + commitId?: string; + createdAt?: string; + } & Sudo & + ShowExpanded, + ): Promise>; - editNote( + editNote( projectId: string | number, commitId: number, - discussionId: string | number, + discussionId: string, noteId: number, - options: BaseRequestOptions & { body: string }, - ): Promise>; + options?: Sudo & ShowExpanded & { body?: string }, + ): Promise>; - removeNote( + removeNote( projectId: string | number, commitId: number, - discussionId: string | number, + discussionId: string, noteId: number, - options?: Sudo, - ): Promise; + options?: Sudo & ShowExpanded, + ): Promise>; - show( + show( projectId: string | number, commitId: number, - discussionId: string | number, - options?: Sudo, - ): Promise>; + discussionId: string, + options?: Sudo & ShowExpanded, + ): Promise>; } export class CommitDiscussions extends ResourceDiscussions { diff --git a/packages/core/src/resources/Commits.ts b/packages/core/src/resources/Commits.ts index 4425d96a4..9554c1e7b 100644 --- a/packages/core/src/resources/Commits.ts +++ b/packages/core/src/resources/Commits.ts @@ -1,13 +1,16 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { UserSchema } from './Users'; -import { MergeRequestSchema } from './MergeRequests'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; +import type { UserSchema } from './Users'; +import type { AllMergeRequestsOptions, MergeRequestSchema } from './MergeRequests'; +import type { DiscussionNoteSchema, DiscussionSchema } from '../templates/ResourceDiscussions'; +import type { CommitablePipelineStatus } from './Pipelines'; export interface CommitAction { /** The action to perform */ @@ -27,23 +30,28 @@ export interface CommitAction { } // Response structures -export interface CommitSchema extends Record { + +export interface CondensedCommitSchema extends Record { id: string; short_id: string; - created_at: Date; - parent_ids?: string[]; - title: string; message: string; - author_name: string; + title: string; author_email: string; - authored_date?: Date; + author_name: string; + created_at: string; +} + +export interface CommitSchema extends CondensedCommitSchema { + parent_ids?: string[]; + message: string; + authored_date?: string; committer_name?: string; committer_email?: string; - committed_date?: Date; + committed_date?: string; web_url: string; } -export interface CommitExtendedSchema extends CommitSchema { +export interface ExpandedCommitSchema extends CommitSchema { last_pipeline: { id: number; ref: string; @@ -98,12 +106,15 @@ export type CommitSignatureSchema = | X509SignatureSchema | MissingSignatureSchema; -export interface CommentSchema extends Record { +export interface CondensedCommitCommentSchema extends Record { note: string; + author: Omit; +} + +export interface CommitCommentSchema extends CondensedCommitCommentSchema { line_type: 'new' | 'old'; path: string; line: number; - author: Omit; } export interface CommitDiffSchema extends Record { @@ -118,7 +129,7 @@ export interface CommitDiffSchema extends Record { } export interface CommitStatusSchema extends Record { - status: string; + status: CommitablePipelineStatus; created_at: string; started_at?: string; name: string; @@ -137,8 +148,56 @@ export interface CommitReferenceSchema extends Record { name: string; } +export interface CommitDiscussionNoteSchema extends Omit { + confidential?: boolean; + commands_changes: Record; +} + +export interface CommitDiscussionSchema extends Record { + id: string; + individual_note: boolean; + notes?: CommitDiscussionNoteSchema[]; +} + +export type AllCommitsOptions = { + refName?: string; + since?: string; + until?: string; + path?: string; + author?: string; + all?: boolean; + withStats?: boolean; + firstParent?: boolean; + order?: string; + trailers?: boolean; +}; + +export type CreateCommitOptions = { + startBranch?: string; + startSha?: string; + startProject?: number | string; + actions?: CommitAction[]; + authorEmail?: string; + authorName?: string; + stats?: boolean; + force?: boolean; +}; + +export type EditPipelineStatusOptions = { + ref?: string; + name?: string; + context?: string; + targetUrl?: string; + description?: string; + coverage?: number; + pipelineId?: number; +}; + export class Commits extends BaseResource { - all(projectId: string | number, options?: PaginatedRequestOptions) { + all( + projectId: string | number, + options?: AllCommitsOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/repository/commits`, @@ -146,7 +205,73 @@ export class Commits extends BaseResource { ); } - cherryPick(projectId: string | number, sha: string, branch: string, options?: Sudo) { + allComments( + projectId: string | number, + sha: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/repository/commits/${sha}/comments`, + options, + ); + } + + allDiscussions( + projectId: string | number, + sha: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/repository/commits/${sha}/discussions`, + options, + ); + } + + allMergeRequests( + projectId: string | number, + sha: string, + options?: AllMergeRequestsOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/repository/commits/${sha}/merge_requests`, + options, + ); + } + + allReferences( + projectId: string | number, + sha: string, + options?: { type?: string } & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/repository/commits/${sha}/refs`, + options, + ); + } + + allStatuses( + projectId: string | number, + sha: string, + options?: { ref?: string; stage?: string; name?: string; all?: boolean } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/repository/commits/${sha}/statuses`, + options, + ); + } + + cherryPick( + projectId: string | number, + sha: string, + branch: string, + options?: { dryRun?: boolean; message?: string } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/repository/commits/${sha}/cherry_pick`, @@ -157,22 +282,14 @@ export class Commits extends BaseResource { ); } - comments(projectId: string | number, sha: string, options?: Sudo) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/repository/commits/${sha}/comments`, - options, - ); - } - - create( + create( projectId: string | number, branch: string, message: string, actions: CommitAction[] = [], - options: BaseRequestOptions = {}, - ) { - return RequestHelper.post()( + options: CreateCommitOptions & Sudo & ShowExpanded = {}, + ): Promise> { + return RequestHelper.post()( this, endpoint`projects/${projectId}/repository/commits`, { @@ -184,13 +301,13 @@ export class Commits extends BaseResource { ); } - createComment( + createComment( projectId: string | number, sha: string, note: string, - options?: BaseRequestOptions, - ) { - return RequestHelper.post()( + options?: { path?: string; line?: number; lineType?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, endpoint`projects/${projectId}/repository/commits/${sha}/comments`, { @@ -200,63 +317,67 @@ export class Commits extends BaseResource { ); } - diff(projectId: string | number, sha: string, options?: Sudo) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/repository/commits/${sha}/diff`, - options, - ); - } - - editStatus(projectId: string | number, sha: string, options?: BaseRequestOptions) { + editStatus( + projectId: string | number, + sha: string, + state: CommitablePipelineStatus, + options?: EditPipelineStatusOptions & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/statuses/${sha}`, - options, - ); - } - - references(projectId: string | number, sha: string, options?: Sudo) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/repository/commits/${sha}/refs`, - options, + { + state, + ...options, + }, ); } - revert(projectId: string | number, sha: string, options?: Sudo) { + revert( + projectId: string | number, + sha: string, + branch: string, + options?: { dryRun?: boolean } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/repository/commits/${sha}/revert`, - options, + { + ...options, + branch, + }, ); } - show(projectId: string | number, sha: string, options?: BaseRequestOptions) { - return RequestHelper.get()( + show( + projectId: string | number, + sha: string, + options?: { stats?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, endpoint`projects/${projectId}/repository/commits/${sha}`, options, ); } - statuses(projectId: string | number, sha: string, options?: BaseRequestOptions) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/repository/commits/${sha}/statuses`, - options, - ); - } - - mergeRequests(projectId: string | number, sha: string, options?: BaseRequestOptions) { - return RequestHelper.get()( + showDiff( + projectId: string | number, + sha: string, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/repository/commits/${sha}/merge_requests`, + endpoint`projects/${projectId}/repository/commits/${sha}/diff`, options, ); } - signature(projectId: string | number, sha: string, options?: BaseRequestOptions) { + showGPGSignature( + projectId: string | number, + sha: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/repository/commits/${sha}/signature`, diff --git a/packages/core/src/resources/Composer.ts b/packages/core/src/resources/Composer.ts new file mode 100644 index 000000000..357b6a0ac --- /dev/null +++ b/packages/core/src/resources/Composer.ts @@ -0,0 +1,136 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded } from '../infrastructure'; + +export interface ComposerV1BaseRepositorySchema extends Record { + packages?: string[]; + 'metadata-url': string; + 'provider-includes': Record>; + 'providers-url': string; +} + +export interface ComposerV2BaseRepositorySchema extends Record { + packages?: string[]; + 'metadata-url': string; +} + +export interface ComposerV1PackagesSchema extends Record { + providers: { + [name: string]: { + sha256: string; + }; + }; +} + +export interface PackageMetadata { + name: string; + type: string; + license: string; + version: string; + dist: { + type: string; + url: string; + reference: string; + shasum: string; + }; + source: { + type: string; + url: string; + reference: string; + }; + uid: number; +} + +export interface ComposerPackageMetadataSchema extends Record { + packages: { + [name: string]: { + [version: string]: PackageMetadata; + }; + }; +} + +export class Composer extends BaseResource { + create( + projectId: string | number, + options?: { tag?: string; branch?: string } & ShowExpanded, + ): Promise> { + return RequestHelper.post<{ message: string }>()( + this, + endpoint`projects/${projectId}/packages/composer`, + options, + ); + } + + download( + projectId: string | number, + packageName: string, + sha: string, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/packages/composer/archives/${packageName}`, + { + searchParams: { sha }, + ...options, + }, + ); + } + + showMetadata( + groupId: string | number, + packageName: string, + options?: { sha?: string } & ShowExpanded, + ): Promise> { + let url: string; + + if (options && options.sha) { + url = endpoint`groups/${groupId}/-/packages/composer/${packageName}$${options.sha}`; + } else { + url = endpoint`groups/${groupId}/-/packages/composer/p2/${packageName}`; + } + + return RequestHelper.get()(this, url, options); + } + + showPackages( + groupId: string | number, + sha: string, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`groups/${groupId}/-/packages/composer/p/${sha}`, + options, + ); + } + + showBaseRepository( + groupId: string | number, + options?: { composerVersion: '1' } & ShowExpanded, + ): Promise>; + + showBaseRepository( + groupId: string | number, + options?: { composerVersion: '2' } & ShowExpanded, + ): Promise>; + + showBaseRepository( + groupId: string | number, + options?: { composerVersion?: '1' | '2' } & ShowExpanded, + ): Promise< + GitlabAPIResponse + > { + const clonedService = { ...this }; + + if (options && options.composerVersion === '2') { + clonedService.headers['User-Agent'] = 'Composer/2'; + } + + return RequestHelper.get()( + clonedService, + endpoint`groups/${groupId}/-/packages/composer/packages`, + options, + ); + } +} diff --git a/packages/core/src/resources/Conan.ts b/packages/core/src/resources/Conan.ts new file mode 100644 index 000000000..3e56f54c4 --- /dev/null +++ b/packages/core/src/resources/Conan.ts @@ -0,0 +1,287 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded } from '../infrastructure'; + +export interface PackageSnapshotSchema extends Record { + 'conan_package.tgz': string; + 'conanfile.py': string; + 'conanmanifest.txt': string; +} + +export interface RecipeSnapshotSchema extends Record { + 'conan_sources.tgz': string; + 'conanfile.py': string; + 'conanmanifest.txt': string; +} + +function url(projectId?: string | number): string { + return projectId ? endpoint`/projects/${projectId}/packages/conan/v1` : 'packages/conan/v1'; +} + +export class Conan extends BaseResource { + authenticate( + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + `${url(options?.projectId)}/users/authenticate`, + options, + ); + } + + checkCredentials( + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get()(this, `${prefix}/users/check_credentials`, options); + } + + downloadPackageFile( + packageName: string, + packageVersion: string, + packageUsername: string, + packageChannel: string, + conanPackageReference: string, + recipeRevision: string, + packageRevision: string, + filename: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get()( + this, + `${prefix}/conans/v1/files/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/${recipeRevision}/package/${conanPackageReference}/${packageRevision}/${filename}`, + options, + ); + } + + downloadRecipeFile( + packageName: string, + packageVersion: string, + packageUsername: string, + packageChannel: string, + recipeRevision: string, + filename: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get()( + this, + `${prefix}/conans/v1/files/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/${recipeRevision}/export/${filename}`, + options, + ); + } + + showPackageUploadUrls( + packageName: string, + packageVersion: string, + packageUsername: string, + packageChannel: string, + conanPackageReference: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get()( + this, + `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/packages/${conanPackageReference}/upload_urls`, + options, + ); + } + + showPackageDownloadUrls( + packageName: string, + packageVersion: string, + packageUsername: string, + packageChannel: string, + conanPackageReference: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get()( + this, + `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/packages/${conanPackageReference}/download_urls`, + options, + ); + } + + showPackageManifest( + packageName: string, + packageVersion: string, + packageUsername: string, + packageChannel: string, + conanPackageReference: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get()( + this, + `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/packages/${conanPackageReference}/digest`, + options, + ); + } + + showPackageSnapshot( + packageName: string, + packageVersion: string, + packageUsername: string, + packageChannel: string, + conanPackageReference: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get()( + this, + `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/packages/${conanPackageReference}`, + options, + ); + } + + ping( + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, `${url(options?.projectId)}/ping`, options); + } + + recipeUploadUrls( + packageName: string, + packageVersion: string, + packageUsername: string, + packageChannel: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get()( + this, + `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/upload_urls`, + options, + ); + } + + showRecipeDownloadUrls( + packageName: string, + packageVersion: string, + packageUsername: string, + packageChannel: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get()( + this, + `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/download_urls`, + options, + ); + } + + showRecipeManifest( + packageName: string, + packageVersion: string, + packageUsername: string, + packageChannel: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get()( + this, + `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/digest`, + options, + ); + } + + showRecipeSnapshot( + packageName: string, + packageVersion: string, + packageUsername: string, + packageChannel: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get()( + this, + `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}`, + options, + ); + } + + removePackageFile( + packageName: string, + packageVersion: string, + packageUsername: string, + packageChannel: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get()( + this, + `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}`, + options, + ); + } + + search( + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get<{ results: string[] }>()(this, `${prefix}/conans/search`, options); + } + + uploadPackageFile( + content: Blob, + packageName: string, + packageVersion: string, + packageUsername: string, + packageChannel: string, + conanPackageReference: string, + recipeRevision: string, + packageRevision: string, + filename: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get()( + this, + `${prefix}/conans/v1/files/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/${recipeRevision}/package/${conanPackageReference}/${packageRevision}/${filename}`, + { + isForm: true, + ...options, + file: [content, filename], + }, + ); + } + + uploadRecipeFile( + content: Blob, + packageName: string, + packageVersion: string, + packageUsername: string, + packageChannel: string, + recipeRevision: string, + filename: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get()( + this, + `${prefix}/conans/v1/files/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/${recipeRevision}/export/${filename}`, + { + isForm: true, + ...options, + file: [content, filename], + }, + ); + } +} diff --git a/packages/core/src/resources/ContainerRegistry.ts b/packages/core/src/resources/ContainerRegistry.ts index b19255d5e..f10f20158 100644 --- a/packages/core/src/resources/ContainerRegistry.ts +++ b/packages/core/src/resources/ContainerRegistry.ts @@ -1,5 +1,14 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { RequestHelper, PaginatedRequestOptions, Sudo, endpoint } from '../infrastructure'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + BaseRequestOptions, + Either, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface RegistryRepositoryTagSchema extends Record { name: string; @@ -12,6 +21,11 @@ export interface RegistryRepositoryTagSchema extends Record { total_size: number; } +export type CondensedRegistryRepositoryTagSchema = Pick< + RegistryRepositoryTagSchema, + 'name' | 'path' | 'location' +>; + export interface RegistryRepositorySchema extends Record { id: number; name: string; @@ -24,40 +38,64 @@ export interface RegistryRepositorySchema extends Record { tags?: Pick[]; } +export type CondensedRegistryRepositorySchema = Omit< + RegistryRepositorySchema, + 'tags' | 'tags_count' +>; + export class ContainerRegistry extends BaseResource { - projectRepositories(projectId: string | number, options?: PaginatedRequestOptions) { - return RequestHelper.get[]>()( - this, - endpoint`projects/${projectId}/registry/repositories`, - options, - ); - } + allRepositories( + { + groupId, + projectId, + ...options + }: Either<{ projectId: string | number }, { groupId: string | number }> & { + tags?: boolean; + tagsCount?: boolean; + } & PaginationRequestOptions

& + BaseRequestOptions = {} as any, + ): Promise> { + let url: string; - groupRepositories(projectId: string | number, options?: PaginatedRequestOptions) { - return RequestHelper.get[]>()( - this, - endpoint`groups/${projectId}/registry/repositories`, - options, - ); + if (groupId) url = endpoint`groups/${groupId}/registry/repositories`; + else if (projectId) url = endpoint`projects/${projectId}/registry/repositories`; + else + throw new Error( + 'Missing required argument. Please supply a groupId or a projectId in the options parameter.', + ); + + return RequestHelper.get()(this, url, options); } - showRepository(projectId: string | number, repositoryId: number, options?: Sudo) { - return RequestHelper.get()( + allTags( + projectId: string | number, + repositoryId: number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/registry/repositories/${repositoryId}`, + endpoint`projects/${projectId}/registry/repositories/${repositoryId}/tags`, options, ); } - tags(projectId: string | number, repositoryId: number, options?: PaginatedRequestOptions) { - return RequestHelper.get[]>()( + editRegistryVisibility( + projectId: string | number, + options?: { containerRegistryAccessLevel: 'enabled' | 'private' | 'disabled' } & Sudo & + ShowExpanded, + ) { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/registry/repositories/${repositoryId}/tags`, + endpoint`projects/${projectId}`, options, ); } - removeRepository(projectId: string | number, repositoryId: number, options?: Sudo) { + removeRepository( + projectId: string | number, + repositoryId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, endpoint`projects/${projectId}/registry/repositories/${repositoryId}`, @@ -65,7 +103,12 @@ export class ContainerRegistry extends BaseResource( + projectId: string | number, + repositoryId: number, + tagName: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, endpoint`projects/${projectId}/registry/repositories/${repositoryId}/tags/${tagName}`, @@ -73,12 +116,17 @@ export class ContainerRegistry extends BaseResource( projectId: string | number, repositoryId: number, nameRegexDelete: string, - options?: Sudo & { nameRegexKeep: string; keepN: string; olderThan: string }, - ) { + options?: Sudo & { + nameRegex?: string; + nameRegexKeep?: string; + keepN?: string; + olderThan?: string; + } & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, endpoint`projects/${projectId}/registry/repositories/${repositoryId}/tags`, @@ -89,7 +137,23 @@ export class ContainerRegistry extends BaseResource( + repositoryId: number, + options?: { tags?: boolean; tagsCount?: boolean; size?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`registry/repositories/${repositoryId}`, + options, + ); + } + + showTag( + projectId: string | number, + repositoryId: number, + tagName: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/registry/repositories/${repositoryId}/tags/${tagName}`, diff --git a/packages/core/src/resources/DashboardAnnotations.ts b/packages/core/src/resources/DashboardAnnotations.ts new file mode 100644 index 000000000..a88608601 --- /dev/null +++ b/packages/core/src/resources/DashboardAnnotations.ts @@ -0,0 +1,43 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { Either, GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface DashboardAnnotationSchema extends Record { + id: number; + starting_at: string; + ending_at?: null; + dashboard_path: string; + description: string; + environment_id: number; + cluster_id?: null; +} + +export class DashboardAnnotations extends BaseResource { + create( + dashboardPath: string, + startingAt: string, + description: string, + { + environmentId, + clusterId, + ...options + }: Either<{ environmentId: number }, { clusterId: number }> & { endingAt?: string } & Sudo & + ShowExpanded, + ): Promise> { + let url: string; + + if (environmentId) url = endpoint`environments/${environmentId}/metrics_dashboard/annotations`; + else if (clusterId) url = endpoint`clusters/${clusterId}/metrics_dashboard/annotations`; + else + throw new Error( + 'Missing required argument. Please supply a environmentId or a cluserId in the options parameter.', + ); + + return RequestHelper.post()(this, url, { + dashboardPath, + startingAt, + description, + ...options, + }); + } +} diff --git a/packages/core/src/resources/Debian.ts b/packages/core/src/resources/Debian.ts new file mode 100644 index 000000000..1841562b8 --- /dev/null +++ b/packages/core/src/resources/Debian.ts @@ -0,0 +1,132 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { Either, GitlabAPIResponse, ShowExpanded } from '../infrastructure'; + +function url({ + projectId, + groupId, +}: { projectId?: string | number; groupId?: string | number } = {}): string { + if (projectId) return endpoint`/projects/${projectId}/packages/debian`; + if (groupId) return endpoint`/groups/${groupId}/-/packages/debian`; + + throw new Error( + 'Missing required argument. Please supply a projectId or a groupId in the options parameter', + ); +} + +export class Debian extends BaseResource { + downloadBinaryFileIndex( + distribution: string, + component: string, + architecture: string, + { + projectId, + groupId, + ...options + }: Either<{ projectId: string | number }, { groupId: string | number }> & ShowExpanded, + ): Promise> { + const prefix = url({ + projectId, + groupId, + }); + + return RequestHelper.get()( + this, + `${prefix}/dists/${distribution}/${component}/binary-${architecture}/Packages`, + options as ShowExpanded, + ); + } + + downloadDistributionReleaseFile( + distribution: string, + { + projectId, + groupId, + ...options + }: Either<{ projectId: string | number }, { groupId: string | number }> & ShowExpanded, + ): Promise> { + const prefix = url({ + projectId, + groupId, + }); + + return RequestHelper.get()( + this, + `${prefix}/dists/${distribution}/Release`, + options as ShowExpanded, + ); + } + + downloadSignedDistributionReleaseFile( + distribution: string, + { + projectId, + groupId, + ...options + }: Either<{ projectId: string | number }, { groupId: string | number }> & ShowExpanded, + ): Promise> { + const prefix = url({ + projectId, + groupId, + }); + + return RequestHelper.get()( + this, + `${prefix}/dists/${distribution}/InRelease`, + options as ShowExpanded, + ); + } + + downloadReleaseFileSignature( + distribution: string, + { + projectId, + groupId, + ...options + }: Either<{ projectId: string | number }, { groupId: string | number }> & ShowExpanded, + ): Promise> { + const prefix = url({ + projectId, + groupId, + }); + + return RequestHelper.get()( + this, + `${prefix}/dists/${distribution}/Release.gpg`, + options as ShowExpanded, + ); + } + + downloadPackageFile( + projectId: string | number, + distribution: string, + letter: string, + packageName: string, + packageVersion: string, + filename: string, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/packages/debian/pool/${distribution}/${letter}/${packageName}/${packageVersion}/${filename}`, + options, + ); + } + + uploadPackageFile( + projectId: string | number, + content: Blob, + filename: string, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`projects/${projectId}/packages/debian/${filename}`, + { + isForm: true, + ...options, + file: [content, filename], + }, + ); + } +} diff --git a/packages/core/src/resources/DependencyProxy.ts b/packages/core/src/resources/DependencyProxy.ts new file mode 100644 index 000000000..42d99c371 --- /dev/null +++ b/packages/core/src/resources/DependencyProxy.ts @@ -0,0 +1,12 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export class DependencyProxy extends BaseResource { + remove( + groupId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, `groups/${groupId}/dependency_proxy/cache`, options); + } +} diff --git a/packages/core/src/resources/DeployKeys.ts b/packages/core/src/resources/DeployKeys.ts index a47b28f2d..d27e46931 100644 --- a/packages/core/src/resources/DeployKeys.ts +++ b/packages/core/src/resources/DeployKeys.ts @@ -1,42 +1,80 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - RequestHelper, - Sudo, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { BaseRequestOptions, - PaginatedRequestOptions, - endpoint, + EitherOrNone, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, } from '../infrastructure'; +import type { SimpleProjectSchema } from './Projects'; -export interface DeployKeySchema extends Record { +export interface CondensedDeployKeySchema extends Record { id: number; title: string; key: string; - can_push?: boolean; created_at: string; } -export class DeployKeys extends BaseResource { - add(projectId: string | number, options?: Sudo) { - return RequestHelper.post()( - this, - endpoint`projects/${projectId}/deploy_keys`, - options, - ); - } +export interface DeployKeySchema extends CondensedDeployKeySchema { + fingerprint: string; + fingerprint_sha256: string; + expires_at?: string; + can_push?: boolean; +} + +export interface ExpandedDeployKeySchema extends DeployKeySchema { + projects_with_write_access?: SimpleProjectSchema[]; +} - all({ projectId, ...options }: { projectId?: string | number } & PaginatedRequestOptions = {}) { +export class DeployKeys extends BaseResource { + all( + { + projectId, + userId, + ...options + }: EitherOrNone<{ projectId?: string | number }, { userId?: string | number }> & { + public?: boolean; + } & PaginationRequestOptions

& + BaseRequestOptions = {} as any, + ): Promise> { let url: string; if (projectId) { url = endpoint`projects/${projectId}/deploy_keys`; + } else if (userId) { + url = endpoint`users/${userId}/project_deploy_keys`; } else { url = 'deploy_keys'; } - return RequestHelper.get[]>()(this, url, options); + return RequestHelper.get()(this, url, options); + } + + create( + projectId: string | number, + title: string, + key: string, + options?: { canPush?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/deploy_keys`, + { + title, + key, + ...options, + }, + ); } - edit(projectId: string | number, keyId: number, options?: BaseRequestOptions) { + edit( + projectId: string | number, + keyId: number, + options?: { canPush?: boolean; title?: string } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.put()( this, endpoint`projects/${projectId}/deploy_keys/${keyId}`, @@ -44,19 +82,31 @@ export class DeployKeys extends BaseResource { ); } - enable(projectId: string | number, keyId: number, options?: Sudo) { - return RequestHelper.post>()( + enable( + projectId: string | number, + keyId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, endpoint`projects/${projectId}/deploy_keys/${keyId}/enable`, options, ); } - remove(projectId: string | number, keyId: number, options?: Sudo) { + remove( + projectId: string | number, + keyId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()(this, endpoint`projects/${projectId}/deploy_keys/${keyId}`, options); } - show(projectId: string | number, keyId: number, options?: Sudo) { + show( + projectId: string | number, + keyId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/deploy_keys/${keyId}`, diff --git a/packages/core/src/resources/DeployTokens.ts b/packages/core/src/resources/DeployTokens.ts new file mode 100644 index 000000000..d9adcb550 --- /dev/null +++ b/packages/core/src/resources/DeployTokens.ts @@ -0,0 +1,128 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + BaseRequestOptions, + Either, + EitherOrNone, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export type DeployTokenScope = + | 'read_repository' + | 'read_registry' + | 'write_registry' + | 'read_package_registry' + | 'write_package_registry'; + +export interface DeployTokenSchema extends Record { + id: number; + name: string; + username: string; + expires_at: string; + revoked: boolean; + expired: boolean; + scopes?: DeployTokenScope[]; +} + +export class DeployTokens extends BaseResource { + all( + { + projectId, + groupId, + ...options + }: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & { + active?: boolean; + } & PaginationRequestOptions

& + BaseRequestOptions = {} as any, + ): Promise> { + let url: string; + + if (projectId) url = endpoint`projects/${projectId}/deploy_tokens`; + else if (groupId) url = endpoint`groups/${groupId}/deploy_tokens`; + else url = 'deploy_tokens'; + + return RequestHelper.get()(this, url, options); + } + + create( + name: string, + scopes: string[], + { + projectId, + groupId, + ...options + }: Either<{ projectId: string | number }, { groupId: string | number }> & + Sudo & + ShowExpanded = {} as any, + ): Promise> { + let url: string; + + if (projectId) url = endpoint`projects/${projectId}/deploy_tokens`; + else if (groupId) url = endpoint`groups/${groupId}/deploy_tokens`; + else { + throw new Error( + 'Missing required argument. Please supply a projectId or a groupId in the options parameter.', + ); + } + + return RequestHelper.post()(this, url, { + name, + scopes, + ...options, + }); + } + + remove( + tokenId: number, + { + projectId, + groupId, + ...options + }: Either<{ projectId: string | number }, { groupId: string | number }> & + Sudo & + ShowExpanded = {} as any, + ): Promise> { + let url: string; + + if (projectId) url = endpoint`projects/${projectId}/deploy_tokens/${tokenId}`; + else if (groupId) url = endpoint`groups/${groupId}/deploy_tokens/${tokenId}`; + else { + throw new Error( + 'Missing required argument. Please supply a projectId or a groupId in the options parameter.', + ); + } + + return RequestHelper.del()(this, url, options as any as Sudo & ShowExpanded); + } + + show( + tokenId: number, + { + projectId, + groupId, + ...options + }: Either<{ projectId: string | number }, { groupId: string | number }> & + Sudo & + ShowExpanded = {} as any, + ): Promise> { + let url: string; + + if (projectId) url = endpoint`projects/${projectId}/deploy_tokens/${tokenId}`; + else if (groupId) url = endpoint`groups/${groupId}/deploy_tokens/${tokenId}`; + else { + throw new Error( + 'Missing required argument. Please supply a projectId or a groupId in the options parameter.', + ); + } + + return RequestHelper.get()( + this, + url, + options as any as Sudo & ShowExpanded, + ); + } +} diff --git a/packages/core/src/resources/Deployments.ts b/packages/core/src/resources/Deployments.ts index 36ed00288..46b4dff95 100644 --- a/packages/core/src/resources/Deployments.ts +++ b/packages/core/src/resources/Deployments.ts @@ -1,46 +1,72 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { RequestHelper, PaginatedRequestOptions, Sudo, endpoint } from '../infrastructure'; -import { CommitSchema } from './Commits'; -import { PipelineSchema } from './Pipelines'; -import { UserSchema } from './Users'; -import { RunnerSchema } from './Runners'; -import { EnvironmentSchema } from './Environments'; -import { MergeRequestSchema } from './MergeRequests'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { CommitSchema } from './Commits'; +import type { PipelineSchema } from './Pipelines'; +import type { UserSchema } from './Users'; +import type { RunnerSchema } from './Runners'; +import type { EnvironmentSchema } from './Environments'; +import type { AllMergeRequestsOptions, MergeRequestSchema } from './MergeRequests'; export type DeploymentStatus = 'created' | 'running' | 'success' | 'failed' | 'canceled'; -export interface DeployableSchema { +export interface DeployableSchema extends Record { id: number; ref: string; name: string; runner?: RunnerSchema; stage?: string; - started_at?: Date; + started_at?: string; status?: DeploymentStatus; tag: boolean; commit?: CommitSchema; coverage?: string; - created_at?: Date; - finished_at?: Date; + created_at?: string; + finished_at?: string; user?: UserSchema; pipeline?: PipelineSchema; } -export type DeploymentSchema = { +export interface DeploymentApprovalStatusSchema extends Record { + user: UserSchema; + status: 'approved' | 'rejected'; + created_at: string; + comment: string; +} + +export interface DeploymentSchema extends Record { id: number; iid: number; ref: string; sha: string; - user: UserSchema; created_at: string; updated_at: string; status: DeploymentStatus; + user: UserSchema; deployable: DeployableSchema; environment: EnvironmentSchema; +} + +export type AllDeploymentsOptions = { + orderBy?: 'id' | 'iid' | 'created_at' | 'updated_at' | 'ref'; + sort?: 'asc' | 'desc'; + updatedAfter?: string; + updatedBefore?: string; + environment?: string; + status?: 'created' | 'running' | 'success' | 'failed' | 'canceled' | 'blocked'; }; export class Deployments extends BaseResource { - all(projectId: string | number, options?: PaginatedRequestOptions) { + all( + projectId: string | number, + options?: AllDeploymentsOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/deployments`, @@ -48,15 +74,26 @@ export class Deployments extends BaseResource { ); } - create( + allMergeRequests( + projectId: string | number, + deploymentId: number, + options?: AllMergeRequestsOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/deployments/${deploymentId}/merge_requests`, + options, + ); + } + + create( projectId: string | number, environment: string, sha: string, ref: string, tag: string, - status: DeploymentStatus, - options?: Sudo, - ) { + options?: { status?: 'running' | 'success' | 'failed' | 'canceled' } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/deployments`, @@ -65,35 +102,63 @@ export class Deployments extends BaseResource { sha, ref, tag, - status, ...options, }, ); } - edit(projectId: string | number, deploymentId: number, status: DeploymentStatus, options?: Sudo) { + edit( + projectId: string | number, + deploymentId: number, + status: 'running' | 'success' | 'failed' | 'canceled', + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.put()( this, endpoint`projects/${projectId}/deployments/${deploymentId}`, { - status, ...options, + status, }, ); } - show(projectId: string | number, deploymentId: number, options?: Sudo) { - return RequestHelper.get()( + remove( + projectId: string | number, + deploymentId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del<{ message: string }>()( this, endpoint`projects/${projectId}/deployments/${deploymentId}`, options, ); } - mergeRequests(projectId: string | number, deploymentId: number, options?: Sudo) { - return RequestHelper.get()( + setApproval( + projectId: string | number, + deploymentId: number, + status: 'approved' | 'rejected', + options?: { comment?: string; representedAs?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/deployments/${deploymentId}/merge_requests`, + endpoint`projects/${projectId}/deployments/${deploymentId}/approval`, + { + ...options, + status, + }, + ); + } + + show( + projectId: string | number, + deploymentId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/deployments/${deploymentId}`, options, ); } diff --git a/packages/core/src/resources/DockerfileTemplates.ts b/packages/core/src/resources/DockerfileTemplates.ts index 0faf1bc2a..7e88de981 100644 --- a/packages/core/src/resources/DockerfileTemplates.ts +++ b/packages/core/src/resources/DockerfileTemplates.ts @@ -1,4 +1,4 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceTemplates } from '../templates'; export class DockerfileTemplates extends ResourceTemplates { diff --git a/packages/core/src/resources/Environments.ts b/packages/core/src/resources/Environments.ts index bf74e3fa1..81f0dda17 100644 --- a/packages/core/src/resources/Environments.ts +++ b/packages/core/src/resources/Environments.ts @@ -1,71 +1,144 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + EitherOrNone, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; -import { DeploymentSchema, DeployableSchema } from './Deployments'; -import { ProjectSchema } from './Projects'; +import type { DeployableSchema, DeploymentSchema } from './Deployments'; + +export type EnvironmentTier = 'production' | 'staging' | 'testing' | 'development' | 'other'; export interface EnvironmentSchema extends Record { id: number; name: string; - slug?: string; - external_url?: string; - project?: ProjectSchema; - state?: string; - last_deployment?: DeploymentSchema; - deployable?: DeployableSchema; + slug: string; + external_url: string; + state: string; + tier: EnvironmentTier; + created_at: string; + updated_at: string; + enable_advanced_logs_querying: boolean; + logs_api_path: string; + last_deployment: DeploymentSchema; + deployable: DeployableSchema; } +export type CondensedEnvironmentSchema = Omit; + +export type ReviewAppSchema = Omit; + export class Environments extends BaseResource { - all(projectId: string | number, options?: PaginatedRequestOptions) { - return RequestHelper.get[]>()( + all( + projectId: string | number, + options?: PaginationRequestOptions

& + EitherOrNone<{ name: string }, { search: string }> & { + states?: 'available' | 'stopping' | 'stopped'; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, endpoint`projects/${projectId}/environments`, options, ); } - show(projectId: string | number, environmentId: number, options?: Sudo) { - return RequestHelper.get()( + create( + projectId: string | number, + name: string, + options?: { externalUrl?: string; tier?: EnvironmentTier } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/environments/${environmentId}`, - options, + endpoint`projects/${projectId}/environments`, + { + name, + ...options, + }, ); } - create(projectId: string | number, options?: BaseRequestOptions) { - return RequestHelper.post>()( + edit( + projectId: string | number, + environmentId: number, + options?: { externalUrl?: string; tier?: EnvironmentTier } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( this, - endpoint`projects/${projectId}/environments`, + endpoint`projects/${projectId}/environments/${environmentId}`, options, ); } - edit(projectId: string | number, environmentId: number, options?: BaseRequestOptions) { - return RequestHelper.put>()( + remove( + projectId: string | number, + environmentId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( this, endpoint`projects/${projectId}/environments/${environmentId}`, options, ); } - remove(projectId: string | number, environmentId: number, options?: Sudo) { - return RequestHelper.del()( + removeReviewApps( + projectId: string | number, + options?: { before?: string; limit?: number; dryRun?: boolean } & Sudo & ShowExpanded, + ): Promise< + GitlabAPIResponse< + { scheduled_entries: ReviewAppSchema[]; unprocessable_entries: ReviewAppSchema[] }, + C, + E, + void + > + > { + return RequestHelper.del<{ + scheduled_entries: ReviewAppSchema[]; + unprocessable_entries: ReviewAppSchema[]; + }>()(this, endpoint`projects/${projectId}/environments/review_apps`, options); + } + + show( + projectId: string | number, + environmentId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, endpoint`projects/${projectId}/environments/${environmentId}`, options, ); } - stop(projectId: string | number, environmentId: number, options?: Sudo) { - return RequestHelper.post>()( + stop( + projectId: string | number, + environmentId: number, + options?: { force?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, endpoint`projects/${projectId}/environments/${environmentId}/stop`, options, ); } + + stopStale( + projectId: string | number, + before: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post<{ message: string }>()( + this, + endpoint`projects/${projectId}/environments/stop_stale`, + { + searchParams: { before }, + ...options, + }, + ); + } } diff --git a/packages/core/src/resources/EpicAwardEmojis.ts b/packages/core/src/resources/EpicAwardEmojis.ts new file mode 100644 index 000000000..4e0e8c9a4 --- /dev/null +++ b/packages/core/src/resources/EpicAwardEmojis.ts @@ -0,0 +1,47 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceAwardEmojis } from '../templates'; +import type { AwardEmojiSchema } from '../templates/ResourceAwardEmojis'; +import type { + BaseRequestOptions, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface EpicAwardEmojis extends ResourceAwardEmojis { + all( + epicId: string | number, + issueIId: number, + options?: PaginationRequestOptions

& BaseRequestOptions, + ): Promise>; + + award( + epicId: string | number, + issueIId: number, + name: string, + options?: Sudo & ShowExpanded, + ): Promise>; + + remove( + epicId: string | number, + issueIId: number, + awardId: number, + options?: Sudo & ShowExpanded, + ): Promise>; + + show( + epicId: string | number, + issueIId: number, + awardId: number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class EpicAwardEmojis extends ResourceAwardEmojis { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('epics', 'issues', options); + } +} diff --git a/packages/core/src/resources/EpicDiscussions.ts b/packages/core/src/resources/EpicDiscussions.ts index 968f0b3d7..4ee685a3f 100644 --- a/packages/core/src/resources/EpicDiscussions.ts +++ b/packages/core/src/resources/EpicDiscussions.ts @@ -1,58 +1,59 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceDiscussions } from '../templates'; -import { DiscussionSchema } from '../templates/types'; -import { - BaseRequestOptions, - PaginatedRequestOptions, +import type { DiscussionNoteSchema, DiscussionSchema } from '../templates/ResourceDiscussions'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - CamelizedRecord, } from '../infrastructure'; export interface EpicDiscussions extends ResourceDiscussions { - addNote( + addNote( groupId: string | number, epicId: number, - discussionId: string | number, + discussionId: string, noteId: number, body: string, - options?: BaseRequestOptions, - ): Promise>; + options?: { createdAt?: string } & Sudo & ShowExpanded, + ): Promise>; - all( + all( groupId: string | number, epicId: number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - create( + create( groupId: string | number, epicId: number, body: string, - options?: BaseRequestOptions, - ): Promise>; + options?: { createdAt?: string } & Sudo & ShowExpanded, + ): Promise>; - editNote( + editNote( groupId: string | number, epicId: number, - discussionId: string | number, + discussionId: string, noteId: number, - options: BaseRequestOptions & { body: string }, - ): Promise>; + options: Sudo & ShowExpanded & { body: string }, + ): Promise>; - removeNote( + removeNote( groupId: string | number, epicId: number, - discussionId: string | number, + discussionId: string, noteId: number, - options?: Sudo, - ): Promise; + options?: Sudo & ShowExpanded, + ): Promise>; - show( + show( groupId: string | number, epicId: number, - discussionId: string | number, - options?: Sudo, - ): Promise>; + discussionId: string, + options?: Sudo & ShowExpanded, + ): Promise>; } export class EpicDiscussions extends ResourceDiscussions { diff --git a/packages/core/src/resources/EpicIssues.ts b/packages/core/src/resources/EpicIssues.ts index a71cb720d..1f4babfa0 100644 --- a/packages/core/src/resources/EpicIssues.ts +++ b/packages/core/src/resources/EpicIssues.ts @@ -1,20 +1,30 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { IssueSchema } from './Issues'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; +import type { IssueSchema } from './Issues'; export interface EpicIssueSchema extends Omit { epic_issue_id: number; } +export interface ExpandedEpicIssueSchema extends EpicIssueSchema { + subscribed: boolean; + relative_position: number; +} + export class EpicIssues extends BaseResource { - all(groupId: string | number, epicIId: number, options?: PaginatedRequestOptions) { + all( + groupId: string | number, + epicIId: number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`groups/${groupId}/epics/${epicIId}/issues`, @@ -22,7 +32,12 @@ export class EpicIssues extends BaseResource { ); } - assign(groupId: string | number, epicIId: number, epicIssueId: number, options?: Sudo) { + assign( + groupId: string | number, + epicIId: number, + epicIssueId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`groups/${groupId}/epics/${epicIId}/issues/${epicIssueId}`, @@ -30,20 +45,25 @@ export class EpicIssues extends BaseResource { ); } - edit( + edit( groupId: string | number, epicIId: number, epicIssueId: number, - options?: BaseRequestOptions, - ) { - return RequestHelper.put()( + options?: { moveBeforeId?: number; moveAfterId?: number } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( this, endpoint`groups/${groupId}/epics/${epicIId}/issues/${epicIssueId}`, options, ); } - remove(groupId: string | number, epicIId: number, epicIssueId: number, options?: Sudo) { + remove( + groupId: string | number, + epicIId: number, + epicIssueId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, endpoint`groups/${groupId}/epics/${epicIId}/issues/${epicIssueId}`, diff --git a/packages/core/src/resources/EpicLabelEvents.ts b/packages/core/src/resources/EpicLabelEvents.ts new file mode 100644 index 000000000..668971dd6 --- /dev/null +++ b/packages/core/src/resources/EpicLabelEvents.ts @@ -0,0 +1,33 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceLabelEvents } from '../templates'; +import type { LabelEventSchema } from '../templates/ResourceLabelEvents'; +import type { + BaseRequestOptions, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface EpicLabelEvents { + all( + groupId: string | number, + epidId: number, + options?: BaseRequestOptions & PaginationRequestOptions

, + ): Promise>; + + show( + groupId: string | number, + epidId: number, + labelEventId: number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class EpicLabelEvents extends ResourceLabelEvents { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('groups', 'epic', options); + } +} diff --git a/packages/core/src/resources/EpicLinks.ts b/packages/core/src/resources/EpicLinks.ts new file mode 100644 index 000000000..2fcab8b6c --- /dev/null +++ b/packages/core/src/resources/EpicLinks.ts @@ -0,0 +1,117 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import { UserSchema } from './Users'; + +export interface CondensedEpicLinkSchema extends Record { + id: number; + iid: number; + group_id: number; + parent_id: number; + title: string; + has_children: boolean; + has_issues: boolean; + reference: string; + url: string; + relation_url: string; +} + +export interface EpicLinkSchema extends Record { + id: number; + iid: number; + group_id: number; + parent_id: number; + title: string; + description: string; + author: UserSchema; + start_date?: string; + start_date_is_fixed: boolean; + start_date_fixed?: string; + start_date_from_milestones?: string; + start_date_from_inherited_source?: string; + due_date: string; + due_date_is_fixed: boolean; + due_date_fixed?: string; + due_date_from_milestones?: string; + due_date_from_inherited_source: string; + created_at: string; + updated_at: string; + labels?: string[]; +} + +export class EpicLinks extends BaseResource { + all( + groupId: string | number, + epicIId: number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`groups/${groupId}/epics/${epicIId}/links`, + options, + ); + } + + assign( + groupId: string | number, + epicIId: number, + childEpicId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`groups/${groupId}/epics/${epicIId}/links/${childEpicId}`, + options, + ); + } + + create( + groupId: string | number, + epicIId: number, + title: string, + options?: { confidential?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`groups/${groupId}/epics/${epicIId}/links`, + { + searchParams: { + title, + }, + ...options, + }, + ); + } + + reorder( + groupId: string | number, + epicIId: number, + childEpicId: number, + options?: { moveBeforeId?: number; moveAfterId?: number } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`groups/${groupId}/epics/${epicIId}/links/${childEpicId}`, + options, + ); + } + + unassign( + groupId: string | number, + epicIId: number, + childEpicId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`groups/${groupId}/epics/${epicIId}/links/${childEpicId}`, + options, + ); + } +} diff --git a/packages/core/src/resources/EpicNotes.ts b/packages/core/src/resources/EpicNotes.ts index af26d5972..7f12d4430 100644 --- a/packages/core/src/resources/EpicNotes.ts +++ b/packages/core/src/resources/EpicNotes.ts @@ -1,48 +1,59 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceNotes } from '../templates'; -import { NoteSchema } from '../templates/types'; -import { - PaginatedRequestOptions, - BaseRequestOptions, +import type { NoteSchema } from '../templates/ResourceNotes'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - CamelizedRecord, } from '../infrastructure'; export interface EpicNoteSchema extends NoteSchema { + confidential: boolean; file_name: string; expires_at: string; } export interface EpicNotes extends ResourceNotes { - all( + all( groupId: string | number, epicId: number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: { + sort?: 'asc' | 'desc'; + orderBy?: 'created_at' | 'updated_at'; + } & PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise>; - create( + create( groupId: string | number, epicId: number, body: string, - options?: BaseRequestOptions, - ): Promise>; + options?: { internal?: boolean; createdAt?: string } & Sudo & ShowExpanded, + ): Promise>; - edit( + edit( groupId: string | number, epicId: number, noteId: number, - body: string, - options?: BaseRequestOptions, - ): Promise>; - - remove(groupId: string | number, epicId: number, noteId: number, options?: Sudo): Promise; + options: { body: string } & Sudo & ShowExpanded, + ): Promise>; - show( + remove( groupId: string | number, epicId: number, noteId: number, options?: Sudo, - ): Promise>; + ): Promise>; + + show( + groupId: string | number, + epicId: number, + noteId: number, + options?: Sudo & ShowExpanded, + ): Promise>; } export class EpicNotes extends ResourceNotes { diff --git a/packages/core/src/resources/Epics.ts b/packages/core/src/resources/Epics.ts index 63e9690e7..63b6a9695 100644 --- a/packages/core/src/resources/Epics.ts +++ b/packages/core/src/resources/Epics.ts @@ -1,24 +1,27 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { UserSchema } from './Users'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; +import type { TodoSchema } from './TodoLists'; +import type { UserSchema } from './Users'; +import type { GroupSchema } from './Groups'; export interface EpicSchema extends Record { id: number; iid: number; group_id: number; parent_id: number; + parent_iid: number; title: string; description: string; state: string; confidential: string; web_url: string; - reference: string; references: { short: string; relative: string; @@ -46,34 +49,119 @@ export interface EpicSchema extends Record { }; } +export interface EpicTodoSchema extends TodoSchema { + group: Pick; + target_type: 'Epic'; + target: EpicSchema; +} + +export type AllEpicsOptions = { + authorId?: number; + authorUsername?: string; + labels?: string; + withLabelsDetails?: boolean; + orderBy?: 'created_at' | 'updated_at' | 'title'; + sort?: string; + search?: string; + state?: string; + createdAfter?: string; + createdBefore?: string; + updatedAfter?: string; + updatedBefore?: string; + includeAncestorGroups?: boolean; + includeDescendantGroups?: boolean; + myReactionEmoji?: string; + not?: Record; +}; + +export type CreateEpicOptions = { + labels?: string; + description?: string; + color?: string; + confidential?: boolean; + createdAt?: string; + startDateIsFixed?: boolean; + startDateFixed?: string; + dueDateIsFixed?: boolean; + dueDateFixed?: string; + parentId?: number | string; +}; + +export type EditEpicOptions = { + addLabels?: string; + confidential?: boolean; + description?: string; + dueDateFixed?: string; + dueDateIsFixed?: boolean; + labels?: string; + parentId?: number | string; + removeLabels?: string; + startDateFixed?: string; + startDateIsFixed?: boolean; + stateEvent?: string; + title?: string; + updatedAt?: string; + color?: string; +}; export class Epics extends BaseResource { - all(groupId: string | number, options?: PaginatedRequestOptions) { + all( + groupId: string | number, + options?: AllEpicsOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()(this, endpoint`groups/${groupId}/epics`, options); } - create(groupId: string | number, title: string, options?: BaseRequestOptions) { + create( + groupId: string | number, + title: string, + options?: CreateEpicOptions & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()(this, endpoint`groups/${groupId}/epics`, { title, ...options, }); } - edit(groupId: string | number, epicId: number, options?: BaseRequestOptions) { - return RequestHelper.put()( + createTodo( + groupId: string | number, + epicIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`groups/${groupId}/epics/${epicIId}/todos`, + options, + ); + } + + edit( + groupId: string | number, + epicIId: number, + options?: EditEpicOptions & Sudo & ShowExpanded, + ): Promise, C, E, void>> { + return RequestHelper.put>()( this, - endpoint`groups/${groupId}/epics/${epicId}`, + endpoint`groups/${groupId}/epics/${epicIId}`, options, ); } - remove(groupId: string | number, epicId: number, options?: Sudo) { - return RequestHelper.del()(this, endpoint`groups/${groupId}/epics/${epicId}`, options); + remove( + groupId: string | number, + epicIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`groups/${groupId}/epics/${epicIId}`, options); } - show(groupId: string | number, epicId: number, options?: Sudo) { + show( + groupId: string | number, + epicIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, - endpoint`groups/${groupId}/epics/${epicId}`, + endpoint`groups/${groupId}/epics/${epicIId}`, options, ); } diff --git a/packages/core/src/resources/ErrorTrackingClientKeys.ts b/packages/core/src/resources/ErrorTrackingClientKeys.ts new file mode 100644 index 000000000..2308d021d --- /dev/null +++ b/packages/core/src/resources/ErrorTrackingClientKeys.ts @@ -0,0 +1,51 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface ErrorTrackingClientKeySchema extends Record { + id: number; + active: boolean; + public_key: string; + sentry_dsn: string; +} + +export class ErrorTrackingClientKeys extends BaseResource { + all( + projectId: string | number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/error_tracking/client_keys`, + options, + ); + } + + create( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/error_tracking/client_keys`, + options, + ); + } + + remove( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`projects/${projectId}/error_tracking/client_keys`, + options, + ); + } +} diff --git a/packages/core/src/resources/ErrorTrackingSettings.ts b/packages/core/src/resources/ErrorTrackingSettings.ts new file mode 100644 index 000000000..d203fd786 --- /dev/null +++ b/packages/core/src/resources/ErrorTrackingSettings.ts @@ -0,0 +1,61 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface ErrorTrackingSettingsSchema extends Record { + active: boolean; + project_name: string; + sentry_external_url: string; + api_url: string; + integrated: boolean; +} + +export class ErrorTrackingSettings extends BaseResource { + create( + projectId: string | number, + active: boolean, + integrated: boolean, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`projects/${projectId}/error_tracking/settings`, + { + searchParams: { + active, + integrated, + }, + ...options, + }, + ); + } + + edit( + projectId: string | number, + active: boolean, + { integrated, ...options }: { integrated?: boolean } & Sudo & ShowExpanded = {}, + ): Promise> { + return RequestHelper.patch()( + this, + endpoint`projects/${projectId}/error_tracking/settings`, + { + searchParams: { + active, + integrated, + }, + ...options, + }, + ); + } + + show( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/error_tracking/settings`, + options, + ); + } +} diff --git a/packages/core/src/resources/Events.ts b/packages/core/src/resources/Events.ts index 9cb0516a7..e11683c88 100644 --- a/packages/core/src/resources/Events.ts +++ b/packages/core/src/resources/Events.ts @@ -1,8 +1,15 @@ import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + BaseRequestOptions, + EitherOrNone, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, +} from '../infrastructure'; import { UserSchema } from './Users'; -import { RequestHelper, PaginatedRequestOptions, endpoint } from '../infrastructure'; -export interface EventOptions { +export type AllEventOptions = { action?: | 'created' | 'updated' @@ -20,7 +27,7 @@ export interface EventOptions { after?: string; scope?: string; sort?: 'asc' | 'desc'; -} +}; export interface EventSchema extends Record { id: number; @@ -37,17 +44,21 @@ export interface EventSchema extends Record { } export class Events extends BaseResource { - all({ - projectId, - ...options - }: { projectId?: string | number } & PaginatedRequestOptions & EventOptions = {}) { + all( + { + projectId, + userId, + ...options + }: EitherOrNone<{ projectId?: string | number }, { userId: string | number }> & + AllEventOptions & + PaginationRequestOptions

& + BaseRequestOptions = {} as any, + ): Promise> { let url: string; - if (projectId) { - url = endpoint`projects/${projectId}/events`; - } else { - url = 'events'; - } + if (projectId) url = endpoint`projects/${projectId}/events`; + else if (userId) url = endpoint`users/${userId}/events`; + else url = 'events'; return RequestHelper.get()(this, url, options); } diff --git a/packages/core/src/resources/Experiments.ts b/packages/core/src/resources/Experiments.ts new file mode 100644 index 000000000..1564c6b30 --- /dev/null +++ b/packages/core/src/resources/Experiments.ts @@ -0,0 +1,38 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { + BaseRequestOptions, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, +} from '../infrastructure'; + +export interface ExperimentGateSchema { + key: string; + value: boolean | number; +} + +export interface ExperimentSchema extends Record { + key: string; + definition: { + name: string; + introduced_by_url: string; + rollout_issue_url: string; + milestone: string; + type: string; + group: string; + default_enabled: boolean; + }; + current_status: { + state: string; + gates?: ExperimentGateSchema[]; + }; +} + +export class Experiments extends BaseResource { + all( + options?: PaginationRequestOptions

& BaseRequestOptions, + ): Promise> { + return RequestHelper.get()(this, 'experiments', options); + } +} diff --git a/packages/core/src/resources/ExternalStatusChecks.ts b/packages/core/src/resources/ExternalStatusChecks.ts new file mode 100644 index 000000000..c6f7757a7 --- /dev/null +++ b/packages/core/src/resources/ExternalStatusChecks.ts @@ -0,0 +1,144 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface BaseExternalStatusCheckSchema extends Record { + id: number; + name: string; + external_url: string; + status: string; +} + +export type MergeRequestExternalStatusCheckSchema = BaseExternalStatusCheckSchema; + +export interface ExternalStatusCheckProtectedBranchesSchema { + id: number; + project_id: number; + name: string; + created_at: string; + updated_at: string; + code_owner_approval_required: boolean; +} + +export interface ProjectExternalStatusCheckSchema extends BaseExternalStatusCheckSchema { + project_id: number; + protected_branches?: ExternalStatusCheckProtectedBranchesSchema[]; +} + +export class ExternalStatusChecks extends BaseResource { + all( + projectId: string | number, + options: { mergerequestIId: number } & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; + + all( + projectId: string | number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; + + all( + projectId: string | number, + options?: { mergerequestIId?: number } & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise { + const { mergerequestIId, ...opts } = options || {}; + let url: string = endpoint`projects/${projectId}`; + + if (mergerequestIId) { + url += endpoint`/merge_requests/${mergerequestIId}/status_checks`; + } else { + url += '/external_status_checks'; + } + + return RequestHelper.get< + (MergeRequestExternalStatusCheckSchema | ProjectExternalStatusCheckSchema)[] + >()(this, url, opts); + } + + create( + projectId: string | number, + name: string, + externalUrl: string, + options?: { protectedBrancheIds: number[] } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/external_status_checks`, + { + name, + externalUrl, + ...options, + }, + ); + } + + edit( + projectId: string | number, + externalStatusCheckId: number, + options?: { + protectedBrancheIds?: number[]; + externalUrl?: string; + name?: string; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`projects/${projectId}/external_status_checks/${externalStatusCheckId}`, + options, + ); + } + + remove( + projectId: string | number, + externalStatusCheckId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`projects/${projectId}/external_status_checks/${externalStatusCheckId}`, + options, + ); + } + + set( + projectId: string | number, + mergerequestIId: number, + sha: string, + externalCheckStatusId: number, + options?: { status?: 'passed' | 'failed' } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/status_check_responses`, + { + sha, + externalCheckStatusId, + ...options, + }, + ); + } + + show( + projectId: string | number, + mergerequestIId: number, + sha: string, + externalCheckStatusId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/status_check_responses`, + { + sha, + externalCheckStatusId, + ...options, + }, + ); + } +} diff --git a/packages/core/src/resources/FeatureFlagUserLists.ts b/packages/core/src/resources/FeatureFlagUserLists.ts new file mode 100644 index 000000000..3a75ba103 --- /dev/null +++ b/packages/core/src/resources/FeatureFlagUserLists.ts @@ -0,0 +1,85 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface FeatureFlagUserListSchema extends Record { + name: string; + user_xids: string; + id: number; + iid: number; + project_id: string | number; + created_at: string; + updated_at: string; +} + +export class FeatureFlagUserLists extends BaseResource { + all( + projectId: string | number, + options?: { search?: string } & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/feature_flags_user_lists`, + options, + ); + } + + create( + projectId: string | number, + name: string, + userXIds: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/feature_flags_user_lists`, + { + name, + userXIds, + ...options, + }, + ); + } + + edit( + projectId: string | number, + featureFlagUserListIId: string, + options?: { name?: string; userXIds?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`projects/${projectId}/feature_flags_user_lists/${featureFlagUserListIId}`, + options, + ); + } + + remove( + projectId: string | number, + featureFlagUserListIId: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`projects/${projectId}/feature_flags_user_lists/${featureFlagUserListIId}`, + options, + ); + } + + show( + projectId: string | number, + featureFlagUserListIId: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/feature_flags_user_lists/${featureFlagUserListIId}`, + options, + ); + } +} diff --git a/packages/core/src/resources/FeatureFlags.ts b/packages/core/src/resources/FeatureFlags.ts index c902fab13..e1f92e454 100644 --- a/packages/core/src/resources/FeatureFlags.ts +++ b/packages/core/src/resources/FeatureFlags.ts @@ -1,23 +1,23 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; -export interface FeatureFlagStrategyScope { +export interface FeatureFlagStrategyScopeSchema { id: number; environment_scope: string; } -export interface FeatureFlagStrategy { + +export interface FeatureFlagStrategySchema { id: number; name: string; - parameters: { - user_ids: string; - }; - scopes?: FeatureFlagStrategyScope[]; + parameters: Record; + scopes?: FeatureFlagStrategyScopeSchema[]; } export interface FeatureFlagSchema extends Record { @@ -28,14 +28,38 @@ export interface FeatureFlagSchema extends Record { created_at: string; updated_at: string; scopes?: string[]; - strategies?: FeatureFlagStrategy[]; + strategies?: FeatureFlagStrategySchema[]; } +export type CreateFeatureFlagOptions = { + description?: string; + active?: boolean; + strategies?: { + name: string; + parameters?: Record; + scopes?: Omit[]; + }; +}; + +export type EditFeatureFlagOptions = { + description?: string; + active?: boolean; + strategies?: { + id: string; + name?: string; + _destroy?: boolean; + parameters?: Record; + scopes?: (FeatureFlagStrategyScopeSchema & { _destroy?: boolean })[]; + }; +}; + export class FeatureFlags extends BaseResource { - all( + all( projectId: string | number, - options: { scopes?: 'enabled' | 'disabled' } & PaginatedRequestOptions = {}, - ) { + options?: { scope?: 'enabled' | 'disabled' } & PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/feature_flags`, @@ -43,12 +67,12 @@ export class FeatureFlags extends BaseResource { ); } - create( + create( projectId: string | number, flagName: string, version: string, - options?: BaseRequestOptions, - ) { + options?: CreateFeatureFlagOptions & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/feature_flags`, @@ -60,15 +84,23 @@ export class FeatureFlags extends BaseResource { ); } - edit(projectId: string | number, flagName: string, options?: BaseRequestOptions) { + edit( + projectId: string | number, + featureFlagName: string, + options?: EditFeatureFlagOptions & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.put()( this, - endpoint`projects/${projectId}/feature_flags/${flagName}`, + endpoint`projects/${projectId}/feature_flags/${featureFlagName}`, options, ); } - remove(projectId: string | number, flagName: string, options?: Sudo) { + remove( + projectId: string | number, + flagName: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, endpoint`projects/${projectId}/feature_flags/${flagName}`, @@ -76,7 +108,11 @@ export class FeatureFlags extends BaseResource { ); } - show(projectId: string | number, flagName: string, options?: Sudo) { + show( + projectId: string | number, + flagName: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/feature_flags/${flagName}`, diff --git a/packages/core/src/resources/FreezePeriods.ts b/packages/core/src/resources/FreezePeriods.ts index 7d557a556..3df8ba9c0 100644 --- a/packages/core/src/resources/FreezePeriods.ts +++ b/packages/core/src/resources/FreezePeriods.ts @@ -1,11 +1,11 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - Sudo, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, ShowExpanded, - RequestHelper, - Camelize, - endpoint, + Sudo, } from '../infrastructure'; export interface FreezePeriodSchema extends Record { @@ -18,7 +18,10 @@ export interface FreezePeriodSchema extends Record { } export class FreezePeriods extends BaseResource { - all(projectId: string | number, options?: BaseRequestOptions) { + all( + projectId: string | number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/freeze_periods`, @@ -26,20 +29,12 @@ export class FreezePeriods extends BaseResource { ); } - show(projectId: string | number, freezePeriodId: number, options?: BaseRequestOptions) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/freeze_periods/${freezePeriodId}`, - options, - ); - } - - create( - projectId: number | string, + create( + projectId: string | number, freezeStart: string, freezeEnd: string, - options?: Camelize> & BaseRequestOptions, - ) { + options?: { cronTimezone?: string } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/freeze_periods`, @@ -51,12 +46,16 @@ export class FreezePeriods extends BaseResource { ); } - edit( - projectId: number | string, + edit( + projectId: string | number, freezePeriodId: number, - options?: Camelize> & - BaseRequestOptions, - ) { + options?: { + freezeStart?: string; + freezeEnd?: string; + cronTimezone?: string; + } & Sudo & + ShowExpanded, + ): Promise> { return RequestHelper.put()( this, endpoint`projects/${projectId}/freeze_periods/${freezePeriodId}`, @@ -64,11 +63,27 @@ export class FreezePeriods extends BaseResource { ); } - delete(projectId: number | string, freezePeriodId: number, options?: Sudo & ShowExpanded) { + remove( + projectId: string | number, + freezePeriodId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, endpoint`projects/${projectId}/freeze_periods/${freezePeriodId}`, options, ); } + + show( + projectId: string | number, + freezePeriodId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/freeze_periods/${freezePeriodId}`, + options, + ); + } } diff --git a/packages/core/src/resources/GeoNodes.ts b/packages/core/src/resources/GeoNodes.ts index 228aad7ef..65713c911 100644 --- a/packages/core/src/resources/GeoNodes.ts +++ b/packages/core/src/resources/GeoNodes.ts @@ -1,8 +1,10 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - PaginatedRequestOptions, - RequestHelper, +import { RequestHelper } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; @@ -139,40 +141,96 @@ export interface GeoNodeStatusSchema extends Record { group_wiki_repositories_failed_count: number; } +export type CreateGeoNodeOptions = { + primary?: boolean; + enabled?: boolean; + internalUrl?: string; + filesMaxCapacity?: number; + reposMaxCapacity?: number; + verificationMaxCapacity?: number; + containerRepositoriesMaxCapacity?: number; + syncObjectStorage?: boolean; + selectiveSyncType?: 'namespaces' | 'shards'; + selectiveSyncShards?: string[]; + selectiveSyncNamespaceIds?: number[]; + minimumReverificationInterval?: number; +}; + +export type EditGeoNodeOptions = { + enabled?: boolean; + name?: string; + url?: string; + internalUrl?: string; + filesMaxCapacity?: number; + reposMaxCapacity?: number; + verificationMaxCapacity?: number; + containerRepositoriesMaxCapacity?: number; + syncObjectStorage?: boolean; + selectiveSyncType?: 'namespaces' | 'shards'; + selectiveSyncShards?: string[]; + selectiveSyncNamespaceIds?: number[]; + minimumReverificationInterval?: number; +}; + export class GeoNodes extends BaseResource { - all(options?: PaginatedRequestOptions) { + all( + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()(this, 'geo_nodes', options); } - create(geonodeId: number, options?: BaseRequestOptions) { - return RequestHelper.post()(this, `geo_nodes/${geonodeId}`, options); + allStatuses( + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'geo_nodes/statuses', options); } - edit(geonodeId: number, options?: BaseRequestOptions) { - return RequestHelper.put()(this, `geo_nodes/${geonodeId}`, options); + allFailures( + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'geo_nodes/current/failures', options); } - failures(options?: BaseRequestOptions) { - return RequestHelper.get()(this, 'geo_nodes/current/failures', options); + create( + name: string, + url: string, + options?: CreateGeoNodeOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, 'geo_nodes', { name, url, ...options }); } - repair(geonodeId: number, options?: Sudo) { + edit( + geonodeId: number, + options?: EditGeoNodeOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()(this, `geo_nodes/${geonodeId}`, options); + } + + repair( + geonodeId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()(this, `geo_nodes/${geonodeId}/repair`, options); } - remove(geonodeId: number, options?: Sudo) { - return RequestHelper.del()(this, `geo_nodes/${geonodeId}`, options); + remove( + geonodeId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, `geo_nodes/${geonodeId}`, options); } - show(geonodeId: number, options?: Sudo) { + show( + geonodeId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()(this, `geo_nodes/${geonodeId}`, options); } - status(geonodeId: number, options?: Sudo) { + showStatus( + geonodeId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()(this, `geo_nodes/${geonodeId}/status`, options); } - - statuses(options?: PaginatedRequestOptions) { - return RequestHelper.get()(this, 'geo_nodes/statuses', options); - } } diff --git a/packages/core/src/resources/GitLabCIYMLTemplates.ts b/packages/core/src/resources/GitLabCIYMLTemplates.ts index 25f9dd9c5..ce13c24b8 100644 --- a/packages/core/src/resources/GitLabCIYMLTemplates.ts +++ b/packages/core/src/resources/GitLabCIYMLTemplates.ts @@ -1,4 +1,4 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceTemplates } from '../templates'; export class GitLabCIYMLTemplates extends ResourceTemplates { diff --git a/packages/core/src/resources/GitignoreTemplates.ts b/packages/core/src/resources/GitignoreTemplates.ts index f8f4a12a8..b27797c48 100644 --- a/packages/core/src/resources/GitignoreTemplates.ts +++ b/packages/core/src/resources/GitignoreTemplates.ts @@ -1,4 +1,4 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceTemplates } from '../templates'; export class GitignoreTemplates extends ResourceTemplates { diff --git a/packages/core/src/resources/Gitlab.ts b/packages/core/src/resources/Gitlab.ts index f63f6003e..c43307f12 100644 --- a/packages/core/src/resources/Gitlab.ts +++ b/packages/core/src/resources/Gitlab.ts @@ -1,311 +1,559 @@ -/* eslint-disable max-classes-per-file */ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { BaseResource } from '@gitbeaker/requester-utils'; -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { Groups } from './Groups'; -import { GroupAccessRequests } from './GroupAccessRequests'; -import { GroupBadges } from './GroupBadges'; -import { GroupCustomAttributes } from './GroupCustomAttributes'; -import { GroupIssueBoards } from './GroupIssueBoards'; -import { GroupMembers } from './GroupMembers'; -import { GroupMilestones } from './GroupMilestones'; -import { GroupRunners } from './GroupRunners'; -import { GroupVariables } from './GroupVariables'; -import { GroupLabels } from './GroupLabels'; -import { GroupDeployTokens } from './GroupDeployTokens'; -import { Epics } from './Epics'; -import { EpicIssues } from './EpicIssues'; -import { EpicNotes } from './EpicNotes'; -import { EpicDiscussions } from './EpicDiscussions'; -import { Users } from './Users'; -import { UserCustomAttributes } from './UserCustomAttributes'; -import { UserEmails } from './UserEmails'; -import { UserImpersonationTokens } from './UserImpersonationTokens'; -import { UserSSHKeys } from './UserSSHKeys'; -import { UserGPGKeys } from './UserGPGKeys'; +// General +import { Agents } from './Agents'; +import { AlertManagement } from './AlertManagement'; +import { ApplicationAppearance } from './ApplicationAppearance'; +import { ApplicationPlanLimits } from './ApplicationPlanLimits'; +import { Applications } from './Applications'; +import { ApplicationSettings } from './ApplicationSettings'; +import { ApplicationStatistics } from './ApplicationStatistics'; +import { AuditEvents } from './AuditEvents'; +import { Avatar } from './Avatar'; +import { BroadcastMessages } from './BroadcastMessages'; +import { Composer } from './Composer'; +import { Conan } from './Conan'; +import { DashboardAnnotations } from './DashboardAnnotations'; +import { Debian } from './Debian'; +import { DependencyProxy } from './DependencyProxy'; +import { DeployKeys } from './DeployKeys'; +import { DeployTokens } from './DeployTokens'; +import { DockerfileTemplates } from './DockerfileTemplates'; +import { Events } from './Events'; +import { Experiments } from './Experiments'; +import { GeoNodes } from './GeoNodes'; +import { GitignoreTemplates } from './GitignoreTemplates'; +import { GitLabCIYMLTemplates } from './GitLabCIYMLTemplates'; +import { Import } from './Import'; +import { InstanceLevelCICDVariables } from './InstanceLevelCICDVariables'; +import { Keys } from './Keys'; +import { License } from './License'; +import { LicenseTemplates } from './LicenseTemplates'; +import { Lint } from './Lint'; +import { Markdown } from './Markdown'; +import { Maven } from './Maven'; +import { Metadata } from './Metadata'; +import { Migrations } from './Migrations'; +import { Namespaces } from './Namespaces'; +import { NotificationSettings } from './NotificationSettings'; +import { NPM } from './NPM'; +import { NuGet } from './NuGet'; +import { PersonalAccessTokens } from './PersonalAccessTokens'; +import { PyPI } from './PyPI'; +import { RubyGems } from './RubyGems'; +import { Search } from './Search'; +import { ServiceData } from './ServiceData'; +import { SidekiqMetrics } from './SidekiqMetrics'; +import { SidekiqQueues } from './SidekiqQueues'; +import { SnippetRepositoryStorageMoves } from './SnippetRepositoryStorageMoves'; +import { Snippets } from './Snippets'; +import { Suggestions } from './Suggestions'; +import { SystemHooks } from './SystemHooks'; +import { TodoLists } from './TodoLists'; +import { Topics } from './Topics'; import { Branches } from './Branches'; -import { Commits } from './Commits'; import { CommitDiscussions } from './CommitDiscussions'; +import { Commits } from './Commits'; import { ContainerRegistry } from './ContainerRegistry'; import { Deployments } from './Deployments'; -import { DeployKeys } from './DeployKeys'; import { Environments } from './Environments'; +import { ErrorTrackingClientKeys } from './ErrorTrackingClientKeys'; +import { ErrorTrackingSettings } from './ErrorTrackingSettings'; +import { ExternalStatusChecks } from './ExternalStatusChecks'; +import { FeatureFlags } from './FeatureFlags'; +import { FeatureFlagUserLists } from './FeatureFlagUserLists'; import { FreezePeriods } from './FreezePeriods'; +import { GitlabPages } from './GitlabPages'; +import { GoProxy } from './GoProxy'; +import { Helm } from './Helm'; +import { Integrations } from './Integrations'; +import { IssueAwardEmojis } from './IssueAwardEmojis'; +import { IssueDiscussions } from './IssueDiscussions'; +import { IssueIterationEvents } from './IssueIterationEvents'; +import { IssueLabelEvents } from './IssueLabelEvents'; +import { IssueLinks } from './IssueLinks'; +import { IssueMilestoneEvents } from './IssueMilestoneEvents'; +import { IssueNoteAwardEmojis } from './IssueNoteAwardEmojis'; +import { IssueNotes } from './IssueNotes'; import { Issues } from './Issues'; import { IssuesStatistics } from './IssuesStatistics'; -import { IssueNotes } from './IssueNotes'; -import { IssueNoteAwardEmojis } from './IssueNoteAwardEmojis'; -import { IssueDiscussions } from './IssueDiscussions'; -import { IssueAwardEmojis } from './IssueAwardEmojis'; +import { IssueStateEvents } from './IssueStateEvents'; +import { IssueWeightEvents } from './IssueWeightEvents'; +import { JobArtifacts } from './JobArtifacts'; import { Jobs } from './Jobs'; -import { Labels } from './Labels'; -import { MergeRequests } from './MergeRequests'; import { MergeRequestApprovals } from './MergeRequestApprovals'; import { MergeRequestAwardEmojis } from './MergeRequestAwardEmojis'; +import { MergeRequestContextCommits } from './MergeRequestContextCommits'; import { MergeRequestDiscussions } from './MergeRequestDiscussions'; +import { MergeRequestLabelEvents } from './MergeRequestLabelEvents'; +import { MergeRequestMilestoneEvents } from './MergeRequestMilestoneEvents'; import { MergeRequestNotes } from './MergeRequestNotes'; -import { Packages } from './Packages'; +import { MergeRequestDraftNotes } from './MergeRequestDraftNotes'; +import { MergeRequests } from './MergeRequests'; +import { MergeTrains } from './MergeTrains'; import { PackageRegistry } from './PackageRegistry'; +import { Packages } from './Packages'; +import { PagesDomains } from './PagesDomains'; import { Pipelines } from './Pipelines'; import { PipelineSchedules } from './PipelineSchedules'; import { PipelineScheduleVariables } from './PipelineScheduleVariables'; -import { Projects } from './Projects'; +import { PipelineTriggerTokens } from './PipelineTriggerTokens'; +import { ProductAnalytics } from './ProductAnalytics'; import { ProjectAccessRequests } from './ProjectAccessRequests'; +import { ProjectAccessTokens } from './ProjectAccessTokens'; +import { ProjectAliases } from './ProjectAliases'; import { ProjectBadges } from './ProjectBadges'; import { ProjectCustomAttributes } from './ProjectCustomAttributes'; +import { ProjectDORA4Metrics } from './ProjectDORA4Metrics'; +import { ProjectHooks } from './ProjectHooks'; import { ProjectImportExport } from './ProjectImportExport'; +import { ProjectInvitations } from './ProjectInvitations'; import { ProjectIssueBoards } from './ProjectIssueBoards'; -import { ProjectHooks } from './ProjectHooks'; +import { ProjectIterations } from './ProjectIterations'; +import { ProjectLabels } from './ProjectLabels'; import { ProjectMembers } from './ProjectMembers'; import { ProjectMilestones } from './ProjectMilestones'; -import { ProjectSnippets } from './ProjectSnippets'; -import { ProjectSnippetNotes } from './ProjectSnippetNotes'; -import { ProjectSnippetDiscussions } from './ProjectSnippetDiscussions'; +import { ProjectProtectedEnvironments } from './ProjectProtectedEnvironments'; +import { ProjectPushRules } from './ProjectPushRules'; +import { ProjectRelationsExport } from './ProjectRelationsExport'; +import { ProjectReleases } from './ProjectReleases'; +import { ProjectRemoteMirrors } from './ProjectRemoteMirrors'; +import { ProjectRepositoryStorageMoves } from './ProjectRepositoryStorageMoves'; +import { Projects } from './Projects'; import { ProjectSnippetAwardEmojis } from './ProjectSnippetAwardEmojis'; +import { ProjectSnippetDiscussions } from './ProjectSnippetDiscussions'; +import { ProjectSnippetNotes } from './ProjectSnippetNotes'; +import { ProjectSnippets } from './ProjectSnippets'; +import { ProjectStatistics } from './ProjectStatistics'; +import { ProjectTemplates } from './ProjectTemplates'; +import { ProjectVariables } from './ProjectVariables'; +import { ProjectVulnerabilities } from './ProjectVulnerabilities'; +import { ProjectWikis } from './ProjectWikis'; import { ProtectedBranches } from './ProtectedBranches'; import { ProtectedTags } from './ProtectedTags'; -import { ProjectVariables } from './ProjectVariables'; -import { ProjectDeployTokens } from './ProjectDeployTokens'; -import { PushRules } from './PushRules'; -import { Releases } from './Releases'; import { ReleaseLinks } from './ReleaseLinks'; import { Repositories } from './Repositories'; import { RepositoryFiles } from './RepositoryFiles'; import { RepositorySubmodules } from './RepositorySubmodules'; +import { ResourceGroups } from './ResourceGroups'; import { Runners } from './Runners'; -import { Services } from './Services'; +import { SecureFiles } from './SecureFiles'; import { Tags } from './Tags'; -import { Todos } from './Todos'; -import { Triggers } from './Triggers'; -import { VulnerabilityFindings } from './VulnerabilityFindings'; -import { ApplicationSettings } from './ApplicationSettings'; -import { BroadcastMessages } from './BroadcastMessages'; -import { Events } from './Events'; -import { FeatureFlags } from './FeatureFlags'; -import { GeoNodes } from './GeoNodes'; -import { GitignoreTemplates } from './GitignoreTemplates'; -import { GitLabCIYMLTemplates } from './GitLabCIYMLTemplates'; -import { Keys } from './Keys'; -import { License } from './License'; -import { LicenseTemplates } from './LicenseTemplates'; -import { Lint } from './Lint'; -import { Namespaces } from './Namespaces'; -import { NotificationSettings } from './NotificationSettings'; -import { Markdown } from './Markdown'; -import { PagesDomains } from './PagesDomains'; -import { Search } from './Search'; -import { SidekiqMetrics } from './SidekiqMetrics'; -import { Snippets } from './Snippets'; -import { SystemHooks } from './SystemHooks'; -import { Version } from './Version'; -import { Wikis } from './Wikis'; +import { UserStarredMetricsDashboard } from './UserStarredMetricsDashboard'; +import { EpicAwardEmojis } from './EpicAwardEmojis'; +import { EpicDiscussions } from './EpicDiscussions'; +import { EpicIssues } from './EpicIssues'; +import { EpicLabelEvents } from './EpicLabelEvents'; +import { EpicLinks } from './EpicLinks'; +import { EpicNotes } from './EpicNotes'; +import { Epics } from './Epics'; +import { GroupAccessRequests } from './GroupAccessRequests'; +import { GroupAccessTokens } from './GroupAccessTokens'; +import { GroupActivityAnalytics } from './GroupActivityAnalytics'; +import { GroupBadges } from './GroupBadges'; +import { GroupCustomAttributes } from './GroupCustomAttributes'; +import { GroupDORA4Metrics } from './GroupDORA4Metrics'; +import { GroupHooks } from './GroupHooks'; +import { GroupImportExports } from './GroupImportExports'; +import { GroupInvitations } from './GroupInvitations'; +import { GroupIssueBoards } from './GroupIssueBoards'; +import { GroupIterations } from './GroupIterations'; +import { GroupLabels } from './GroupLabels'; +import { GroupLDAPLinks } from './GroupLDAPLinks'; +import { GroupMembers } from './GroupMembers'; +import { GroupMemberRoles } from './GroupMemberRoles'; +import { GroupMilestones } from './GroupMilestones'; +import { GroupProtectedEnvironments } from './GroupProtectedEnvironments'; +import { GroupPushRules } from './GroupPushRules'; +import { GroupRelationExports } from './GroupRelationExports'; +import { GroupReleases } from './GroupReleases'; +import { GroupRepositoryStorageMoves } from './GroupRepositoryStorageMoves'; +import { Groups } from './Groups'; +import { GroupSAMLIdentities } from './GroupSAMLIdentities'; +import { GroupSCIMIdentities } from './GroupSCIMIdentities'; +import { GroupVariables } from './GroupVariables'; +import { GroupWikis } from './GroupWikis'; +import { LinkedEpics } from './LinkedEpics'; +import { UserCustomAttributes } from './UserCustomAttributes'; +import { UserEmails } from './UserEmails'; +import { UserGPGKeys } from './UserGPGKeys'; +import { UserImpersonationTokens } from './UserImpersonationTokens'; +import { Users } from './Users'; +import { UserSSHKeys } from './UserSSHKeys'; // Figure out a better way of doing this using mapped types: https://stackoverflow.com/questions/67729408/how-to-create-mapped-type-using-generic-class-instances-in-typesscript?noredirect=1#comment119718863_67729408 // This will most likely be accomplished using higher kinded types: https://github.com/Microsoft/TypeScript/issues/1213#issuecomment-750930496 -type BundledService = { - Groups: Groups; - GroupAccessRequests: GroupAccessRequests; - GroupBadges: GroupBadges; - GroupCustomAttributes: GroupCustomAttributes; - GroupIssueBoards: GroupIssueBoards; - GroupMembers: GroupMembers; - GroupMilestones: GroupMilestones; - GroupRunners: GroupRunners; - GroupVariables: GroupVariables; - GroupLabels: GroupLabels; - GroupDeployTokens: GroupDeployTokens; - Epics: Epics; - EpicIssues: EpicIssues; - EpicNotes: EpicNotes; - EpicDiscussions: EpicDiscussions; - Users: Users; - UserCustomAttributes: UserCustomAttributes; - UserEmails: UserEmails; - UserImpersonationTokens: UserImpersonationTokens; - UserSSHKeys: UserSSHKeys; - UserGPGKeys: UserGPGKeys; +export interface Gitlab extends BaseResource { + Agents: Agents; + AlertManagement: AlertManagement; + ApplicationAppearance: ApplicationAppearance; + ApplicationPlanLimits: ApplicationPlanLimits; + Applications: Applications; + ApplicationSettings: ApplicationSettings; + ApplicationStatistics: ApplicationStatistics; + AuditEvents: AuditEvents; + Avatar: Avatar; + BroadcastMessages: BroadcastMessages; + Composer: Composer; + Conan: Conan; + DashboardAnnotations: DashboardAnnotations; + Debian: Debian; + DependencyProxy: DependencyProxy; + DeployKeys: DeployKeys; + DeployTokens: DeployTokens; + DockerfileTemplates: DockerfileTemplates; + Events: Events; + Experiments: Experiments; + GeoNodes: GeoNodes; + GitignoreTemplates: GitignoreTemplates; + GitLabCIYMLTemplates: GitLabCIYMLTemplates; + Import: Import; + InstanceLevelCICDVariables: InstanceLevelCICDVariables; + Keys: Keys; + License: License; + LicenseTemplates: LicenseTemplates; + Lint: Lint; + Markdown: Markdown; + Maven: Maven; + Metadata: Metadata; + Migrations: Migrations; + Namespaces: Namespaces; + NotificationSettings: NotificationSettings; + NPM: NPM; + NuGet: NuGet; + PersonalAccessTokens: PersonalAccessTokens; + PyPI: PyPI; + RubyGems: RubyGems; + Search: Search; + ServiceData: ServiceData; + SidekiqMetrics: SidekiqMetrics; + SidekiqQueues: SidekiqQueues; + SnippetRepositoryStorageMoves: SnippetRepositoryStorageMoves; + Snippets: Snippets; + Suggestions: Suggestions; + SystemHooks: SystemHooks; + TodoLists: TodoLists; + Topics: Topics; Branches: Branches; - Commits: Commits; CommitDiscussions: CommitDiscussions; + Commits: Commits; ContainerRegistry: ContainerRegistry; Deployments: Deployments; - DeployKeys: DeployKeys; Environments: Environments; + ErrorTrackingClientKeys: ErrorTrackingClientKeys; + ErrorTrackingSettings: ErrorTrackingSettings; + ExternalStatusChecks: ExternalStatusChecks; + FeatureFlags: FeatureFlags; + FeatureFlagUserLists: FeatureFlagUserLists; FreezePeriods: FreezePeriods; + GitlabPages: GitlabPages; + GoProxy: GoProxy; + Helm: Helm; + Integrations: Integrations; + IssueAwardEmojis: IssueAwardEmojis; + IssueDiscussions: IssueDiscussions; + IssueIterationEvents: IssueIterationEvents; + IssueLabelEvents: IssueLabelEvents; + IssueLinks: IssueLinks; + IssueMilestoneEvents: IssueMilestoneEvents; + IssueNoteAwardEmojis: IssueNoteAwardEmojis; + IssueNotes: IssueNotes; Issues: Issues; IssuesStatistics: IssuesStatistics; - IssueNotes: IssueNotes; - IssueNoteAwardEmojis: IssueNoteAwardEmojis; - IssueDiscussions: IssueDiscussions; - IssueAwardEmojis: IssueAwardEmojis; + IssueStateEvents: IssueStateEvents; + IssueWeightEvents: IssueWeightEvents; + JobArtifacts: JobArtifacts; Jobs: Jobs; - Labels: Labels; - MergeRequests: MergeRequests; MergeRequestApprovals: MergeRequestApprovals; MergeRequestAwardEmojis: MergeRequestAwardEmojis; + MergeRequestContextCommits: MergeRequestContextCommits; MergeRequestDiscussions: MergeRequestDiscussions; + MergeRequestLabelEvents: MergeRequestLabelEvents; + MergeRequestMilestoneEvents: MergeRequestMilestoneEvents; + MergeRequestDraftNotes: MergeRequestDraftNotes; MergeRequestNotes: MergeRequestNotes; - Packages: Packages; + MergeRequests: MergeRequests; + MergeTrains: MergeTrains; PackageRegistry: PackageRegistry; + Packages: Packages; + PagesDomains: PagesDomains; Pipelines: Pipelines; PipelineSchedules: PipelineSchedules; PipelineScheduleVariables: PipelineScheduleVariables; - Projects: Projects; + PipelineTriggerTokens: PipelineTriggerTokens; + ProductAnalytics: ProductAnalytics; ProjectAccessRequests: ProjectAccessRequests; + ProjectAccessTokens: ProjectAccessTokens; + ProjectAliases: ProjectAliases; ProjectBadges: ProjectBadges; ProjectCustomAttributes: ProjectCustomAttributes; + ProjectDORA4Metrics: ProjectDORA4Metrics; + ProjectHooks: ProjectHooks; ProjectImportExport: ProjectImportExport; + ProjectInvitations: ProjectInvitations; ProjectIssueBoards: ProjectIssueBoards; - ProjectHooks: ProjectHooks; + ProjectIterations: ProjectIterations; + ProjectLabels: ProjectLabels; ProjectMembers: ProjectMembers; ProjectMilestones: ProjectMilestones; - ProjectSnippets: ProjectSnippets; - ProjectSnippetNotes: ProjectSnippetNotes; - ProjectSnippetDiscussions: ProjectSnippetDiscussions; + ProjectProtectedEnvironments: ProjectProtectedEnvironments; + ProjectPushRules: ProjectPushRules; + ProjectRelationsExport: ProjectRelationsExport; + ProjectReleases: ProjectReleases; + ProjectRemoteMirrors: ProjectRemoteMirrors; + ProjectRepositoryStorageMoves: ProjectRepositoryStorageMoves; + Projects: Projects; ProjectSnippetAwardEmojis: ProjectSnippetAwardEmojis; + ProjectSnippetDiscussions: ProjectSnippetDiscussions; + ProjectSnippetNotes: ProjectSnippetNotes; + ProjectSnippets: ProjectSnippets; + ProjectStatistics: ProjectStatistics; + ProjectTemplates: ProjectTemplates; + ProjectVariables: ProjectVariables; + ProjectVulnerabilities: ProjectVulnerabilities; + ProjectWikis: ProjectWikis; ProtectedBranches: ProtectedBranches; ProtectedTags: ProtectedTags; - ProjectVariables: ProjectVariables; - ProjectDeployTokens: ProjectDeployTokens; - PushRules: PushRules; - Releases: Releases; ReleaseLinks: ReleaseLinks; Repositories: Repositories; RepositoryFiles: RepositoryFiles; RepositorySubmodules: RepositorySubmodules; + ResourceGroups: ResourceGroups; Runners: Runners; - Services: Services; + SecureFiles: SecureFiles; Tags: Tags; - Todos: Todos; - Triggers: Triggers; - VulnerabilityFindings: VulnerabilityFindings; - ApplicationSettings: ApplicationSettings; - BroadcastMessages: BroadcastMessages; - Events: Events; - FeatureFlags: FeatureFlags; - GeoNodes: GeoNodes; - GitignoreTemplates: GitignoreTemplates; - GitLabCIYMLTemplates: GitLabCIYMLTemplates; - Keys: Keys; - License: License; - LicenseTemplates: LicenseTemplates; - Lint: Lint; - Namespaces: Namespaces; - NotificationSettings: NotificationSettings; - Markdown: Markdown; - PagesDomains: PagesDomains; - Search: Search; - SidekiqMetrics: SidekiqMetrics; - Snippets: Snippets; - SystemHooks: SystemHooks; - Version: Version; - Wikis: Wikis; -}; + UserStarredMetricsDashboard: UserStarredMetricsDashboard; + EpicAwardEmojis: EpicAwardEmojis; + EpicDiscussions: EpicDiscussions; + EpicIssues: EpicIssues; + EpicLabelEvents: EpicLabelEvents; + EpicLinks: EpicLinks; + EpicNotes: EpicNotes; + Epics: Epics; + GroupAccessRequests: GroupAccessRequests; + GroupAccessTokens: GroupAccessTokens; + GroupActivityAnalytics: GroupActivityAnalytics; + GroupBadges: GroupBadges; + GroupCustomAttributes: GroupCustomAttributes; + GroupDORA4Metrics: GroupDORA4Metrics; + GroupHooks: GroupHooks; + GroupImportExports: GroupImportExports; + GroupInvitations: GroupInvitations; + GroupIssueBoards: GroupIssueBoards; + GroupIterations: GroupIterations; + GroupLabels: GroupLabels; + GroupLDAPLinks: GroupLDAPLinks; + GroupMembers: GroupMembers; + GroupMemberRoles: GroupMemberRoles; + GroupMilestones: GroupMilestones; + GroupProtectedEnvironments: GroupProtectedEnvironments; + GroupPushRules: GroupPushRules; + GroupRelationExports: GroupRelationExports; + GroupReleases: GroupReleases; + GroupRepositoryStorageMoves: GroupRepositoryStorageMoves; + Groups: Groups; + GroupSAMLIdentities: GroupSAMLIdentities; + GroupSCIMIdentities: GroupSCIMIdentities; + GroupVariables: GroupVariables; + GroupWikis: GroupWikis; + LinkedEpics: LinkedEpics; + UserCustomAttributes: UserCustomAttributes; + UserEmails: UserEmails; + UserGPGKeys: UserGPGKeys; + UserImpersonationTokens: UserImpersonationTokens; + Users: Users; + UserSSHKeys: UserSSHKeys; +} const resources = { - Groups, - GroupAccessRequests, - GroupBadges, - GroupCustomAttributes, - GroupIssueBoards, - GroupMembers, - GroupMilestones, - GroupRunners, - GroupVariables, - GroupLabels, - GroupDeployTokens, - Epics, - EpicIssues, - EpicNotes, - EpicDiscussions, - Users, - UserCustomAttributes, - UserEmails, - UserImpersonationTokens, - UserSSHKeys, - UserGPGKeys, + Agents, + AlertManagement, + ApplicationAppearance, + ApplicationPlanLimits, + Applications, + ApplicationSettings, + ApplicationStatistics, + AuditEvents, + Avatar, + BroadcastMessages, + Composer, + Conan, + DashboardAnnotations, + Debian, + DependencyProxy, + DeployKeys, + DeployTokens, + DockerfileTemplates, + Events, + Experiments, + GeoNodes, + GitignoreTemplates, + GitLabCIYMLTemplates, + Import, + InstanceLevelCICDVariables, + Keys, + License, + LicenseTemplates, + Lint, + Markdown, + Maven, + Metadata, + Migrations, + Namespaces, + NotificationSettings, + NPM, + NuGet, + PersonalAccessTokens, + PyPI, + RubyGems, + Search, + ServiceData, + SidekiqMetrics, + SidekiqQueues, + SnippetRepositoryStorageMoves, + Snippets, + Suggestions, + SystemHooks, + TodoLists, + Topics, Branches, - Commits, CommitDiscussions, + Commits, ContainerRegistry, Deployments, - DeployKeys, Environments, + ErrorTrackingClientKeys, + ErrorTrackingSettings, + ExternalStatusChecks, + FeatureFlags, + FeatureFlagUserLists, FreezePeriods, + GitlabPages, + GoProxy, + Helm, + Integrations, + IssueAwardEmojis, + IssueDiscussions, + IssueIterationEvents, + IssueLabelEvents, + IssueLinks, + IssueMilestoneEvents, + IssueNoteAwardEmojis, + IssueNotes, Issues, IssuesStatistics, - IssueNotes, - IssueNoteAwardEmojis, - IssueDiscussions, - IssueAwardEmojis, + IssueStateEvents, + IssueWeightEvents, + JobArtifacts, Jobs, - Labels, - MergeRequests, MergeRequestApprovals, MergeRequestAwardEmojis, + MergeRequestContextCommits, MergeRequestDiscussions, + MergeRequestLabelEvents, + MergeRequestMilestoneEvents, + MergeRequestDraftNotes, MergeRequestNotes, - Packages, + MergeRequests, + MergeTrains, PackageRegistry, + Packages, + PagesDomains, Pipelines, PipelineSchedules, PipelineScheduleVariables, - Projects, + PipelineTriggerTokens, + ProductAnalytics, ProjectAccessRequests, + ProjectAccessTokens, + ProjectAliases, ProjectBadges, ProjectCustomAttributes, + ProjectDORA4Metrics, + ProjectHooks, ProjectImportExport, + ProjectInvitations, ProjectIssueBoards, - ProjectHooks, + ProjectIterations, + ProjectLabels, ProjectMembers, ProjectMilestones, - ProjectSnippets, - ProjectSnippetNotes, - ProjectSnippetDiscussions, + ProjectProtectedEnvironments, + ProjectPushRules, + ProjectRelationsExport, + ProjectReleases, + ProjectRemoteMirrors, + ProjectRepositoryStorageMoves, + Projects, ProjectSnippetAwardEmojis, + ProjectSnippetDiscussions, + ProjectSnippetNotes, + ProjectSnippets, + ProjectStatistics, + ProjectTemplates, + ProjectVariables, + ProjectVulnerabilities, + ProjectWikis, ProtectedBranches, ProtectedTags, - ProjectVariables, - ProjectDeployTokens, - PushRules, - Releases, ReleaseLinks, Repositories, RepositoryFiles, RepositorySubmodules, + ResourceGroups, Runners, - Services, + SecureFiles, Tags, - Todos, - Triggers, - VulnerabilityFindings, - ApplicationSettings, - BroadcastMessages, - Events, - FeatureFlags, - GeoNodes, - GitignoreTemplates, - GitLabCIYMLTemplates, - Keys, - License, - LicenseTemplates, - Lint, - Namespaces, - NotificationSettings, - Markdown, - PagesDomains, - Search, - SidekiqMetrics, - Snippets, - SystemHooks, - Version, - Wikis, + UserStarredMetricsDashboard, + EpicAwardEmojis, + EpicDiscussions, + EpicIssues, + EpicLabelEvents, + EpicLinks, + EpicNotes, + Epics, + GroupAccessRequests, + GroupAccessTokens, + GroupActivityAnalytics, + GroupBadges, + GroupCustomAttributes, + GroupDORA4Metrics, + GroupHooks, + GroupImportExports, + GroupInvitations, + GroupIssueBoards, + GroupIterations, + GroupLabels, + GroupLDAPLinks, + GroupMembers, + GroupMemberRoles, + GroupMilestones, + GroupProtectedEnvironments, + GroupPushRules, + GroupRelationExports, + GroupReleases, + GroupRepositoryStorageMoves, + Groups, + GroupSAMLIdentities, + GroupSCIMIdentities, + GroupVariables, + GroupWikis, + LinkedEpics, + UserCustomAttributes, + UserEmails, + UserGPGKeys, + UserImpersonationTokens, + Users, + UserSSHKeys, }; -export class Gitlab extends (class {} as new () => BundledService) { +export class Gitlab extends BaseResource { constructor(options: BaseResourceOptions) { - super(); + super(options); + // Attach the sub-resources to this wrapper Object.keys(resources).forEach((s) => { this[s] = new resources[s](options); }); diff --git a/packages/core/src/resources/GitlabPages.ts b/packages/core/src/resources/GitlabPages.ts new file mode 100644 index 000000000..cf89cf5e8 --- /dev/null +++ b/packages/core/src/resources/GitlabPages.ts @@ -0,0 +1,12 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export class GitlabPages extends BaseResource { + remove( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`projects/${projectId}/pages`, options); + } +} diff --git a/packages/core/src/resources/GoProxy.ts b/packages/core/src/resources/GoProxy.ts new file mode 100644 index 000000000..5bfe02db1 --- /dev/null +++ b/packages/core/src/resources/GoProxy.ts @@ -0,0 +1,61 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded } from '../infrastructure'; + +export interface GoProxyModuleVersionSchema extends Record { + Version: string; + Time: string; +} + +export class GoProxy extends BaseResource { + all( + projectId: string | number, + moduleName: string, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/packages/go/${moduleName}/@v/list`, + options, + ); + } + + showVersionMetadata( + projectId: string | number, + moduleName: string, + moduleVersion: string, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/packages/go/${moduleName}/@v/${moduleVersion}.info`, + options, + ); + } + + downloadModuleFile( + projectId: string | number, + moduleName: string, + moduleVersion: string, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/packages/go/${moduleName}/@v/${moduleVersion}.mod`, + options, + ); + } + + downloadModuleSource( + projectId: string | number, + moduleName: string, + moduleVersion: string, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/packages/go/${moduleName}/@v/${moduleVersion}.zip`, + options, + ); + } +} diff --git a/packages/core/src/resources/GroupAccessRequests.ts b/packages/core/src/resources/GroupAccessRequests.ts index 890013a4a..93273ccc7 100644 --- a/packages/core/src/resources/GroupAccessRequests.ts +++ b/packages/core/src/resources/GroupAccessRequests.ts @@ -1,20 +1,35 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceAccessRequests } from '../templates'; -import { AccessRequestSchema, AccessLevel } from '../templates/types'; -import { Sudo, CamelizedRecord } from '../infrastructure'; +import type { AccessLevel, AccessRequestSchema } from '../templates/ResourceAccessRequests'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface GroupAccessRequests extends ResourceAccessRequests { - all(groupId: string | number): Promise[]>; + all( + groupId: string | number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - request(groupId: string | number): Promise>; + request( + groupId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; - approve( + approve( groupId: string | number, userId: number, - options?: { accessLevel?: AccessLevel } & Sudo, - ): Promise>; + options?: { accessLevel?: AccessLevel } & Sudo & ShowExpanded, + ): Promise>; - deny(groupId: string | number, userId: number): Promise; + deny( + groupId: string | number, + userId: number, + ): Promise>; } export class GroupAccessRequests extends ResourceAccessRequests { diff --git a/packages/core/src/resources/GroupAccessTokens.ts b/packages/core/src/resources/GroupAccessTokens.ts new file mode 100644 index 000000000..0eb5fc22e --- /dev/null +++ b/packages/core/src/resources/GroupAccessTokens.ts @@ -0,0 +1,44 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceAccessTokens } from '../templates'; +import type { AccessTokenSchema, AccessTokenScopes } from '../templates/ResourceAccessTokens'; +import type { AccessLevel } from '../templates/ResourceAccessRequests'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface GroupAccessTokens extends ResourceAccessTokens { + all( + groupId: string | number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; + + create( + groupId: string | number, + name: string, + scopes: AccessTokenScopes[], + options?: { accessLevel?: AccessLevel; expiresAt?: string } & Sudo & ShowExpanded, + ): Promise>; + + revoke( + groupId: string | number, + tokenId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; + + show( + groupId: string | number, + tokenId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class GroupAccessTokens extends ResourceAccessTokens { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', options); + } +} diff --git a/packages/core/src/resources/GroupActivityAnalytics.ts b/packages/core/src/resources/GroupActivityAnalytics.ts new file mode 100644 index 000000000..4d054a3a9 --- /dev/null +++ b/packages/core/src/resources/GroupActivityAnalytics.ts @@ -0,0 +1,65 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface GroupAnalyticsIssuesCountSchema extends Record { + issues_count: number; +} + +export interface GroupAnalyticsMRsCountSchema extends Record { + merge_requests_count: number; +} + +export interface GroupAnalyticsNewMembersCountSchema extends Record { + new_members_count: number; +} + +export class GroupActivityAnalytics extends BaseResource { + showIssuesCount( + groupPath: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + 'analytics/group_activity/issues_count', + { + searchParams: { + groupPath, + }, + ...options, + }, + ); + } + + showMergeRequestsCount( + groupPath: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + 'analytics/group_activity/merge_requests_count', + { + searchParams: { + groupPath, + }, + ...options, + }, + ); + } + + showNewMembersCount( + groupPath: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + 'analytics/group_activity/new_members_count', + { + searchParams: { + groupPath, + }, + ...options, + }, + ); + } +} diff --git a/packages/core/src/resources/GroupBadges.ts b/packages/core/src/resources/GroupBadges.ts index ab0ff88a0..c479de876 100644 --- a/packages/core/src/resources/GroupBadges.ts +++ b/packages/core/src/resources/GroupBadges.ts @@ -1,11 +1,16 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceBadges } from '../templates'; -import { BadgeSchema } from '../templates/types'; -import { - BaseRequestOptions, - PaginatedRequestOptions, +import type { + BadgeSchema, + CondensedBadgeSchema, + EditBadgeOptions, +} from '../templates/ResourceBadges'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - CamelizedRecord, } from '../infrastructure'; export interface GroupBadgeSchema extends BadgeSchema { @@ -13,36 +18,42 @@ export interface GroupBadgeSchema extends BadgeSchema { } export interface GroupBadges extends ResourceBadges { - add( + add( groupId: string | number, - options?: BaseRequestOptions, - ): Promise>; + linkUrl: string, + imageUrl: string, + options?: { name?: string } & Sudo & ShowExpanded, + ): Promise>; - all( + all( groupId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: { name?: string } & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - edit( + edit( groupId: string | number, badgeId: number, - options?: BaseRequestOptions, - ): Promise>; + options?: EditBadgeOptions & Sudo & ShowExpanded, + ): Promise>; - preview( + preview( groupId: string | number, linkUrl: string, imageUrl: string, - options?: Sudo, - ): Promise>>; + options?: Sudo & ShowExpanded, + ): Promise>; - remove(groupId: string | number, badgeId: number, options?: Sudo): Promise; + remove( + groupId: string | number, + badgeId: number, + options?: Sudo & ShowExpanded, + ): Promise>; - show( + show( groupId: string | number, badgeId: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; } export class GroupBadges extends ResourceBadges { diff --git a/packages/core/src/resources/GroupCustomAttributes.ts b/packages/core/src/resources/GroupCustomAttributes.ts index bdec29562..981ec2f05 100644 --- a/packages/core/src/resources/GroupCustomAttributes.ts +++ b/packages/core/src/resources/GroupCustomAttributes.ts @@ -1,29 +1,39 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceCustomAttributes } from '../templates'; -import { CustomAttributeSchema } from '../templates/types'; -import { PaginatedRequestOptions, Sudo, CamelizedRecord } from '../infrastructure'; +import type { CustomAttributeSchema } from '../templates/ResourceCustomAttributes'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface GroupCustomAttributes extends ResourceCustomAttributes { - all( + all( groupId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - set( + set( groupId: string | number, - customAttributeId: number, + customAttributeId: string, value: string, - options?: Sudo, - ): Promise>; - - remove(groupId: string | number, customAttributeId: number, options?: Sudo): Promise; + options?: Sudo & ShowExpanded, + ): Promise>; - show( + remove( groupId: string | number, - customAttributeId: number, + customAttributeId: string, options?: Sudo, - ): Promise>; + ): Promise>; + + show( + groupId: string | number, + customAttributeId: string, + options?: Sudo & ShowExpanded, + ): Promise>; } export class GroupCustomAttributes extends ResourceCustomAttributes { diff --git a/packages/core/src/resources/GroupDORA4Metrics.ts b/packages/core/src/resources/GroupDORA4Metrics.ts new file mode 100644 index 000000000..d837a4304 --- /dev/null +++ b/packages/core/src/resources/GroupDORA4Metrics.ts @@ -0,0 +1,9 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceDORA4Metrics } from '../templates'; + +export class GroupDORA4Metrics extends ResourceDORA4Metrics { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('groups', options); + } +} diff --git a/packages/core/src/resources/GroupDeployTokens.ts b/packages/core/src/resources/GroupDeployTokens.ts deleted file mode 100644 index 9c625b63f..000000000 --- a/packages/core/src/resources/GroupDeployTokens.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { ResourceDeployTokens } from '../templates'; -import { DeployTokenScope, DeployTokenSchema } from '../templates/types'; -import { - BaseRequestOptions, - PaginatedRequestOptions, - CamelizedRecord, - Sudo, -} from '../infrastructure'; - -export interface GroupDeployTokens extends ResourceDeployTokens { - add( - groupId: string | number, - tokenName: string, - tokenScopes: DeployTokenScope[], - options?: BaseRequestOptions, - ): Promise>; - - all( - options?: { groupId?: string | number } & PaginatedRequestOptions, - ): Promise[]>; - - remove(groupId: string | number, tokenId: number, options?: Sudo): Promise; -} - -export class GroupDeployTokens extends ResourceDeployTokens { - constructor(options: BaseResourceOptions) { - /* istanbul ignore next */ - super('groups', options); - } -} diff --git a/packages/core/src/resources/GroupHooks.ts b/packages/core/src/resources/GroupHooks.ts new file mode 100644 index 000000000..d96ccb941 --- /dev/null +++ b/packages/core/src/resources/GroupHooks.ts @@ -0,0 +1,58 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceHooks } from '../templates'; +import type { + AddResourceHookOptions, + EditResourceHookOptions, + ExpandedHookSchema, +} from '../templates/ResourceHooks'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface GroupHookSchema extends ExpandedHookSchema { + groupId: number; + subgroup_events: boolean; +} + +export interface GroupHooks { + add( + groupId: string | number, + url: string, + options?: AddResourceHookOptions & Sudo & ShowExpanded, + ): Promise>; + + all( + groupId: string | number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; + + edit( + groupId: string | number, + hookId: number, + url: string, + options?: EditResourceHookOptions & Sudo & ShowExpanded, + ): Promise>; + + remove( + groupId: string | number, + hookId: number, + options?: Sudo & ShowExpanded, + ): Promise>; + + show( + groupId: string | number, + hookId: number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class GroupHooks extends ResourceHooks { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('groups', options); + } +} diff --git a/packages/core/src/resources/GroupImportExports.ts b/packages/core/src/resources/GroupImportExports.ts new file mode 100644 index 000000000..e7d1638e2 --- /dev/null +++ b/packages/core/src/resources/GroupImportExports.ts @@ -0,0 +1,40 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { BaseRequestOptions, GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export class GroupImportExports extends BaseResource { + download( + groupId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, endpoint`groups/${groupId}/export/download`, options); + } + + // TODO: What does this return? + import( + file: { content: Blob; filename: string }, + name: string, + path: string, + { parentId, ...options }: { parentId?: number } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, 'groups/import', { + isForm: true, + ...options, + file: [file.content, file.filename], + path, + name, + parentId, + }); + } + + scheduleExport( + groupId: string | number, + options?: BaseRequestOptions, + ): Promise> { + return RequestHelper.post<{ message: string }>()( + this, + endpoint`groups/${groupId}/export`, + options, + ); + } +} diff --git a/packages/core/src/resources/GroupInvitations.ts b/packages/core/src/resources/GroupInvitations.ts new file mode 100644 index 000000000..035d39b5c --- /dev/null +++ b/packages/core/src/resources/GroupInvitations.ts @@ -0,0 +1,50 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceInvitations } from '../templates'; +import type { InvitationSchema } from '../templates/ResourceInvitations'; +import type { AccessLevel } from '../templates/ResourceAccessRequests'; +import type { + Either, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface GroupInvitations { + add( + groupId: string | number, + accessLevel: AccessLevel, + options: Either<{ email: string }, { userId: string }> & { + expiresAt?: string; + inviteSource?: string; + tasksToBeDone?: string[]; + tasksProjectId?: number; + } & Sudo & + ShowExpanded, + ): Promise>; + + all( + groupId: string | number, + options?: PaginationRequestOptions

& { query?: string } & Sudo & ShowExpanded, + ): Promise>; + + edit( + groupId: string | number, + email: string, + options?: { expiresAt?: string; accessLevel?: AccessLevel } & Sudo & ShowExpanded, + ): Promise>; + + remove( + groupId: string | number, + email: string, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class GroupInvitations extends ResourceInvitations { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('groups', options); + } +} diff --git a/packages/core/src/resources/GroupIssueBoards.ts b/packages/core/src/resources/GroupIssueBoards.ts index 5ee5cc8cc..ff54a4a50 100644 --- a/packages/core/src/resources/GroupIssueBoards.ts +++ b/packages/core/src/resources/GroupIssueBoards.ts @@ -1,78 +1,91 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { GroupSchema } from './Groups'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceIssueBoards } from '../templates'; -import { IssueBoardSchema, IssueBoardListSchema } from '../templates/types'; -import { - BaseRequestOptions, - PaginatedRequestOptions, +import { IssueBoardListSchema, IssueBoardSchema } from '../templates/ResourceIssueBoards'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - CamelizedRecord, } from '../infrastructure'; +import type { CondensedGroupSchema } from './Groups'; -export interface GroupIssueBoardSchema extends IssueBoardSchema { - group: Pick; +export interface GrouptIssueBoardSchema extends IssueBoardSchema { + group: CondensedGroupSchema; } export interface GroupIssueBoards extends ResourceIssueBoards { - all( + all( groupId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - create( + allLists( + resourceId: string | number, + boardId: number, + options?: Sudo & ShowExpanded, + ): Promise>; + + create( groupId: string | number, name: string, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; - createList( + createList( groupId: string | number, boardId: number, - labelId: number | string, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; - edit( + edit( groupId: string | number, boardId: number, - options?: BaseRequestOptions, - ): Promise>; + options?: { + hideBacklogList?: boolean; + hideClosedList?: boolean; + name?: string; + assigneeId?: number; + milestoneId?: number; + labels?: string; + weight?: number; + } & Sudo & + ShowExpanded, + ): Promise>; - editList( + editList( groupId: string | number, boardId: number, listId: number, position: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; - lists( + remove( groupId: string | number, boardId: number, - options?: Sudo, - ): Promise[]>; - - remove(groupId: string | number, boardId: number, options?: Sudo): Promise; + options?: Sudo & ShowExpanded, + ): Promise>; - removeList( + removeList( groupId: string | number, boardId: number, listId: number, - options?: Sudo, - ): Promise; + options?: Sudo & ShowExpanded, + ): Promise>; - show( + show( groupId: string | number, boardId: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; - showList( + showList( groupId: string | number, boardId: number, listId: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; } export class GroupIssueBoards extends ResourceIssueBoards { diff --git a/packages/core/src/resources/GroupIterations.ts b/packages/core/src/resources/GroupIterations.ts new file mode 100644 index 000000000..9b49710af --- /dev/null +++ b/packages/core/src/resources/GroupIterations.ts @@ -0,0 +1,24 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceIterations } from '../templates'; +import type { AllIterationsOptions, IterationSchema } from '../templates/ResourceIterations'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface GroupIterations { + all( + groupId: string | number, + options?: AllIterationsOptions & Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; +} + +export class GroupIterations extends ResourceIterations { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('groups', options); + } +} diff --git a/packages/core/src/resources/GroupLDAPLinks.ts b/packages/core/src/resources/GroupLDAPLinks.ts new file mode 100644 index 000000000..12e497770 --- /dev/null +++ b/packages/core/src/resources/GroupLDAPLinks.ts @@ -0,0 +1,52 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { AccessLevel } from '../templates/ResourceAccessRequests'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +// Documentation: https://docs.gitlab.com/ee/api/groups.html#ldap-group-links +export class GroupLDAPLinks extends BaseResource { + add( + groupId: string | number, + groupAccess: number, + provider: string, + options?: { cn?: string; groupAccess?: AccessLevel } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`groups/${groupId}/ldap_group_links`, { + groupAccess, + provider, + ...options, + }); + } + + all( + groupId: string | number, + options: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`groups/${groupId}/ldap_group_links`, + options, + ); + } + + remove( + groupId: string | number, + provider: string, + options?: { cn?: string; filter?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`groups/${groupId}/ldap_group_links`, { + provider, + ...options, + }); + } + + sync(groupId: string | number, options?: Sudo & ShowExpanded) { + return RequestHelper.post()(this, endpoint`groups/${groupId}/ldap_sync`, options); + } +} diff --git a/packages/core/src/resources/GroupLabels.ts b/packages/core/src/resources/GroupLabels.ts index 556d7539a..0bfee635d 100644 --- a/packages/core/src/resources/GroupLabels.ts +++ b/packages/core/src/resources/GroupLabels.ts @@ -1,45 +1,73 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - PaginatedRequestOptions, - CamelizedRecord, +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceLabels } from '../templates'; +import type { LabelSchema } from '../templates/ResourceLabels'; +import type { + Either, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; -import { ResourceLabels } from '../templates'; -import { LabelSchema } from '../templates/types'; export interface GroupLabels extends ResourceLabels { - all( + all( groupId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: { + withCounts?: boolean; + includeAncestorGroups?: boolean; + search?: string; + } & PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise>; - create( + create( groupId: string | number, labelName: string, color: string, - options?: BaseRequestOptions, - ): Promise>; + options?: { description?: string; priority?: number } & Sudo & ShowExpanded, + ): Promise>; + + edit( + groupId: string | number, + labelId: number | string, + options: Either<{ newName: string }, { color: string }> & { + description?: string; + priority?: number; + } & Sudo & + ShowExpanded, + ): Promise>; - edit( + promote( groupId: string | number, labelId: number | string, - options?: BaseRequestOptions, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; - remove(groupId: string | number, labelId: number | string, options?: Sudo): Promise; + remove( + groupId: string | number, + labelId: number | string, + options?: Sudo & ShowExpanded, + ): Promise>; + + show( + projectId: string | number, + labelId: number | string, + options?: { includeAncestorGroups?: boolean } & Sudo & ShowExpanded, + ): Promise>; - subscribe( + subscribe( groupId: string | number, labelId: number | string, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; - unsubscribe( + unsubscribe( groupId: string | number, labelId: number | string, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; } export class GroupLabels extends ResourceLabels { diff --git a/packages/core/src/resources/GroupMemberRoles.ts b/packages/core/src/resources/GroupMemberRoles.ts new file mode 100644 index 000000000..bed06b682 --- /dev/null +++ b/packages/core/src/resources/GroupMemberRoles.ts @@ -0,0 +1,53 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { AccessLevel } from '../templates/ResourceAccessRequests'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface MemberRoleSchema extends Record { + id: number; + group_id: number; + base_access_level: number; + read_code: boolean; +} + +export class GroupMemberRoles extends BaseResource { + add( + groupId: string | number, + baseAccessLevel: AccessLevel, + options?: { readCode?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`groups/${groupId}/members`, { + baseAccessLevel, + ...options, + }); + } + + all( + groupId: string | number, + options: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`groups/${groupId}/member_roles`, + options, + ); + } + + remove( + groupId: string | number, + memberRoleId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`groups/${groupId}/member_roles/${memberRoleId}`, + options, + ); + } +} diff --git a/packages/core/src/resources/GroupMembers.ts b/packages/core/src/resources/GroupMembers.ts index ef15c0998..f5c9575ed 100644 --- a/packages/core/src/resources/GroupMembers.ts +++ b/packages/core/src/resources/GroupMembers.ts @@ -1,40 +1,82 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceMembers } from '../templates'; -import { MemberSchema, AccessLevel, IncludeInherited } from '../templates/types'; -import { - BaseRequestOptions, - PaginatedRequestOptions, - CamelizedRecord, +import type { AccessLevel } from '../templates/ResourceAccessRequests'; +import type { + AddMemeberOptions, + AllMembersOptions, + CondensedMemberSchema, + IncludeInherited, + MemberSchema, + SimpleMemberSchema, +} from '../templates/ResourceMembers'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; +export interface BillableGroupMemberSchema extends CondensedMemberSchema { + last_activity_on: string; + membership_type: string; + removable: boolean; + created_at: string; +} + +export interface BillableGroupMemberMembershipSchema extends Record { + id: number; + source_id: number; + source_full_name: string; + source_members_url: string; + created_at: string; + expires_at: string; + access_level: { + string_value: string; + integer_value: AccessLevel; + }; +} + +export interface OverrodeGroupMemberSchema extends SimpleMemberSchema { + override: boolean; +} + export interface GroupMembers extends ResourceMembers { - add( - groupId: string | number, + add( + projectId: string | number, userId: number, accessLevel: AccessLevel, - options?: BaseRequestOptions, - ): Promise>; + options?: AddMemeberOptions & Sudo & ShowExpanded, + ): Promise>; - all( - groupId: string | number, - options?: IncludeInherited & PaginatedRequestOptions, - ): Promise[]>; + all( + projectId: string | number, + options?: IncludeInherited & + PaginationRequestOptions

& + AllMembersOptions & + Sudo & + ShowExpanded, + ): Promise>; - edit( - groupId: string | number, + edit( + projectId: string | number, userId: number, accessLevel: AccessLevel, - options?: BaseRequestOptions, - ): Promise>; + options?: { expiresAt?: string; memberRoleId?: number } & Sudo & ShowExpanded, + ): Promise>; - show( - groupId: string | number, + show( + projectId: string | number, userId: number, - options?: IncludeInherited & Sudo, - ): Promise>; + options?: IncludeInherited & Sudo & ShowExpanded, + ): Promise>; - remove(groupId: string | number, userId: number, options?: Sudo): Promise; + remove( + projectId: string | number, + userId: number, + options?: Sudo & ShowExpanded, + ): Promise>; } export class GroupMembers extends ResourceMembers { @@ -42,4 +84,103 @@ export class GroupMembers extends ResourceMembers /* istanbul ignore next */ super('groups', options); } + + allBillable( + groupId: string | number, + options: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${groupId}/billable_members`, + options, + ); + } + + allPending( + groupId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, endpoint`${groupId}/pending_members`, options); + } + + approve( + groupId: string | number, + userId: number, + options: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`${groupId}/members/${userId}/approve`, + options, + ); + } + + approveAll( + groupId: string | number, + options: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`${groupId}/members/approve_all`, + options, + ); + } + + removeBillable( + groupId: string | number, + userId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`${groupId}/billable_members/${userId}`, options); + } + + removeOverrideFlag( + groupId: string | number, + userId: number, + options: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`${groupId}/members/${userId}/override`, + options, + ); + } + + setOverrideFlag( + groupId: string | number, + userId: number, + options: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`${groupId}/members/${userId}/override`, + options, + ); + } + + allBillableMemberships( + groupId: string | number, + userId: number, + options: { + search?: string; + sort?: + | 'access_level_asc' + | 'access_level_desc' + | 'last_joined' + | 'name_asc' + | 'name_desc' + | 'oldest_joined' + | 'oldest_sign_in' + | 'recent_sign_in' + | 'last_activity_on_asc' + | 'last_activity_on_desc'; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${groupId}/billable_members/${userId}/memberships`, + options, + ); + } } diff --git a/packages/core/src/resources/GroupMilestones.ts b/packages/core/src/resources/GroupMilestones.ts index 6e729fd29..42be81ce8 100644 --- a/packages/core/src/resources/GroupMilestones.ts +++ b/packages/core/src/resources/GroupMilestones.ts @@ -1,50 +1,75 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceMilestones } from '../templates'; -import { MilestoneSchema } from '../templates/types'; -import { - PaginatedRequestOptions, - BaseRequestOptions, +import type { + AllMilestonesOptions, + BurndownChartEventSchema, + MilestoneSchema, +} from '../templates/ResourceMilestones'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - CamelizedRecord, } from '../infrastructure'; -import { IssueSchema } from './Issues'; -import { MergeRequestSchema } from './MergeRequests'; +import type { IssueSchema } from './Issues'; +import type { MergeRequestSchema } from './MergeRequests'; export interface GroupMilestones extends ResourceMilestones { - all( + all( groupId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: AllMilestonesOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - create( + allAssignedIssues( groupId: string | number, - title: string, - options?: BaseRequestOptions, - ): Promise>; + milestoneId: number, + options?: Sudo & ShowExpanded, + ): Promise>; - edit( + allAssignedMergeRequests( groupId: string | number, milestoneId: number, - options?: BaseRequestOptions, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; + + allBurndownChartEvents( + projectId: string | number, + milestoneId: number, + options?: Sudo & ShowExpanded, + ): Promise>; + + create( + groupId: string | number, + title: string, + options?: { description?: string; dueDate?: string; startDate?: string } & Sudo & + ShowExpanded, + ): Promise>; - issues( + edit( groupId: string | number, milestoneId: number, - options?: Sudo, - ): Promise[]>; + options?: { + title?: string; + description?: string; + dueDate?: string; + startDate?: string; + startEvent?: 'close' | 'activate'; + } & Sudo & + ShowExpanded, + ): Promise>; - mergeRequests( + remove( groupId: string | number, milestoneId: number, - options?: Sudo, - ): Promise[]>; + options?: Sudo & ShowExpanded, + ): Promise>; - show( + show( groupId: string | number, milestoneId: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; } export class GroupMilestones extends ResourceMilestones { diff --git a/packages/core/src/resources/GroupProtectedEnvironments.ts b/packages/core/src/resources/GroupProtectedEnvironments.ts new file mode 100644 index 000000000..d74ae016c --- /dev/null +++ b/packages/core/src/resources/GroupProtectedEnvironments.ts @@ -0,0 +1,63 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceProtectedEnvironments } from '../templates'; +import { + ProtectedEnvironmentAccessLevelEntity, + ProtectedEnvironmentSchema, +} from '../templates/ResourceProtectedEnvironments'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface GroupProtectedEnvironments { + all( + groupId: string | number, + options?: { search?: string } & Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; + + create( + groupId: string | number, + name: string, + deployAccessLevel: ProtectedEnvironmentAccessLevelEntity[], + options?: { + requiredApprovalCount?: number; + approvalRules?: ProtectedEnvironmentAccessLevelEntity[]; + } & Sudo & + ShowExpanded, + ): Promise>; + + edit( + groupId: string | number, + name: string, + options?: { + deployAccessLevels?: ProtectedEnvironmentAccessLevelEntity[]; + requiredApprovalCount?: number; + approvalRules?: ProtectedEnvironmentAccessLevelEntity[]; + } & Sudo & + ShowExpanded, + ): Promise>; + + show( + groupId: string | number, + name: string, + options?: Sudo & ShowExpanded, + ): Promise>; + + remove( + groupId: string | number, + name: string, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class GroupProtectedEnvironments< + C extends boolean = false, +> extends ResourceProtectedEnvironments { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('groups', options); + } +} diff --git a/packages/core/src/resources/GroupPushRules.ts b/packages/core/src/resources/GroupPushRules.ts new file mode 100644 index 000000000..b7effeea1 --- /dev/null +++ b/packages/core/src/resources/GroupPushRules.ts @@ -0,0 +1,33 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourcePushRules } from '../templates'; +import type { CreateAndEditPushRuleOptions, PushRuleSchema } from '../templates/ResourcePushRules'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface GroupPushRules extends ResourcePushRules { + create( + groupId: string | number, + options?: CreateAndEditPushRuleOptions & Sudo & ShowExpanded, + ): Promise>; + + edit( + groupId: string | number, + options?: CreateAndEditPushRuleOptions & Sudo & ShowExpanded, + ): Promise>; + + remove( + groupId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; + + show( + groupId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class GroupPushRules extends ResourcePushRules { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('groups', options); + } +} diff --git a/packages/core/src/resources/GroupRelationExports.ts b/packages/core/src/resources/GroupRelationExports.ts new file mode 100644 index 000000000..57a5d666e --- /dev/null +++ b/packages/core/src/resources/GroupRelationExports.ts @@ -0,0 +1,45 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { BaseRequestOptions, GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface GroupRelationExportStatusSchema extends Record { + relation: string; + status: number; + error?: string; + updated_at: string; +} + +export class GroupRelationExports extends BaseResource { + download( + groupId: string | number, + relation: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, endpoint`groups/${groupId}/export_relations/download`, { + searchParams: { relation }, + ...options, + }); + } + + exportStatus( + groupId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`groups/${groupId}/export_relations`, + options, + ); + } + + scheduleExport( + groupId: string | number, + options?: BaseRequestOptions, + ): Promise> { + return RequestHelper.post<{ message: string }>()( + this, + endpoint`groups/${groupId}/export_relations`, + options, + ); + } +} diff --git a/packages/core/src/resources/GroupReleases.ts b/packages/core/src/resources/GroupReleases.ts new file mode 100644 index 000000000..d1b6fa140 --- /dev/null +++ b/packages/core/src/resources/GroupReleases.ts @@ -0,0 +1,22 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + BaseRequestOptions, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, +} from '../infrastructure'; +import type { ReleaseSchema } from './ProjectReleases'; + +export class GroupReleases extends BaseResource { + all( + groupId: string | number, + options?: PaginationRequestOptions

& BaseRequestOptions, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`groups/${groupId}/releases`, + options, + ); + } +} diff --git a/packages/core/src/resources/GroupRepositoryStorageMoves.ts b/packages/core/src/resources/GroupRepositoryStorageMoves.ts new file mode 100644 index 000000000..a031823a5 --- /dev/null +++ b/packages/core/src/resources/GroupRepositoryStorageMoves.ts @@ -0,0 +1,42 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceRepositoryStorageMoves } from '../templates'; +import type { RepositoryStorageMoveSchema } from '../templates/ResourceRepositoryStorageMoves'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { GroupSchema } from './Groups'; + +export interface GroupRepositoryStorageMoveSchema extends RepositoryStorageMoveSchema { + group: Pick; +} + +export interface GroupRepositoryStorageMoves + extends ResourceRepositoryStorageMoves { + all( + options?: { groupId?: string | number } & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; + + show( + repositoryStorageId: number, + options?: { groupId?: string | number } & Sudo & ShowExpanded, + ): Promise>; + + schedule( + sourceStorageName: string, + options?: { groupId?: string | number; destinationStorageName?: string } & Sudo & + ShowExpanded, + ): Promise>; +} + +export class GroupRepositoryStorageMoves< + C extends boolean = false, +> extends ResourceRepositoryStorageMoves { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('groups', options); + } +} diff --git a/packages/core/src/resources/GroupRunners.ts b/packages/core/src/resources/GroupRunners.ts deleted file mode 100644 index 232fcc806..000000000 --- a/packages/core/src/resources/GroupRunners.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { BaseResource } from '@gitbeaker/requester-utils'; -import { PaginatedRequestOptions, ShowExpanded, RequestHelper, endpoint } from '../infrastructure'; -import { RunnerSchema } from './Runners'; - -export class GroupRunners extends BaseResource { - all(groupId: string | number, options?: PaginatedRequestOptions & ShowExpanded) { - return RequestHelper.get()(this, endpoint`groups/${groupId}/runners`, options); - } -} diff --git a/packages/core/src/resources/GroupSAMLIdentities.ts b/packages/core/src/resources/GroupSAMLIdentities.ts new file mode 100644 index 000000000..fa58c6cdb --- /dev/null +++ b/packages/core/src/resources/GroupSAMLIdentities.ts @@ -0,0 +1,39 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface IdentitySchema extends Record { + extern_uid: string; + user_id: number; +} + +export class GroupSAMLIdentities extends BaseResource { + all( + groupId: string | number, + options: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`groups/${groupId}/saml/identities`, + options, + ); + } + + edit( + groupId: string | number, + identityId: string, + options: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.patch()( + this, + endpoint`groups/${groupId}/saml/${identityId}`, + options, + ); + } +} diff --git a/packages/core/src/resources/GroupSAMLLinks.ts b/packages/core/src/resources/GroupSAMLLinks.ts new file mode 100644 index 000000000..a679c9b39 --- /dev/null +++ b/packages/core/src/resources/GroupSAMLLinks.ts @@ -0,0 +1,73 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { AccessLevel } from '../templates/ResourceAccessRequests'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface SAMLGroupSchema extends Record { + name: string; + access_level: number; +} + +export class GroupSAMLLinks extends BaseResource { + all( + groupId: string | number, + options: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`groups/${groupId}/saml_group_links`, + options, + ); + } + + create( + groupId: string | number, + samlGroupName: string, + accessLevel: AccessLevel, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`groups/${groupId}/saml_group_links`, + { + accessLevel, + samlGroupName, + ...options, + }, + ); + } + + remove( + groupId: string | number, + samlGroupName: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`groups/${groupId}/saml_group_links`, { + searchParams: { + samlGroupName, + }, + ...options, + }); + } + + show( + groupId: string | number, + samlGroupName: string, + options: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`groups/${groupId}/saml_group_links`, + { + samlGroupName, + ...options, + }, + ); + } +} diff --git a/packages/core/src/resources/GroupSCIMIdentities.ts b/packages/core/src/resources/GroupSCIMIdentities.ts new file mode 100644 index 000000000..8323a35c2 --- /dev/null +++ b/packages/core/src/resources/GroupSCIMIdentities.ts @@ -0,0 +1,35 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { IdentitySchema } from './GroupSAMLIdentities'; + +export class GroupSCIMIdentities extends BaseResource { + all( + groupId: string | number, + options: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`groups/${groupId}/scim/identities`, + options, + ); + } + + edit( + groupId: string | number, + identityId: string, + options: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.patch()( + this, + endpoint`groups/${groupId}/scim/${identityId}`, + options, + ); + } +} diff --git a/packages/core/src/resources/GroupVariables.ts b/packages/core/src/resources/GroupVariables.ts index 159cedf2a..480adbb89 100644 --- a/packages/core/src/resources/GroupVariables.ts +++ b/packages/core/src/resources/GroupVariables.ts @@ -1,32 +1,57 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceVariables } from '../templates'; -import { VariableSchema } from '../templates/types'; -import { PaginatedRequestOptions, BaseRequestOptions, CamelizedRecord } from '../infrastructure'; +import type { VariableSchema, VariableType } from '../templates/ResourceVariables'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface GroupVariables extends ResourceVariables { - all( - groupId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; + all( + projectId: string | number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; - create( - groupId: string | number, - options?: BaseRequestOptions, - ): Promise>; + create( + projectId: string | number, + key: string, + value: string, + options?: { + variableType?: VariableType; + protected?: boolean; + masked?: boolean; + environmentScope?: string; + } & Sudo & + ShowExpanded, + ): Promise>; - edit( - groupId: string | number, + edit( + projectId: string | number, key: string, - options?: BaseRequestOptions, - ): Promise>; + value: string, + options?: { + variableType?: VariableType; + protected?: boolean; + masked?: boolean; + environmentScope?: string; + } & Sudo & + ShowExpanded, + ): Promise>; - show( - groupId: string | number, + show( + projectId: string | number, key: string, - options?: PaginatedRequestOptions, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; - remove(groupId: string | number, key: string, options?: PaginatedRequestOptions): Promise; + remove( + projectId: string | number, + key: string, + options?: Sudo & ShowExpanded, + ): Promise>; } export class GroupVariables extends ResourceVariables { diff --git a/packages/core/src/resources/GroupWikis.ts b/packages/core/src/resources/GroupWikis.ts new file mode 100644 index 000000000..7fef39408 --- /dev/null +++ b/packages/core/src/resources/GroupWikis.ts @@ -0,0 +1,57 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceWikis } from '../templates'; +import type { WikiAttachmentSchema, WikiSchema } from '../templates/ResourceWikis'; +import type { + Either, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface GroupWikis extends ResourceWikis { + all( + groupId: string | number, + options?: { withContent?: boolean } & Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; + + create( + groupId: string | number, + content: string, + title: string, + options?: { format?: string } & Sudo & ShowExpanded, + ): Promise>; + + edit( + groupId: string | number, + slug: string, + options?: Either<{ content: string }, { title: string }> & { format?: string } & Sudo & + ShowExpanded, + ): Promise>; + + remove( + groupId: string | number, + slug: string, + options?: Sudo & ShowExpanded, + ): Promise>; + + show( + groupId: string | number, + slug: string, + options?: { renderHtml?: boolean; version?: string } & Sudo & ShowExpanded, + ): Promise>; + + uploadAttachment( + groupId: string | number, + file: { content: Blob; filename: string }, + options?: { branch?: string } & Sudo & ShowExpanded, + ): Promise>; +} + +export class GroupWikis extends ResourceWikis { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('groups', options); + } +} diff --git a/packages/core/src/resources/Groups.ts b/packages/core/src/resources/Groups.ts index 72c7dc333..91d17f3a3 100644 --- a/packages/core/src/resources/Groups.ts +++ b/packages/core/src/resources/Groups.ts @@ -1,143 +1,404 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { +import { RequestHelper, endpoint } from '../infrastructure'; +import type { BaseRequestOptions, - PaginatedRequestOptions, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, ShowExpanded, - RequestHelper, Sudo, - endpoint, } from '../infrastructure'; -import { ProjectSchema } from './Projects'; +import type { CondensedProjectSchema, ExpandedProjectSchema } from './Projects'; +import type { UserSchema } from './Users'; -export interface GroupSchema extends Record { +export interface GroupStatisticsSchema { + storage_size: number; + repository_size: number; + wiki_size: number; + lfs_objects_size: number; + job_artifacts_size: number; + pipeline_artifacts_size: number; + packages_size: number; + snippets_size: number; + uploads_size: number; +} + +export interface CondensedGroupSchema extends Record { id: number; + web_url: string; name: string; - path: string; +} + +export interface SimpleGroupSchema extends CondensedGroupSchema { + avatar_url: string; full_name: string; full_path: string; - parent_id: number; - visibility: string; - avatar_url: string; - web_url: string; +} + +export interface GroupSchema extends SimpleGroupSchema { + path: string; description: string; + visibility: string; share_with_group_lock: boolean; require_two_factor_authentication: boolean; two_factor_grace_period: number; project_creation_level: string; - auto_devops_enabled: boolean; + auto_devops_enabled?: boolean; subgroup_creation_level: string; - emails_disabled: boolean; - mentions_disabled: boolean; + emails_disabled?: boolean; + mentions_disabled?: boolean; lfs_enabled: boolean; default_branch_protection: number; request_access_enabled: boolean; - file_template_project_id: number; created_at: string; + parent_id: number; + ldap_cn?: string; + ldap_access?: string; + marked_for_deletion_on?: string; + membership_lock?: boolean; } -export type GroupDetailSchema = { - id: number; - name: string; - path: string; - full_name: string; - full_path: string; - parent_id: number; - visibility: string; - avatar_url: string; - web_url: string; - description: string; - request_access_enabled: boolean; - file_template_project_id: number; +export interface ExpandedGroupSchema extends GroupSchema { runners_token: string; - shared_with_groups: { - group_id: number; - group_name: string; - group_full_path: string; - group_access_level: number; - expires_at: string; - }[]; - created_at: string; + file_template_project_id: number; + shared_with_groups?: ExpandedProjectSchema[]; + projects?: ExpandedProjectSchema[]; + shared_projects?: ExpandedProjectSchema[]; +} + +export type AllGroupsOptions = { + skipGroups?: number[]; + allAvailable?: boolean; + search?: string; + orderBy?: 'name' | 'path' | 'id'; + sort?: 'asc' | 'desc'; + statistics?: boolean; + withCustomAttributes?: boolean; + owned?: boolean; + minAccessLevel?: number; + topLevelOnly?: boolean; +}; + +export type AllGroupProjectsOptions = { + visibility?: string; + orderBy?: + | 'id' + | 'name' + | 'path' + | 'created_at' + | 'updated_at' + | 'similarity' + | 'last_activity_at'; + sort?: 'asc' | 'desc'; + search?: string; + simple?: boolean; + owned?: boolean; + starred?: boolean; + withIssuesEnabled?: boolean; + withMergeRequestsEnabled?: boolean; + withShared?: boolean; + includeSubgroups?: boolean; + min_accessLevel?: number; + withCustomAttributes?: boolean; + withSecurityReports?: boolean; +}; + +export type CreateGroupOptions = { + autoDevopsEnabled?: boolean; + avatar?: { content: Blob; filename: string }; + defaultBranchProtection?: 0 | 1 | 2 | 3; + description?: string; + emailsDisabled?: boolean; + lfsEnabled?: boolean; + mentionsDisabled?: boolean; + parentId?: number; + projectCreationLevel?: 'noone' | 'maintainer' | 'developer'; + requestAccessEnabled?: boolean; + requireTwoFactorAuthentication?: boolean; + shareWithGroupLock?: boolean; + subgroupCreationLevel?: string; + twoFactorGracePeriod?: number; + visibility?: 'private' | 'public'; + membershipLock?: boolean; + extraSharedRunnersMinutesLimit?: number; + sharedRunnersMinutesLimit?: number; +}; + +export type EditGroupOptions = { + name?: string; + path?: string; + autoDevopsEnabled?: boolean; + avatar?: { content: Blob; filename: string }; + defaultBranchProtection?: 0 | 1 | 2 | 3; + description?: string; + emailsDisabled?: boolean; + lfsEnabled?: boolean; + mentionsDisabled?: boolean; + preventSharingGroupsOutsideHierarchy?: boolean; + projectCreationLevel?: 'noone' | 'maintainer' | 'developer'; + requestAccessEnabled?: boolean; + requireTwoFactorAuthentication?: boolean; + sharedRunnersSetting?: + | 'enabled' + | 'disabled_and_overridable' + | 'disabled_and_unoverridable' + | 'disabled_with_override'; + shareWithGroupLock?: boolean; + subgroupCreationLevel?: string; + twoFactorGracePeriod?: number; + visibility?: 'private' | 'public'; + extraSharedRunnersMinutesLimit?: number; + fileTemplateProjectId?: number; + membershipLock?: boolean; + preventForkingOutsideGroup?: boolean; + sharedRunnersMinutesLimit?: number; + uniqueProjectDownloadLimit?: number; + uniqueProjectDownloadLimitIntervalInSeconds?: number; + uniqueProjectDownloadLimitAllowlist?: string[]; + uniqueProjectDownloadLimitAlertlist?: number[]; + autoBanUserOnExcessiveProjectsDownload?: boolean; + ipRestrictionRanges?: string; +}; + +export type AllProvisionedUsersOptions = { + username?: string; + search?: string; + active?: boolean; + blocked?: boolean; + createdAfter?: string; + createdBefore?: string; }; export class Groups extends BaseResource { - all(options?: PaginatedRequestOptions) { + all( + options?: { statistics: true } & AllGroupsOptions & + PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise>; + + all( + options?: AllGroupsOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()(this, 'groups', options); } - create(name: string, path: string, options?: BaseRequestOptions) { - return RequestHelper.post()(this, 'groups', { name, path, ...options }); + allDescendantGroups( + groupId: string | number, + options: { statistics: true } & AllGroupsOptions & + PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise>; + + allDescendantGroups( + groupId: string | number, + options?: AllGroupsOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`groups/${groupId}/descendant_groups`, + options, + ); } - createLDAPLink( + allProjects( groupId: string | number, - cn: string, - groupAccess: number, - provider: string, - options?: Sudo & ShowExpanded, - ) { - return RequestHelper.post()(this, endpoint`groups/${groupId}/ldap_group_links`, { - cn, - groupAccess, - provider, - ...options, - }); + options?: { simple: true; sharedOnly?: boolean } & AllGroupProjectsOptions & + PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise>; + + allProjects( + groupId: string | number, + options?: AllGroupProjectsOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, endpoint`groups/${groupId}/projects`, options) as any; + } + + allSharedProjects( + groupId: string | number, + options?: { simple: true } & AllGroupProjectsOptions & + PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise>; + + allSharedProjects( + groupId: string | number, + options?: AllGroupProjectsOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, endpoint`groups/${groupId}/projects/shared`, options) as any; } - edit(groupId: string | number, options?: BaseRequestOptions) { - return RequestHelper.put()(this, endpoint`groups/${groupId}`, options); + allSubgroups( + groupId: string | number, + options?: { statistics: true } & AllGroupsOptions & + PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise>; + + allSubgroups( + groupId: string | number, + options?: AllGroupsOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, endpoint`groups/${groupId}/subgroups`, options); + } + + allProvisionedUsers( + groupId: string | number, + options?: AllProvisionedUsersOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`groups/${groupId}/provisioned_users`, + options, + ); } - projects(groupId: string | number, options?: BaseRequestOptions) { - return RequestHelper.get()( + allTransferLocations( + groupId: string | number, + options?: { search?: string } & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`groups/${groupId}/projects`, + endpoint`groups/${groupId}/transfer_locations`, options, ); } - remove(groupId: string | number, options?: Sudo & ShowExpanded) { + create( + name: string, + path: string, + { avatar, ...options }: CreateGroupOptions & Sudo & ShowExpanded = {} as any, + ): Promise> { + if (avatar) { + return RequestHelper.post()(this, 'groups', { + ...options, + isForm: true, + avatar: [avatar.content, avatar.filename], + name, + path, + }); + } + + return RequestHelper.post()(this, 'groups', { name, path, ...options }); + } + + downloadAvatar( + groupId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, endpoint`groups/${groupId}/avatar`, options); + } + + edit( + groupId: string | number, + { avatar, ...options }: EditGroupOptions & Sudo & ShowExpanded = {} as any, + ): Promise> { + if (avatar) { + return RequestHelper.post()(this, endpoint`groups/${groupId}`, { + ...options, + isForm: true, + avatar: [avatar.content, avatar.filename], + }); + } + + return RequestHelper.put()(this, endpoint`groups/${groupId}`, options); + } + + remove( + groupId: string | number, + options?: { permanentlyRemove?: boolean | string; fullPath?: string } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()(this, endpoint`groups/${groupId}`, options); } - removeLDAPLink( + removeAvatar( groupId: string | number, - cn: string, - { provider, ...options }: Sudo & ShowExpanded & { provider?: string } = {}, - ) { - const gId = encodeURIComponent(groupId); - const url = provider ? `${provider}/${cn}` : `${cn}`; + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()(this, endpoint`groups/${groupId}`, { + ...options, + avatar: '', + }); + } - return RequestHelper.del()( - this, - `groups/${gId}/ldap_group_links/${url}`, - options as Record, - ); + restore( + groupId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`groups/${groupId}/restore`, options); } - search(nameOrPath: string, options?: PaginatedRequestOptions) { - return RequestHelper.get()(this, 'groups', { + search( + nameOrPath: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'groups', { search: nameOrPath, ...options, }); } - show(groupId: string | number, options?: BaseRequestOptions) { - return RequestHelper.get()(this, endpoint`groups/${groupId}`, options); + share( + groupId: string | number, + sharedGroupId: string | number, + groupAccess: number, + options: { expiresAt?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`groups/${groupId}/share`, { + groupId: sharedGroupId, + groupAccess, + ...options, + }); } - subgroups(groupId: string | number, options?: PaginatedRequestOptions) { - return RequestHelper.get()(this, endpoint`groups/${groupId}/subgroups`, options); + show( + groupId: string | number, + options?: BaseRequestOptions, + ): Promise> { + return RequestHelper.get()(this, endpoint`groups/${groupId}`, options); } - syncLDAP(groupId: string | number, options?: Sudo & ShowExpanded) { - return RequestHelper.post()(this, endpoint`groups/${groupId}/ldap_sync`, options); + transfer( + groupId: string | number, + options?: { groupId?: number } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`groups/${groupId}/transfer`, options); } - transferProject( + transferProject( groupId: string | number, projectId: string | number, - options?: BaseRequestOptions & ShowExpanded, - ) { - return RequestHelper.post()(this, endpoint`groups/${groupId}/projects/${projectId}`, options); + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`groups/${groupId}/projects/${projectId}`, + options, + ); + } + + unshare( + groupId: string | number, + sharedGroupId: string | number, + options: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`groups/${groupId}/share/${sharedGroupId}`, options); + } + + uploadAvatar( + groupId: string | number, + content: Blob, + { filename, ...options }: { filename?: string } & Sudo & ShowExpanded = {}, + ): Promise> { + return RequestHelper.put<{ avatar_url: string }>()(this, endpoint`groups/${groupId}/avatar`, { + isForm: true, + ...options, + file: [content, filename], + }); } } diff --git a/packages/core/src/resources/Helm.ts b/packages/core/src/resources/Helm.ts new file mode 100644 index 000000000..26e0b508f --- /dev/null +++ b/packages/core/src/resources/Helm.ts @@ -0,0 +1,51 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export class Helm extends BaseResource { + downloadChartIndex( + projectId: string | number, + channel: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/packages/helm/${channel}/index.yaml`, + options, + ); + } + + downloadChart( + projectId: string | number, + channel: string, + filename: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/packages/helm/${channel}/charts/${filename}.tgz`, + options, + ); + } + + import( + projectId: string | number, + content: Blob, + channel: string, + { + filename, + parentId, + ...options + }: { parentId?: number; filename?: string } & Sudo & ShowExpanded = {}, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/packages/helm/api/${channel}/charts`, + { + isForm: true, + ...options, + file: [content, filename], + }, + ); + } +} diff --git a/packages/core/src/resources/Import.ts b/packages/core/src/resources/Import.ts new file mode 100644 index 000000000..899355e51 --- /dev/null +++ b/packages/core/src/resources/Import.ts @@ -0,0 +1,76 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface RepositoryImportStatusSchema extends Record { + id: number; + name: string; + full_path: string; + full_name: string; +} + +export interface ExpandedRepositoryImportStatusSchema extends RepositoryImportStatusSchema { + import_source: string; + import_status: string; + human_import_status_name: string; + provider_link: string; +} + +export class Import extends BaseResource { + importGithubRepository( + personalAccessToken: string, + repositoryId: number, + targetNamespace: string, + options?: { + newName?: string; + githubHostname?: string; + optionalStages?: Record; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, 'import/github', { + personalAccessToken, + repoId: repositoryId, + targetNamespace, + ...options, + }); + } + + cancelGithubRepositoryImport( + projectId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, 'import/github/cancel', { + projectId, + ...options, + }); + } + + importGithubGists( + personalAccessToken: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, 'import/github/gists', { + personalAccessToken, + ...options, + }); + } + + importBitbucketServerRepository( + bitbucketServerUrl: string, + bitbucketServerUsername: string, + personalAccessToken: string, + bitbucketServerProject: string, + bitbucketServerRepository: string, + options?: { newName?: string; targetNamespace?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, 'import/bitbucket_server', { + bitbucketServerUrl, + bitbucketServerUsername, + personalAccessToken, + bitbucketServerProject, + bitbucketServerRepo: bitbucketServerRepository, + ...options, + }); + } +} diff --git a/packages/core/src/resources/InstanceLevelCICDVariables.ts b/packages/core/src/resources/InstanceLevelCICDVariables.ts new file mode 100644 index 000000000..5751c5d28 --- /dev/null +++ b/packages/core/src/resources/InstanceLevelCICDVariables.ts @@ -0,0 +1,73 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface CICDVariableSchema extends Record { + key: string; + variable_type: string; + value: string; + protected: boolean; + masked: boolean; + raw: boolean; +} + +export class InstanceLevelCICDVariables extends BaseResource { + all( + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'admin/ci/variables', options); + } + + create( + key: string, + value: string, + options?: { + variableType?: string; + protected?: boolean; + masked?: boolean; + raw?: boolean; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, 'admin/ci/variables', { + key, + value, + ...options, + }); + } + + edit( + keyId: string, + value: string, + options?: { + variableType?: string; + protected?: boolean; + masked?: boolean; + raw?: boolean; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.put()(this, endpoint`admin/ci/variables/${keyId}`, { + value, + ...options, + }); + } + + show( + keyId: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`admin/ci/variables/${keyId}`, + options, + ); + } + + remove( + keyId: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, endpoint`admin/ci/variables/${keyId}`, options); + } +} diff --git a/packages/core/src/resources/Integrations.ts b/packages/core/src/resources/Integrations.ts new file mode 100644 index 000000000..040381c5d --- /dev/null +++ b/packages/core/src/resources/Integrations.ts @@ -0,0 +1,107 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { BaseRequestOptions, GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export type SupportedIntegration = + | 'asana' + | 'assembla' + | 'bamboo' + | 'bugzilla' + | 'buildkite' + | 'campfire' + | 'custom-issue-tracker' + | 'drone-ci' + | 'emails-on-push' + | 'external-wiki' + | 'flowdock' + | 'hangouts_chat' + | 'hipchat' + | 'irker' + | 'jira' + | 'kubernetes' + | 'slack-slash-commands' + | 'slack' + | 'packagist' + | 'pipelines-email' + | 'pivotaltracker' + | 'prometheus' + | 'pushover' + | 'redmine' + | 'microsoft-teams' + | 'mattermost' + | 'mattermost-slash-commands' + | 'teamcity' + | 'jenkins' + | 'jenkins-deprecated' + | 'mock-ci' + | 'youtrack'; + +export interface IntegrationSchema extends Record { + id: number; + title: string; + slug: string; + created_at: string; + updated_at: string; + active: boolean; + commit_events: boolean; + push_events: boolean; + issues_events: boolean; + confidential_issues_events: boolean; + merge_requests_events: boolean; + tag_push_events: boolean; + note_events: boolean; + confidential_note_events: boolean; + pipeline_events: boolean; + wiki_page_events: boolean; + job_events: boolean; + comment_on_event_enabled: boolean; +} + +export class Integrations extends BaseResource { + all( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/integrations`, + options, + ); + } + + edit( + projectId: string | number, + integrationName: SupportedIntegration, + options?: BaseRequestOptions, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`projects/${projectId}/integrations/${integrationName}`, + options, + ); + } + + disable( + projectId: string | number, + integrationName: SupportedIntegration, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`projects/${projectId}/integrations/${integrationName}`, + options, + ); + } + + show( + projectId: string | number, + integrationName: SupportedIntegration, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/integrations/${integrationName}`, + options, + ); + } +} diff --git a/packages/core/src/resources/IssueAwardEmojis.ts b/packages/core/src/resources/IssueAwardEmojis.ts index ffcc31441..4b9b6e405 100644 --- a/packages/core/src/resources/IssueAwardEmojis.ts +++ b/packages/core/src/resources/IssueAwardEmojis.ts @@ -1,40 +1,46 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceAwardEmojis } from '../templates'; -import { AwardEmojiSchema } from '../templates/types'; -import { PaginatedRequestOptions, Sudo, CamelizedRecord } from '../infrastructure'; +import type { AwardEmojiSchema } from '../templates/ResourceAwardEmojis'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface IssueAwardEmojis extends ResourceAwardEmojis { - all( + all( projectId: string | number, issueIId: number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - award( + award( projectId: string | number, issueIId: number, name: string, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; - remove( + remove( projectId: string | number, issueIId: number, awardId: number, - options?: Sudo, - ): Promise; + options?: Sudo & ShowExpanded, + ): Promise>; - show( + show( projectId: string | number, issueIId: number, awardId: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; } export class IssueAwardEmojis extends ResourceAwardEmojis { constructor(options: BaseResourceOptions) { /* istanbul ignore next */ - super('issues', options); + super('projects', 'issues', options); } } diff --git a/packages/core/src/resources/IssueDiscussions.ts b/packages/core/src/resources/IssueDiscussions.ts index 57b82a961..1dafa47ac 100644 --- a/packages/core/src/resources/IssueDiscussions.ts +++ b/packages/core/src/resources/IssueDiscussions.ts @@ -1,58 +1,59 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceDiscussions } from '../templates'; -import { DiscussionSchema } from '../templates/types'; -import { - BaseRequestOptions, - PaginatedRequestOptions, +import type { DiscussionNoteSchema, DiscussionSchema } from '../templates/ResourceDiscussions'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - CamelizedRecord, } from '../infrastructure'; export interface IssueDiscussions extends ResourceDiscussions { - addNote( + addNote( projectId: string | number, issueIId: number, - discussionId: string | number, + discussionId: string, noteId: number, body: string, - options?: BaseRequestOptions, - ): Promise>; + options?: { createdAt?: string } & Sudo & ShowExpanded, + ): Promise>; - all( + all( projectId: string | number, issueIId: number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - create( + create( projectId: string | number, issueIId: number, body: string, - options?: BaseRequestOptions, - ): Promise>; + options?: { createdAt?: string } & Sudo & ShowExpanded, + ): Promise>; - editNote( + editNote( projectId: string | number, issueIId: number, - discussionId: string | number, + discussionId: string, noteId: number, - options: BaseRequestOptions & { body: string }, - ): Promise>; + options: Sudo & ShowExpanded & { body: string }, + ): Promise>; - removeNote( + removeNote( projectId: string | number, issueIId: number, - discussionId: string | number, + discussionId: string, noteId: number, - options?: Sudo, - ): Promise; + options?: Sudo & ShowExpanded, + ): Promise>; - show( + show( projectId: string | number, issueIId: number, - discussionId: string | number, - options?: Sudo, - ): Promise>; + discussionId: string, + options?: Sudo & ShowExpanded, + ): Promise>; } export class IssueDiscussions extends ResourceDiscussions { diff --git a/packages/core/src/resources/IssueIterationEvents.ts b/packages/core/src/resources/IssueIterationEvents.ts new file mode 100644 index 000000000..acf8d8285 --- /dev/null +++ b/packages/core/src/resources/IssueIterationEvents.ts @@ -0,0 +1,32 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceIterationEvents } from '../templates'; +import type { IterationEventSchema } from '../templates/ResourceIterationEvents'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface IssueIterationEvents { + all( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; + + show( + projectId: string | number, + issueIId: number, + iterationEventId: number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class IssueIterationEvents extends ResourceIterationEvents { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', 'issues', options); + } +} diff --git a/packages/core/src/resources/IssueLabelEvents.ts b/packages/core/src/resources/IssueLabelEvents.ts new file mode 100644 index 000000000..2975fc07d --- /dev/null +++ b/packages/core/src/resources/IssueLabelEvents.ts @@ -0,0 +1,32 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceLabelEvents } from '../templates'; +import type { LabelEventSchema } from '../templates/ResourceLabelEvents'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface IssueLabelEvents { + all( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; + + show( + projectId: string | number, + issueIId: number, + labelEventId: number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class IssueLabelEvents extends ResourceLabelEvents { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', 'issues', options); + } +} diff --git a/packages/core/src/resources/IssueLinks.ts b/packages/core/src/resources/IssueLinks.ts new file mode 100644 index 000000000..7cb0a7315 --- /dev/null +++ b/packages/core/src/resources/IssueLinks.ts @@ -0,0 +1,91 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import { UserSchema } from './Users'; +import { MilestoneSchema } from '../templates/ResourceMilestones'; + +export interface IssueLinkSchema extends Record { + id: number; + iid: number; + project_id: number; + issue_link_id: number; + state: string; + description: string; + weight?: number; + author: Omit; + milestone: MilestoneSchema; + assignees?: Omit[]; + title: string; + labels?: string[]; + user_notes_count: number; + due_date: string; + web_url: string; + confidential: boolean; + updated_at: string; + link_created_at: string; + link_updated_at: string; + link_type: 'relates_to' | 'blocks' | 'is_blocked_by'; +} + +export interface ExpandedIssueLinkSchema extends Record { + source_issue: Omit< + IssueLinkSchema, + 'link_type' | 'link_created_at' | 'link_updated_at' | 'issue_link_id' + >; + target_issue: Omit< + IssueLinkSchema, + 'link_type' | 'link_created_at' | 'link_updated_at' | 'issue_link_id' + >; + link_type: 'relates_to' | 'blocks' | 'is_blocked_by'; +} + +export class IssueLinks extends BaseResource { + all( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/issues/${issueIId}/links`, + options, + ); + } + + create( + projectId: string | number, + issueIId: number, + targetProjectId: string | number, + targetIssueIId: number, + options?: { linkType?: 'relates_to' | 'blocks' | 'is_blocked_by' } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/issues/${issueIId}/links`, + { + targetProjectId, + targetIssueIId, + ...options, + }, + ); + } + + remove( + projectId: string | number, + issueIId: number, + issueLinkId: number, + options?: { linkType?: 'relates_to' | 'blocks' | 'is_blocked_by' } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`projects/${projectId}/issues/${issueIId}/links/${issueLinkId}`, + options, + ); + } +} diff --git a/packages/core/src/resources/IssueMilestoneEvents.ts b/packages/core/src/resources/IssueMilestoneEvents.ts new file mode 100644 index 000000000..c398a695a --- /dev/null +++ b/packages/core/src/resources/IssueMilestoneEvents.ts @@ -0,0 +1,32 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceMilestoneEvents } from '../templates'; +import type { MilestoneEventSchema } from '../templates/ResourceMilestoneEvents'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface IssueMilestoneEvents { + all( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; + + show( + projectId: string | number, + issueIId: number, + milestoneEventId: number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class IssueMilestoneEvents extends ResourceMilestoneEvents { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', 'issues', options); + } +} diff --git a/packages/core/src/resources/IssueNoteAwardEmojis.ts b/packages/core/src/resources/IssueNoteAwardEmojis.ts index 60728d5cb..f23d25112 100644 --- a/packages/core/src/resources/IssueNoteAwardEmojis.ts +++ b/packages/core/src/resources/IssueNoteAwardEmojis.ts @@ -1,40 +1,46 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceNoteAwardEmojis } from '../templates'; -import { AwardEmojiSchema } from '../templates/types'; -import { PaginatedRequestOptions, CamelizedRecord, Sudo } from '../infrastructure'; +import type { AwardEmojiSchema } from '../templates/ResourceAwardEmojis'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface IssueNoteAwardEmojis extends ResourceNoteAwardEmojis { - all( + all( projectId: string | number, issueIId: number, noteId: number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - award( + award( projectId: string | number, issueIId: number, noteId: number, name: string, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; - remove( + remove( projectId: string | number, issueIId: number, noteId: number, awardId: number, - options?: Sudo, - ): Promise; + options?: Sudo & ShowExpanded, + ): Promise>; - show( + show( projectId: string | number, issueIId: number, noteId: number, awardId: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; } export class IssueNoteAwardEmojis extends ResourceNoteAwardEmojis { diff --git a/packages/core/src/resources/IssueNotes.ts b/packages/core/src/resources/IssueNotes.ts index 246bdce12..9bafeb1ab 100644 --- a/packages/core/src/resources/IssueNotes.ts +++ b/packages/core/src/resources/IssueNotes.ts @@ -1,14 +1,16 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceNotes } from '../templates'; -import { NoteSchema } from '../templates/types'; -import { - PaginatedRequestOptions, - BaseRequestOptions, +import type { NoteSchema } from '../templates/ResourceNotes'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - CamelizedRecord, } from '../infrastructure'; export interface IssueNoteSchema extends NoteSchema { + confidential: boolean; attachment?: string; system: boolean; noteable_id: number; @@ -18,40 +20,44 @@ export interface IssueNoteSchema extends NoteSchema { } export interface IssueNotes extends ResourceNotes { - all( + all( projectId: string | number, issueIId: number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: { + sort?: 'asc' | 'desc'; + orderBy?: 'created_at' | 'updated_at'; + } & PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise>; - create( + create( projectId: string | number, issueIId: number, body: string, - options?: BaseRequestOptions, - ): Promise>; + options?: { internal?: boolean; createdAt?: string } & Sudo & ShowExpanded, + ): Promise>; - edit( + edit( projectId: string | number, issueIId: number, noteId: number, - body: string, - options?: BaseRequestOptions, - ): Promise>; + options: { body?: string } & Sudo & ShowExpanded, + ): Promise>; - remove( + remove( projectId: string | number, issueIId: number, noteId: number, options?: Sudo, - ): Promise; + ): Promise>; - show( + show( projectId: string | number, issueIId: number, noteId: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; } export class IssueNotes extends ResourceNotes { diff --git a/packages/core/src/resources/IssueStateEvents.ts b/packages/core/src/resources/IssueStateEvents.ts new file mode 100644 index 000000000..5e0c08bb3 --- /dev/null +++ b/packages/core/src/resources/IssueStateEvents.ts @@ -0,0 +1,32 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceStateEvents } from '../templates'; +import type { StateEventSchema } from '../templates/ResourceStateEvents'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface IssueStateEvents { + all( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; + + show( + projectId: string | number, + issueIId: number, + stateEventId: number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class IssueStateEvents extends ResourceStateEvents { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', 'issues', options); + } +} diff --git a/packages/core/src/resources/IssueWeightEvents.ts b/packages/core/src/resources/IssueWeightEvents.ts new file mode 100644 index 000000000..05d62e312 --- /dev/null +++ b/packages/core/src/resources/IssueWeightEvents.ts @@ -0,0 +1,32 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceStateEvents } from '../templates'; +import type { StateEventSchema } from '../templates/ResourceStateEvents'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface IssueWeightEvents { + all( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; + + show( + projectId: string | number, + issueIId: number, + weightEventId: number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class IssueWeightEvents extends ResourceStateEvents { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', 'issues', options); + } +} diff --git a/packages/core/src/resources/Issues.ts b/packages/core/src/resources/Issues.ts index e48531de2..3e0e5cad0 100644 --- a/packages/core/src/resources/Issues.ts +++ b/packages/core/src/resources/Issues.ts @@ -1,15 +1,20 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { UserSchema } from './Users'; -import { MergeRequestSchema } from './MergeRequests'; -import { MilestoneSchema } from '../templates/types'; -import { - ShowExpanded, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, + EitherOrNone, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, + UserAgentDetailSchema, } from '../infrastructure'; +import type { UserSchema } from './Users'; +import type { MergeRequestSchema } from './MergeRequests'; +import type { TodoSchema } from './TodoLists'; +import type { MilestoneSchema } from '../templates/ResourceMilestones'; +import type { MetricImageSchema } from './AlertManagement'; export interface TimeStatsSchema extends Record { time_estimate: number; @@ -18,38 +23,16 @@ export interface TimeStatsSchema extends Record { human_total_time_spent: string; } -export interface IssueLinkSchema extends Record { - id: number; - iid: number; - project_id: number; - issue_link_id: number; - state: string; - description: string; - weight?: number; - author: Omit; - milestone: MilestoneSchema; - assignees?: Omit[]; - title: string; - labels?: string[]; - user_notes_count: number; - due_date: string; - web_url: string; - confidential: boolean; - updated_at: string; - link_type: 'relates_to' | 'blocks' | 'is_blocked_by'; - link_created_at: string; - link_updated_at: string; -} - export interface IssueSchema extends Record { state: string; description: string; - weight?: number; health_status?: string; + weight?: number; author: Omit; milestone: MilestoneSchema; project_id: number; assignees?: Omit[]; + type: string; updated_at: string; closed_at?: string; closed_by?: string; @@ -93,13 +76,90 @@ export interface IssueSchema extends Record { url: string; group_id: number; }; + service_desk_reply_to?: string; } +export type AllIssuesOptions = { + assigneeId?: number; + assigneeUsername?: string[]; + authorId?: number; + authorUsername?: string; + confidential?: boolean; + createdAfter?: string; + createdBefore?: string; + dueDate?: string; + epicId?: number; + healthStatus?: string; + iids?: number[]; + in?: string; + issueType?: string; + iterationId?: number; + iterationTitle?: string; + labels?: string; + milestone?: string; + milestoneId?: string; + myReactionEmoji?: string; + nonArchived?: boolean; + not?: Record; + orderBy?: string; + scope?: string; + search?: string; + sort?: string; + state?: string; + updatedAfter?: string; + updatedBefore?: string; + weight?: number; + withLabelsDetails?: boolean; +}; + +export type CreateIssueOptions = { + assigneeId?: number; + assigneeIds?: number[]; + confidential?: boolean; + createdAt?: string; + description?: string; + discussionToResolve?: string; + dueDate?: string; + epicId?: number; + epicIid?: number; + iid?: number | string; + issueType?: string; + labels?: string; + mergeRequestToResolveDiscussionsOf?: number; + milestoneId?: number; + weight?: number; +}; + +export type EditIssueOptions = { + addLabels?: string; + assigneeId?: number; + assigneeIds?: number[]; + confidential?: boolean; + description?: string; + discussionLocked?: boolean; + dueDate?: string; + epicId?: number; + epicIid?: number; + issueType?: string; + labels?: string; + milestoneId?: number; + removeLabels?: string; + stateEvent?: string; + title?: string; + updatedAt?: string; + weight?: number; +}; + export class Issues extends BaseResource { - addSpentTime(projectId: string | number, issueIid: number, duration: string, options?: Sudo) { + addSpentTime( + projectId: string | number, + issueIId: number, + duration: string, + options?: { summary?: string } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, - endpoint`projects/${projectId}/issues/${issueIid}/add_spent_time`, + endpoint`projects/${projectId}/issues/${issueIId}/add_spent_time`, { duration, ...options, @@ -107,10 +167,15 @@ export class Issues extends BaseResource { ); } - addTimeEstimate(projectId: string | number, issueIid: number, duration: string, options?: Sudo) { + addTimeEstimate( + projectId: string | number, + issueIId: number, + duration: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, - endpoint`projects/${projectId}/issues/${issueIid}/time_estimate`, + endpoint`projects/${projectId}/issues/${issueIId}/time_estimate`, { duration, ...options, @@ -118,151 +183,299 @@ export class Issues extends BaseResource { ); } - all({ - projectId, - groupId, - ...options - }: { projectId?: string | number; groupId?: string | number } & PaginatedRequestOptions = {}) { + all( + { + projectId, + groupId, + ...options + }: EitherOrNone<{ projectId?: string | number }, { groupId?: string | number }> & + PaginationRequestOptions

& + AllIssuesOptions & + BaseRequestOptions = {} as any, + ): Promise> { let url: string; - if (projectId) { - url = endpoint`projects/${projectId}/issues`; - } else if (groupId) { - url = endpoint`groups/${groupId}/issues`; - } else { - url = 'issues'; - } + if (projectId) url = endpoint`projects/${projectId}/issues`; + else if (groupId) url = endpoint`groups/${groupId}/issues`; + else url = 'issues'; - return RequestHelper.get[]>()(this, url, options); + return RequestHelper.get()(this, url, options); } - create(projectId: string | number, options?: BaseRequestOptions) { - return RequestHelper.post()(this, endpoint`projects/${projectId}/issues`, options); + allMetricImages( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/issues/${issueIId}/metric_images`, + options, + ); } - closedBy(projectId: string | number, issueIid: number, options?: BaseRequestOptions) { - return RequestHelper.get()( + allParticipants( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded, + ): Promise[], C, E, void>> { + return RequestHelper.get[]>()( this, - endpoint`projects/${projectId}/issues/${issueIid}/closed_by`, + endpoint`projects/${projectId}/issues/${issueIId}/participants`, options, ); } - edit(projectId: string | number, issueIid: number, options?: BaseRequestOptions) { - return RequestHelper.put()( + allRelatedMergeRequests( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/issues/${issueIid}`, + endpoint`projects/${projectId}/issues/${issueIId}/related_merge_requests`, options, ); } - // TODO move - link( + create( + projectId: string | number, + title: string, + options?: CreateIssueOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`projects/${projectId}/issues`, { + ...options, + title, + }); + } + + createTodo( projectId: string | number, issueIId: number, - targetProjectId: string | number, - targetIssueIId: number, - options?: BaseRequestOptions, - ) { - const [targetPId, targetIId] = [targetProjectId, targetIssueIId].map(encodeURIComponent); + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/issues/${issueIId}/todo`, + options, + ); + } - return RequestHelper.post()( + clone( + projectId: string | number, + issueIId: number, + destinationProjectId: string | number, + options?: { withNotes?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/issues/${issueIId}/links`, + endpoint`projects/${projectId}/issues/${issueIId}/clone`, { - targetProjectId: targetPId, - targetIssueIid: targetIId, + toProjectId: destinationProjectId, ...options, }, ); } - // TODO move - links(projectId: string | number, issueIid: number) { - return RequestHelper.get()( + edit( + projectId: string | number, + issueIId: number, + options?: EditIssueOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( this, - endpoint`projects/${projectId}/issues/${issueIid}/links`, + endpoint`projects/${projectId}/issues/${issueIId}`, + options, ); } - participants(projectId: string | number, issueIid: number, options?: Sudo) { - return RequestHelper.get[]>()( + editMetricImage( + projectId: string | number, + issueIId: number, + imageId: number, + options?: { url?: string; urlText?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( this, - endpoint`projects/${projectId}/issues/${issueIid}/participants`, + endpoint`projects/${projectId}/issues/${issueIId}/metric_images/${imageId}`, options, ); } - relatedMergeRequests(projectId: string | number, issueIid: number, options?: BaseRequestOptions) { - return RequestHelper.get()( + move( + projectId: string | number, + issueIId: number, + destinationProjectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/issues/${issueIid}/related_merge_requests`, - options, + endpoint`projects/${projectId}/issues/${issueIId}/move`, + { + toProjectId: destinationProjectId, + ...options, + }, ); } - // TODO move - removeLink( + // Includes /promote already! + promote( projectId: string | number, - issueIid: number, - issueLinkId: string | number, - options?: { linkType?: string } & Sudo & ShowExpanded, - ) { + issueIId: number, + body: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/issues/${issueIId}/notes`, + { + searchParams: { + body: `${body} \n /promote`, + }, + ...options, + }, + ); + } + + remove( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`projects/${projectId}/issues/${issueIId}`, options); + } + + removeMetricImage( + projectId: string | number, + issueIId: number, + imageId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, - endpoint`projects/${projectId}/issues/${issueIid}/links/${issueLinkId}`, + endpoint`projects/${projectId}/issues/${issueIId}/metric_images/${imageId}`, options, ); } - remove(projectId: string | number, issueIid: number, options?: Sudo & ShowExpanded) { - return RequestHelper.del()(this, endpoint`projects/${projectId}/issues/${issueIid}`, options); + reorder( + projectId: string | number, + issueIId: number, + options?: { moveAfterId?: number; moveBeforeId?: number } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`projects/${projectId}/issues/${issueIId}/reorder`, + options, + ); } - resetSpentTime(projectId: string | number, issueIid: number, options?: BaseRequestOptions) { + resetSpentTime( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, - endpoint`projects/${projectId}/issues/${issueIid}/reset_spent_time`, + endpoint`projects/${projectId}/issues/${issueIId}/reset_spent_time`, options, ); } - resetTimeEstimate(projectId: string | number, issueIid: number, options?: Sudo) { + resetTimeEstimate( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, - endpoint`projects/${projectId}/issues/${issueIid}/reset_time_estimate`, + endpoint`projects/${projectId}/issues/${issueIId}/reset_time_estimate`, options, ); } - show(projectId: string | number, issueIid: number, options?: Sudo) { - return RequestHelper.get()( + show( + issueId: number, + { projectId, ...options }: { projectId?: string | number } & Sudo & ShowExpanded = {}, + ): Promise> { + const url = projectId ? endpoint`projects/${projectId}/issues/${issueId}` : `issues/${issueId}`; + + return RequestHelper.get()(this, url, options as Sudo & ShowExpanded); + } + + subscribe( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/issues/${issueIid}`, + endpoint`projects/${projectId}/issues/${issueIId}/subscribe`, options, ); } - subscribe(projectId: string | number, issueIid: number, options?: Sudo) { - return RequestHelper.post()( + allClosedByMergeRequestst( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/issues/${issueIid}/subscribe`, + endpoint`projects/${projectId}/issues/${issueIId}/closed_by`, options, ); } - timeStats(projectId: string | number, issueIid: number, options?: Sudo) { + showTimeStats( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, - endpoint`projects/${projectId}/issues/${issueIid}/time_stats`, + endpoint`projects/${projectId}/issues/${issueIId}/time_stats`, options, ); } - unsubscribe(projectId: string | number, issueIid: number, options?: Sudo) { + unsubscribe( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, - endpoint`projects/${projectId}/issues/${issueIid}/unsubscribe`, + endpoint`projects/${projectId}/issues/${issueIId}/unsubscribe`, + options, + ); + } + + uploadMetricImage( + projectId: string | number, + issueIId: number, + metricImage: { content: Blob; filename: string }, + options?: { url?: string; urlText?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/issues/${issueIId}/metric_images`, + { + isForm: true, + ...options, + file: [metricImage.content, metricImage.filename], + }, + ); + } + + showUserAgentDetails( + projectId: string | number, + issueIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/issues/${issueIId}/user_agent_details`, options, ); } diff --git a/packages/core/src/resources/IssuesStatistics.ts b/packages/core/src/resources/IssuesStatistics.ts index 846f59387..2f2301b02 100644 --- a/packages/core/src/resources/IssuesStatistics.ts +++ b/packages/core/src/resources/IssuesStatistics.ts @@ -1,5 +1,6 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { RequestHelper, BaseRequestOptions, endpoint } from '../infrastructure'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { EitherOrNone, GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; export interface StatisticsSchema extends Record { statistics: { @@ -11,21 +12,40 @@ export interface StatisticsSchema extends Record { }; } +export type AllIssueStatisticsOptions = { + labels?: string; + milestone?: string; + scope?: 'created_by_me' | 'assigned_to_me' | 'all'; + epicId?: number; + myReactionEmoji?: string; + iids?: number[]; + search?: string; + in?: string; + createdAfter?: string; + createdBefore?: string; + updatedAfter?: string; + updatedBefore?: string; + confidential?: boolean; +}; + export class IssuesStatistics extends BaseResource { - all({ - projectId, - groupId, - ...options - }: { projectId?: string | number; groupId?: string | number } & BaseRequestOptions = {}) { + all( + { + projectId, + groupId, + ...options + }: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & + EitherOrNone<{ authorId: number }, { authorUsername: string }> & + EitherOrNone<{ assigneeId: number }, { assigneeUsername: string }> & + AllIssueStatisticsOptions & + Sudo & + ShowExpanded = {} as any, + ): Promise> { let url: string; - if (projectId) { - url = endpoint`projects/${projectId}/issues_statistics`; - } else if (groupId) { - url = endpoint`groups/${groupId}/issues_statistics`; - } else { - url = 'issues_statistics'; - } + if (projectId) url = endpoint`projects/${projectId}/issues_statistics`; + else if (groupId) url = endpoint`groups/${groupId}/issues_statistics`; + else url = 'issues_statistics'; return RequestHelper.get()(this, url, options); } diff --git a/packages/core/src/resources/JobArtifacts.ts b/packages/core/src/resources/JobArtifacts.ts new file mode 100644 index 000000000..246fe3a14 --- /dev/null +++ b/packages/core/src/resources/JobArtifacts.ts @@ -0,0 +1,96 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; +import type { JobSchema } from './Jobs'; + +function generateDownloadPathForJob( + projectId: string | number, + jobId: number, + artifactPath?: string, +) { + let url = endpoint`projects/${projectId}/jobs/${jobId}/artifacts`; + + if (artifactPath) url += `/${artifactPath}`; + + return url; +} + +function generateDownloadPath( + projectId: string | number, + ref: string, + job: string, + artifactPath?: string, +) { + let url = endpoint`projects/${projectId}/jobs/artifacts/${ref}`; + + if (artifactPath) { + url += endpoint`/raw/${artifactPath}?job=${job}`; + } else { + url += endpoint`/download?job=${job}`; + } + + return url; +} + +export class JobArtifacts extends BaseResource { + downloadArchive( + projectId: string | number, + { + jobId, + jobToken, + artifactPath, + ref, + job, + ...options + }: ( + | { jobId: number; artifactPath?: undefined; job?: undefined; ref?: undefined } + | { jobId: number; artifactPath: string; job?: undefined; ref?: undefined } + | { ref: string; job: string; jobId?: undefined; artifactPath?: undefined } + | { ref: string; job: string; artifactPath: string; jobId?: undefined } + ) & { jobToken?: string } & Sudo & + ShowExpanded = {} as any, + ): Promise> { + let url: string; + + if (jobId) url = generateDownloadPathForJob(projectId, jobId, artifactPath); + else if (job && ref) url = generateDownloadPath(projectId, ref, job, artifactPath); + else + throw new Error( + 'Missing one of the required parameters. See typing documentation for available arguments.', + ); + + return RequestHelper.get()(this, url, { + searchParams: { + jobToken, + }, + ...options, + }); + } + + keep( + projectId: string | number, + jobId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/jobs/${jobId}/artifacts/keep`, + options, + ); + } + + remove( + projectId: string | number, + { jobId, ...options }: { jobId?: number } & Sudo & ShowExpanded = {}, + ): Promise> { + let url: string; + + if (jobId) { + url = endpoint`projects/${projectId}/jobs/${jobId}/artifacts`; + } else { + url = endpoint`projects/${projectId}/artifacts`; + } + + return RequestHelper.del()(this, url, options); + } +} diff --git a/packages/core/src/resources/Jobs.ts b/packages/core/src/resources/Jobs.ts index 4462d27b7..dae3ab591 100644 --- a/packages/core/src/resources/Jobs.ts +++ b/packages/core/src/resources/Jobs.ts @@ -1,15 +1,18 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { +import { RequestHelper, endpoint } from '../infrastructure'; +import type { BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; -import { CommitSchema } from './Commits'; -import { RunnerSchema } from './Runners'; -import { UserSchema } from './Users'; -import { PipelineSchema } from './Pipelines'; +import type { SimpleProjectSchema } from './Projects'; +import type { CondensedCommitSchema } from './Commits'; +import type { RunnerSchema } from './Runners'; +import type { ExpandedUserSchema, UserSchema } from './Users'; +import type { PipelineSchema } from './Pipelines'; export type JobScope = | 'created' @@ -28,39 +31,55 @@ export interface ArtifactSchema extends Record { file_format?: string; } -export interface JobSchema extends Record { +export interface CondensedJobSchema extends Record { id: number; - status: string; + name: string; stage: string; + project_id: string | number; + project_name: string; +} + +export interface JobSchema extends Record { + id: number; name: string; + stage: string; + status: string; ref: string; tag: boolean; coverage?: string; allow_failure: boolean; - created_at: Date; - started_at?: Date; - finished_at?: Date; + created_at: string; + started_at?: string; + finished_at?: string; + failure_reason?: string; + erased_at?: string; duration?: number; - user: UserSchema; - commit: CommitSchema; + user: ExpandedUserSchema; + commit: CondensedCommitSchema; pipeline: PipelineSchema; web_url: string; artifacts: ArtifactSchema[]; + queued_duration: number; + artifacts_file: { + filename: string; + size: number; + }; runner: RunnerSchema; - artifacts_expire_at?: Date; + artifacts_expire_at?: string; tag_list?: string[]; + project?: { + ci_job_token_scope_enabled?: boolean; + }; } export interface BridgeSchema extends Record { - commit: Pick< - CommitSchema, - 'id' | 'short_id' | 'author_name' | 'author_email' | 'message' | 'title' | 'created_at' - >; + commit: CondensedCommitSchema; coverage?: string; allow_failure: boolean; created_at: string; started_at: string; finished_at: string; + erased_at?: string; duration: number; queued_duration: number; id: number; @@ -71,77 +90,85 @@ export interface BridgeSchema extends Record { status: string; tag: boolean; web_url: string; - user: UserSchema; + user: ExpandedUserSchema; downstream_pipeline: Omit; } +export interface AllowedAgentSchema extends Record { + id: number; + config_project: Omit; +} + +export interface JobKubernetesAgentsSchema extends Record { + allowed_agents: AllowedAgentSchema[]; + job: CondensedJobSchema; + pipeline: PipelineSchema; + project: Omit; + user: UserSchema; +} + +export interface JobVariableAttributeOption extends Record { + key: string; + value: string; +} + export class Jobs extends BaseResource { - all(projectId: string | number, options?: PaginatedRequestOptions) { - return RequestHelper.get()(this, endpoint`projects/${projectId}/jobs`, options); + all( + projectId: string | number, + { + pipelineId, + ...options + }: { pipelineId?: number; scope?: JobScope; includeRetried?: boolean } & BaseRequestOptions & + PaginationRequestOptions

= {} as any, + ): Promise> { + const url = pipelineId + ? endpoint`projects/${projectId}/pipelines/${pipelineId}/jobs` + : endpoint`projects/${projectId}/jobs`; + + return RequestHelper.get()(this, url, options); } - cancel(projectId: string | number, jobId: number, options?: Sudo) { - return RequestHelper.post()( + allPipelineBridges( + projectId: string | number, + pipelineId: number, + options?: { scope?: JobScope } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/jobs/${jobId}/cancel`, + endpoint`projects/${projectId}/pipelines/${pipelineId}/bridges`, options, ); } - // TODO move - downloadSingleArtifactFile( + cancel( projectId: string | number, jobId: number, - artifactPath: string, - { stream = false, ...options }: { stream?: boolean } & BaseRequestOptions = {}, - ) { - const [pId, jId] = [projectId, jobId].map(encodeURIComponent); - const url = `projects/${pId}/jobs/${jId}/artifacts/${artifactPath}`; - - if (stream) { - return RequestHelper.stream(this, url, options); - } - return RequestHelper.get()(this, url, options); + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/jobs/${jobId}/cancel`, + options, + ); } - // TODO move - downloadSingleArtifactFileFromRef( + downloadTraceFile( projectId: string | number, - ref: string, - artifactPath: string, - jobName: string, - { stream = false, ...options }: { stream?: boolean } & BaseRequestOptions = {}, - ) { - const [pId, rId, name] = [projectId, ref, jobName].map(encodeURIComponent); - const url = `projects/${pId}/jobs/artifacts/${rId}/raw/${artifactPath}?job=${name}`; - - if (stream) { - return RequestHelper.stream(this, url, options); - } - return RequestHelper.get()(this, url, options); + jobId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/jobs/${jobId}/trace`, + options, + ); } - // TODO move - downloadLatestArtifactFile( + erase( projectId: string | number, - ref: string, - jobName: string, - { stream = false, ...options }: { stream?: boolean } & BaseRequestOptions = {}, - ) { - const [pId, rId, name] = [projectId, ref, jobName].map(encodeURIComponent); - const url = `projects/${pId}/jobs/artifacts/${rId}/download?job=${name}`; - - if (stream) { - return RequestHelper.stream(this, url, options); - } - return RequestHelper.get()(this, url, options); - } - - downloadTraceFile(projectId: string | number, jobId: number, options?: Sudo) { - return RequestHelper.get()(this, endpoint`projects/${projectId}/jobs/${jobId}/trace`, options); - } - - erase(projectId: string | number, jobId: number, options?: Sudo) { + jobId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/jobs/${jobId}/erase`, @@ -149,21 +176,11 @@ export class Jobs extends BaseResource { ); } - // TODO move - eraseArtifacts(projectId: string | number, jobId: number, options?: Sudo) { - const [pId, jId] = [projectId, jobId].map(encodeURIComponent); - - return RequestHelper.del()(this, `projects/${pId}/jobs/${jId}/artifacts`, options); - } - - // TODO move - keepArtifacts(projectId: string | number, jobId: number, options?: Sudo) { - const [pId, jId] = [projectId, jobId].map(encodeURIComponent); - - return RequestHelper.post()(this, `projects/${pId}/jobs/${jId}/artifacts/keep`, options); - } - - play(projectId: string | number, jobId: number, options?: Sudo) { + play( + projectId: string | number, + jobId: number, + options?: { jobVariablesAttributes: JobVariableAttributeOption[] } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/jobs/${jobId}/play`, @@ -171,7 +188,11 @@ export class Jobs extends BaseResource { ); } - retry(projectId: string | number, jobId: number, options?: Sudo) { + retry( + projectId: string | number, + jobId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/jobs/${jobId}/retry`, @@ -179,7 +200,11 @@ export class Jobs extends BaseResource { ); } - show(projectId: string | number, jobId: number, options?: Sudo) { + show( + projectId: string | number, + jobId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/jobs/${jobId}`, @@ -187,27 +212,19 @@ export class Jobs extends BaseResource { ); } - showPipelineJobs( - projectId: string | number, - pipelineId: number, - options?: { scope?: JobScope } & Sudo, - ) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/pipelines/${pipelineId}/jobs`, - options, - ); + showConnectedJob( + options?: Sudo & ShowExpanded, + ): Promise> { + if (!this.headers['job-token']) throw new Error('Missing required header "job-token"'); + + return RequestHelper.get()(this, 'job', options); } - showPipelineBridges( - projectId: string | number, - pipelineId: number, - options?: { scope?: JobScope } & Sudo, - ) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/pipelines/${pipelineId}/bridges`, - options, - ); + showConnectedJobK8Agents( + options?: Sudo & ShowExpanded, + ): Promise> { + if (!this.headers['job-token']) throw new Error('Missing required header "job-token"'); + + return RequestHelper.get()(this, 'job/allowed_agents', options); } } diff --git a/packages/core/src/resources/Keys.ts b/packages/core/src/resources/Keys.ts index f8767436d..0a12d4bc9 100644 --- a/packages/core/src/resources/Keys.ts +++ b/packages/core/src/resources/Keys.ts @@ -1,6 +1,16 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { UserExtendedSchema } from './Users'; -import { endpoint, RequestHelper, Sudo } from '../infrastructure'; +import { RequestHelper } from '../infrastructure'; +import type { Either, GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; +import type { ExpandedUserSchema } from './Users'; + +export interface DeployKeyProjectsSchema extends Record { + id: number; + deploy_key_id: number; + project_id: number; + created_at: string; + updated_at: string; + can_push: boolean; +} export interface KeySchema extends Record { id: number; @@ -8,11 +18,29 @@ export interface KeySchema extends Record { key: string; created_at: string; expires_at: string; - user: UserExtendedSchema; + usage_type?: string; + user: ExpandedUserSchema; + deploy_keys_projects?: DeployKeyProjectsSchema[]; } export class Keys extends BaseResource { - show(keyId: string, options?: Sudo) { - return RequestHelper.get()(this, endpoint`keys/${keyId}`, options); + show({ + keyId, + fingerprint, + ...options + }: Either<{ keyId: number }, { fingerprint: string }> & Sudo & ShowExpanded): Promise< + GitlabAPIResponse + > { + let url: string; + + if (keyId) url = `keys/${keyId}`; + else if (fingerprint) url = `keys?fingerprint=${fingerprint}`; + else { + throw new Error( + 'Missing required argument. Please supply a fingerprint or a keyId in the options parameter', + ); + } + + return RequestHelper.get()(this, url, { ...options }); } } diff --git a/packages/core/src/resources/Labels.ts b/packages/core/src/resources/Labels.ts deleted file mode 100644 index ba2e10ef1..000000000 --- a/packages/core/src/resources/Labels.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - PaginatedRequestOptions, - CamelizedRecord, - Sudo, -} from '../infrastructure'; -import { ResourceLabels } from '../templates'; -import { LabelSchema } from '../templates/types'; - -export interface Labels extends ResourceLabels { - all( - projectId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; - - create( - projectId: string | number, - labelName: string, - color: string, - options?: BaseRequestOptions, - ): Promise>; - - edit( - projectId: string | number, - labelId: number | string, - options?: BaseRequestOptions, - ): Promise>; - - remove(projectId: string | number, labelId: number | string, options?: Sudo): Promise; - - subscribe( - projectId: string | number, - labelId: number | string, - options?: Sudo, - ): Promise>; - - unsubscribe( - projectId: string | number, - labelId: number | string, - options?: Sudo, - ): Promise>; -} - -export class Labels extends ResourceLabels { - constructor(options: BaseResourceOptions) { - /* istanbul ignore next */ - super('projects', options); - } -} diff --git a/packages/core/src/resources/License.ts b/packages/core/src/resources/License.ts index e555dd21e..0434e0046 100644 --- a/packages/core/src/resources/License.ts +++ b/packages/core/src/resources/License.ts @@ -1,5 +1,12 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { RequestHelper, Sudo } from '../infrastructure'; +import { RequestHelper } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface LicenseSchema extends Record { id: number; @@ -23,19 +30,43 @@ export interface LicenseSchema extends Record { } export class License extends BaseResource { - add(license: string, options?: Sudo) { - return RequestHelper.post()(this, 'license', { license, ...options }); + add( + license: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, 'license', { + searchParams: { license }, + ...options, + }); } - all(options?: Sudo) { + all( + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { return RequestHelper.get()(this, 'licenses', options); } - show(options?: Sudo) { + show( + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()(this, 'license', options); } - remove(licenceId: number, options?: Sudo) { + remove( + licenceId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()(this, `license/${licenceId}`, options); } + + recalculateBillableUsers( + licenceId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put<{ success: boolean }>()( + this, + `license/${licenceId}/refresh_billable_users`, + options, + ); + } } diff --git a/packages/core/src/resources/LicenseTemplates.ts b/packages/core/src/resources/LicenseTemplates.ts index b2d63b514..70f3d31d6 100644 --- a/packages/core/src/resources/LicenseTemplates.ts +++ b/packages/core/src/resources/LicenseTemplates.ts @@ -1,6 +1,12 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceTemplates } from '../templates'; -import { PaginatedRequestOptions, Sudo, CamelizedRecord } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface LicenseTemplateSchema extends Record { key: string; @@ -17,8 +23,14 @@ export interface LicenseTemplateSchema extends Record { } export interface LicenseTemplates extends ResourceTemplates { - all(options?: PaginatedRequestOptions): Promise[]>; - show(key: string | number, options?: Sudo): Promise>; + all( + options?: { popular?: boolean } & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; + + show( + key: string | number, + options?: { project?: string; fullName?: string } & Sudo & ShowExpanded, + ): Promise>; } export class LicenseTemplates extends ResourceTemplates { diff --git a/packages/core/src/resources/LinkedEpics.ts b/packages/core/src/resources/LinkedEpics.ts new file mode 100644 index 000000000..6977c1fdc --- /dev/null +++ b/packages/core/src/resources/LinkedEpics.ts @@ -0,0 +1,75 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import { EpicSchema } from './Epics'; + +export interface RelatedEpicSchema extends EpicSchema { + related_epic_link_id: number; +} + +export interface RelatedEpicLinkSchema extends Record { + source_epic: RelatedEpicSchema; + target_epic: RelatedEpicSchema; +} + +export type RelatedEpicLinkType = 'relates_to' | 'blocks' | 'is_blocked_by'; + +export class LinkedEpics extends BaseResource { + all( + groupId: string | number, + epicIId: number, + options?: { + createdAfter?: string; + createdBefore?: string; + updatedAfter?: string; + updatedBefore?: string; + } & Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`groups/${groupId}/epics/${epicIId}/related_epics`, + options, + ); + } + + create( + groupId: string | number, + epicIId: number, + targetEpicIId: string | number, + targetGroupId: string | number, + options?: { linkType?: RelatedEpicLinkType } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`groups/${groupId}/epics/${epicIId}/related_epics`, + { + searchParams: { + targetGroupId, + targetEpicIId, + }, + ...options, + }, + ); + } + + remove( + groupId: string | number, + epicIId: number, + relatedEpicLinkId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`groups/${groupId}/epics/${epicIId}/related_epics/${relatedEpicLinkId}`, + options, + ); + } +} diff --git a/packages/core/src/resources/Lint.ts b/packages/core/src/resources/Lint.ts index c99706f3a..6486c80a0 100644 --- a/packages/core/src/resources/Lint.ts +++ b/packages/core/src/resources/Lint.ts @@ -1,5 +1,6 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { BaseRequestOptions, RequestHelper } from '../infrastructure'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; export interface LintSchema extends Record { status: string; @@ -13,20 +14,49 @@ export interface ContextualLintSchema extends Omit { } export class Lint extends BaseResource { - lint(content: string, options?: BaseRequestOptions) { - // Perform CI file linting without context. - // See https://docs.gitlab.com/ee/api/lint.html#validate-the-ci-yaml-configuration - // This API doesn't work for CI files that contain `local` includes. Use `lintWithNamespace` instead. - return RequestHelper.post()(this, 'ci/lint', { content, ...options }); + check( + projectId: string | number, + options: { ref?: string; includeJobs?: boolean; dryRun?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/ci/lint`, + options, + ); } - // TODO: Figure out a better way of writing this to not be limited by the typing. - lintWithNamespace(projectId: string | number, content: string, options?: BaseRequestOptions) { - // Perform CI file linting in the context of a specific project namespace. - // See https://docs.gitlab.com/ee/api/lint.html#validate-a-ci-yaml-configuration-with-a-namespace - // This API is useful when the CI file being linted has `local` includes, which requires project - // context to be understood. - return RequestHelper.post()(this, `projects/${projectId}/ci/lint`, { + lint( + content: string, + options?: { includeJobs?: boolean; includeMergedYaml?: boolean } & Sudo & ShowExpanded, + ): Promise>; + + lint( + content: string, + options?: { + projectId: string | number; + ref?: string; + includeJobs?: boolean; + dryRun?: boolean; + } & Sudo & + ShowExpanded, + ): Promise>; + + lint( + content: string, + { + projectId, + ...options + }: { + projectId?: string | number; + ref?: string; + includeJobs?: boolean; + dryRun?: boolean; + } & Sudo & + ShowExpanded = {} as any, + ): Promise> { + const prefix = projectId ? endpoint`projects/${projectId}/` : ''; + + return RequestHelper.post()(this, `${prefix}ci/lint`, { content, ...options, }); diff --git a/packages/core/src/resources/Markdown.ts b/packages/core/src/resources/Markdown.ts index 8f6c55bad..0e113a26d 100644 --- a/packages/core/src/resources/Markdown.ts +++ b/packages/core/src/resources/Markdown.ts @@ -1,12 +1,16 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { RequestHelper, Sudo } from '../infrastructure'; +import { RequestHelper } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; export interface MarkdownSchema extends Record { html: string; } export class Markdown extends BaseResource { - render(text: string, options?: { gfm?: string; project?: string | number } & Sudo) { + render( + text: string, + options?: { gfm?: string; project?: string | number } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()(this, 'markdown', { text, ...options }); } } diff --git a/packages/core/src/resources/Maven.ts b/packages/core/src/resources/Maven.ts new file mode 100644 index 000000000..a3ac4b5bf --- /dev/null +++ b/packages/core/src/resources/Maven.ts @@ -0,0 +1,40 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { EitherOrNone, GitlabAPIResponse, ShowExpanded } from '../infrastructure'; + +export class Maven extends BaseResource { + downloadPackageFile( + path: string, + filename: string, + { + projectId, + groupId, + ...options + }: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & ShowExpanded, + ): Promise> { + let url = endpoint`packages/maven/${path}/${filename}`; + + if (projectId) url = endpoint`projects/${projectId}/${url}`; + else if (groupId) url = endpoint`groups/${groupId}/-/${url}`; + + return RequestHelper.get()(this, url, options as ShowExpanded); + } + + uploadPackageFile( + projectId: string | number, + content: Blob, + path: string, + filename: string, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`projects/${projectId}/packages/maven/${path}/${filename}`, + { + isForm: true, + ...options, + file: [content, filename], + }, + ); + } +} diff --git a/packages/core/src/resources/MergeRequestApprovals.ts b/packages/core/src/resources/MergeRequestApprovals.ts index 0636e3208..9ace2b5fb 100644 --- a/packages/core/src/resources/MergeRequestApprovals.ts +++ b/packages/core/src/resources/MergeRequestApprovals.ts @@ -1,8 +1,9 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { BaseRequestOptions, endpoint, RequestHelper, Sudo } from '../infrastructure'; -import { UserSchema } from './Users'; -import { GroupSchema } from './Groups'; -import { ProtectedBranchSchema } from './ProtectedBranches'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; +import type { UserSchema } from './Users'; +import type { GroupSchema } from './Groups'; +import type { ProtectedBranchSchema } from './ProtectedBranches'; export interface ProjectLevelMergeRequestApprovalSchema extends Record { approvals_before_merge: number; @@ -14,7 +15,7 @@ export interface ProjectLevelMergeRequestApprovalSchema extends Record; + user: Omit; } export interface MergeRequestLevelMergeRequestApprovalSchema extends Record { @@ -32,22 +33,13 @@ export interface MergeRequestLevelMergeRequestApprovalSchema extends Record { id: number; name: string; rule_type: string; - eligible_approvers?: Pick< - UserSchema, - 'name' | 'username' | 'id' | 'state' | 'avatar_url' | 'web_url' - >[]; + eligible_approvers?: Omit[]; approvals_required: number; - users?: Pick[]; + users?: Omit[]; groups?: GroupSchema[]; contains_hidden_groups: boolean; overridden: boolean; @@ -61,217 +53,271 @@ export interface MergeRequestLevelApprovalRuleSchema extends ApprovalRuleSchema source_rule?: string; } -export class MergeRequestApprovals extends BaseResource { - configuration( - projectId: string | number, - options?: { mergerequestIid?: undefined } & BaseRequestOptions, - ): Promise; - - configuration( - projectId: string | number, - options: { mergerequestIid: number } & BaseRequestOptions, - ): Promise; +export interface ApprovalStateSchema extends Record { + approval_rules_overwritten: boolean; + rules: ({ approved: boolean } & MergeRequestLevelApprovalRuleSchema)[]; +} - configuration( - projectId: string | number, - { mergerequestIid, ...options }: { mergerequestIid?: number } & BaseRequestOptions = {}, - ) { - let url: string; +export type CreateApprovalRuleOptions = { + userIds?: number[]; + groupIds?: number[]; + protectedBranchIds?: number[]; + appliesToAllProtectedBranches?: boolean; + reportType?: string; + ruleType?: string; + usernames?: string[]; +}; - if (mergerequestIid) { - url = endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/approvals`; - } else { - url = endpoint`projects/${projectId}/approvals`; - } +export type EditApprovalRuleOptions = { + userIds?: number[]; + groupIds?: number[]; + protectedBranchIds?: number[]; + appliesToAllProtectedBranches?: boolean; + usernames?: string[]; + removeHiddenGroups?: boolean; +}; - return RequestHelper.get()(this, url, options); - } +export type EditConfigurationOptions = { + disableOverridingApproversPerMergeRequest?: boolean; + mergeRequestsAuthorApproval?: boolean; + mergeRequestsDisableCommittersApproval?: boolean; + requirePasswordToApprove?: boolean; + resetApprovalsOnPush?: boolean; + selectiveCodeOwnerRemovals?: boolean; +}; - editConfiguration( +export class MergeRequestApprovals extends BaseResource { + allApprovalRules( projectId: string | number, - options?: { mergerequestIid?: undefined } & BaseRequestOptions, - ): Promise; + options: { mergerequestIId: number } & Sudo & ShowExpanded, + ): Promise>; - editConfiguration( + allApprovalRules( projectId: string | number, - options: { mergerequestIid: number } & BaseRequestOptions, - ): Promise; + options?: Sudo & ShowExpanded, + ): Promise>; - editConfiguration( + allApprovalRules( projectId: string | number, - { mergerequestIid, ...options }: { mergerequestIid?: number } & BaseRequestOptions = {}, - ) { + { mergerequestIId, ...options }: { mergerequestIId?: number } & Sudo & ShowExpanded = {}, + ): Promise< + GitlabAPIResponse< + (ProjectLevelApprovalRuleSchema | MergeRequestLevelApprovalRuleSchema)[], + C, + E, + void + > + > { let url: string; - if (mergerequestIid) { - url = endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/approvals`; + if (mergerequestIId) { + url = endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/approval_rules`; } else { - url = endpoint`projects/${projectId}/approvals`; + url = endpoint`projects/${projectId}/approval_rules`; } - return RequestHelper.post()(this, url, options); + return RequestHelper.get< + (ProjectLevelApprovalRuleSchema | MergeRequestLevelApprovalRuleSchema)[] + >()(this, url, options); } - approvalRule(projectId: string | number, approvalRuleId: number, options: BaseRequestOptions) { - return RequestHelper.get()( + approve( + projectId: string | number, + mergerequestIId: number, + options?: { sha?: string; approvalPassword?: string } & Sudo & ShowExpanded, + ) { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/approval_rules/${approvalRuleId}`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/approve`, options, ); } - approvalRules( + createApprovalRule( projectId: string | number, - options?: { mergerequestIid?: undefined } & BaseRequestOptions, - ): Promise; + name: string, + approvalsRequired: number, + options: { mergerequestIId: number } & CreateApprovalRuleOptions & Sudo & ShowExpanded, + ): Promise>; - approvalRules( + createApprovalRule( projectId: string | number, - options: { mergerequestIid: number } & BaseRequestOptions, - ): Promise; + name: string, + approvalsRequired: number, + options?: CreateApprovalRuleOptions & Sudo & ShowExpanded, + ): Promise>; - approvalRules( + createApprovalRule( projectId: string | number, - { mergerequestIid, ...options }: { mergerequestIid?: number } & BaseRequestOptions = {}, - ): any { + name: string, + approvalsRequired: number, + { + mergerequestIId, + ...options + }: { mergerequestIId?: number } & CreateApprovalRuleOptions & Sudo & ShowExpanded = {}, + ): Promise< + GitlabAPIResponse< + ProjectLevelApprovalRuleSchema | MergeRequestLevelApprovalRuleSchema, + C, + E, + void + > + > { let url: string; - if (mergerequestIid) { - url = endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/approval_rules`; + if (mergerequestIId) { + url = endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/approval_rules`; } else { url = endpoint`projects/${projectId}/approval_rules`; } - return RequestHelper.get()(this, url, options); + return RequestHelper.post< + ProjectLevelApprovalRuleSchema | MergeRequestLevelApprovalRuleSchema + >()(this, url, { name, approvalsRequired, ...options }); } - addApprovalRule( + editApprovalRule( projectId: string | number, + approvalRuleId: number, name: string, approvalsRequired: number, - options?: { mergerequestIid?: undefined } & ApprovalRulesRequestOptions & BaseRequestOptions, - ): Promise; + options: { mergerequestIId: number } & EditApprovalRuleOptions & Sudo & ShowExpanded, + ): Promise>; - addApprovalRule( + editApprovalRule( projectId: string | number, + approvalRuleId: number, name: string, approvalsRequired: number, - options: { mergerequestIid: number } & ApprovalRulesRequestOptions & BaseRequestOptions, - ): Promise; + options?: EditApprovalRuleOptions & Sudo & ShowExpanded, + ): Promise>; - addApprovalRule( + editApprovalRule( projectId: string | number, + approvalRuleId: number, name: string, approvalsRequired: number, { - mergerequestIid, + mergerequestIId, ...options - }: { mergerequestIid?: number } & ApprovalRulesRequestOptions & BaseRequestOptions = {}, - ) { + }: { mergerequestIId?: number } & EditApprovalRuleOptions & Sudo & ShowExpanded = {}, + ): Promise< + GitlabAPIResponse< + ProjectLevelApprovalRuleSchema | MergeRequestLevelApprovalRuleSchema, + C, + E, + void + > + > { let url: string; - if (mergerequestIid) { - url = endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/approval_rules`; + if (mergerequestIId) { + url = endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/approval_rules/${approvalRuleId}`; } else { - url = endpoint`projects/${projectId}/approval_rules`; + url = endpoint`projects/${projectId}/approval_rules/${approvalRuleId}`; } - return RequestHelper.post()(this, url, { name, approvalsRequired, ...options }); + return RequestHelper.put< + ProjectLevelApprovalRuleSchema | MergeRequestLevelApprovalRuleSchema + >()(this, url, { name, approvalsRequired, ...options }); } - approvalState( + editConfiguration( projectId: string | number, - mergerequestIid: number, - options?: { sha?: string } & BaseRequestOptions, - ) { - return RequestHelper.get()( + options?: EditConfigurationOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/approval_state`, + endpoint`projects/${projectId}/approvals`, options, ); } - editApprovalRule( - projectId: string | number, - approvalRuleId: number, - name: string, - approvalsRequired: number, - options?: { mergerequestIid?: undefined } & ApprovalRulesRequestOptions & BaseRequestOptions, - ): Promise; - - editApprovalRule( - projectId: string | number, - approvalRuleId: number, - name: string, - approvalsRequired: number, - options: { mergerequestIid: number } & ApprovalRulesRequestOptions & BaseRequestOptions, - ): Promise; - - editApprovalRule( + removeApprovalRule( projectId: string | number, approvalRuleId: number, - name: string, - approvalsRequired: number, { - mergerequestIid, + mergerequestIId, ...options - }: { mergerequestIid?: number } & ApprovalRulesRequestOptions & BaseRequestOptions = {}, - ) { + }: { mergerequestIId?: number } & Sudo & ShowExpanded = {} as any, + ): Promise> { let url: string; - if (mergerequestIid) { - url = endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/approval_rules/${approvalRuleId}`; + if (mergerequestIId) { + url = endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/approval_rules/${approvalRuleId}`; } else { url = endpoint`projects/${projectId}/approval_rules/${approvalRuleId}`; } - return RequestHelper.put()(this, url, { name, approvalsRequired, ...options }); + return RequestHelper.del()(this, url, options); } - removeApprovalRule( + showApprovalRule( projectId: string | number, approvalRuleId: number, - options?: { mergerequestIid?: undefined } & Sudo, - ): Promise; + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/approval_rules/${approvalRuleId}`, + options, + ); + } - removeApprovalRule( + showApprovalState( projectId: string | number, - approvalRuleId: number, - options: { mergerequestIid: number } & Sudo, - ): Promise; + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/approval_state`, + options, + ); + } - removeApprovalRule( + showConfiguration( projectId: string | number, - approvalRuleId: number, - { mergerequestIid, ...options }: { mergerequestIid?: number } & Sudo = {}, - ) { + options: { mergerequestIId: number } & Sudo & ShowExpanded, + ): Promise>; + + showConfiguration( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; + + showConfiguration( + projectId: string | number, + { mergerequestIId, ...options }: { mergerequestIId?: number } & Sudo & ShowExpanded = {}, + ): Promise< + GitlabAPIResponse< + MergeRequestLevelMergeRequestApprovalSchema | ProjectLevelMergeRequestApprovalSchema, + C, + E, + void + > + > { let url: string; - if (mergerequestIid) { - url = endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/approval_rules/${approvalRuleId}`; + if (mergerequestIId) { + url = endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/approvals`; } else { - url = endpoint`projects/${projectId}/approval_rules/${approvalRuleId}`; + url = endpoint`projects/${projectId}/approvals`; } - return RequestHelper.del()(this, url, { ...options }); + return RequestHelper.get< + MergeRequestLevelMergeRequestApprovalSchema | ProjectLevelMergeRequestApprovalSchema + >()(this, url, options); } - approve( + unapprove( projectId: string | number, - mergerequestIid: number, - options?: { sha?: string } & BaseRequestOptions, - ) { - return RequestHelper.post()( - this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/approve`, - options, - ); - } - - unapprove(projectId: string | number, mergerequestIid: number, options?: Sudo) { + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/unapprove`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/unapprove`, options, ); } diff --git a/packages/core/src/resources/MergeRequestAwardEmojis.ts b/packages/core/src/resources/MergeRequestAwardEmojis.ts index 6e99dd334..b9e1c7e6f 100644 --- a/packages/core/src/resources/MergeRequestAwardEmojis.ts +++ b/packages/core/src/resources/MergeRequestAwardEmojis.ts @@ -1,40 +1,46 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceAwardEmojis } from '../templates'; -import { AwardEmojiSchema } from '../templates/types'; -import { PaginatedRequestOptions, Sudo, CamelizedRecord } from '../infrastructure'; +import type { AwardEmojiSchema } from '../templates/ResourceAwardEmojis'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface MergeRequestAwardEmojis extends ResourceAwardEmojis { - all( + all( projectId: string | number, mergerequestIId: number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - award( + award( projectId: string | number, mergerequestIId: number, name: string, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; - remove( + remove( projectId: string | number, mergerequestIId: number, awardId: number, - options?: Sudo, - ): Promise; + options?: Sudo & ShowExpanded, + ): Promise>; - show( + show( projectId: string | number, mergerequestIId: number, awardId: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; } export class MergeRequestAwardEmojis extends ResourceAwardEmojis { constructor(options: BaseResourceOptions) { /* istanbul ignore next */ - super('merge_requests', options); + super('projects', 'merge_requests', options); } } diff --git a/packages/core/src/resources/MergeRequestContextCommits.ts b/packages/core/src/resources/MergeRequestContextCommits.ts new file mode 100644 index 000000000..975117a45 --- /dev/null +++ b/packages/core/src/resources/MergeRequestContextCommits.ts @@ -0,0 +1,64 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface MergeRequestContextCommitSchema extends Record { + id: string; + short_id: string; + created_at: string; + parent_ids?: null; + title: string; + message: string; + author_name: string; + author_email: string; + authored_date: string; + committer_name: string; + committer_email: string; + committed_date: string; +} + +export class MergeRequestContextCommits extends BaseResource { + all( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/context_commits`, + options, + ); + } + + create( + projectId: string | number, + commits: string[], + { mergerequestIId, ...options }: { mergerequestIId?: number } & Sudo & ShowExpanded = {}, + ): Promise> { + const prefix = endpoint`projects/${projectId}/merge_requests`; + const url = mergerequestIId ? `${prefix}/${mergerequestIId}/context_commits` : prefix; + + return RequestHelper.post()(this, url, { + commits, + ...options, + }); + } + + remove( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/context_commits`, + options, + ); + } +} diff --git a/packages/core/src/resources/MergeRequestDiscussions.ts b/packages/core/src/resources/MergeRequestDiscussions.ts index 00f428fb8..49ab3b09c 100644 --- a/packages/core/src/resources/MergeRequestDiscussions.ts +++ b/packages/core/src/resources/MergeRequestDiscussions.ts @@ -1,60 +1,97 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceDiscussions } from '../templates'; -import { DiscussionSchema } from '../templates/types'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, +import type { + DiscussionNotePositionSchema, + DiscussionNoteSchema, + DiscussionSchema, +} from '../templates/ResourceDiscussions'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + Either, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - CamelizedRecord, - RequestHelper, } from '../infrastructure'; +export interface MergeRequestDiscussionNoteSchema extends DiscussionNoteSchema { + resolved_by: string; + resolved_at: string; + position?: DiscussionNotePositionSchema; +} + +export type DiscussionNotePositionOptions = DiscussionNotePositionSchema & { + line_range?: { + start?: { + line_code: string; + type: 'new' | 'old'; + }; + end?: { + line_code: string; + type: 'new' | 'old'; + }; + }; +}; + export interface MergeRequestDiscussions extends ResourceDiscussions { - addNote( + addNote( projectId: string | number, mergerequestId: string | number, - discussionId: string | number, + discussionId: string, noteId: number, body: string, - options?: BaseRequestOptions, - ): Promise>; + options?: { createdAt?: string } & Sudo & ShowExpanded, + ): Promise>; - all( + all( projectId: string | number, mergerequestId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - create( + create( projectId: string | number, mergerequestId: string | number, body: string, - options?: BaseRequestOptions, - ): Promise>; + options?: { + position?: DiscussionNotePositionOptions; + commitId?: string; + createdAt?: string; + } & Sudo & + ShowExpanded, + ): Promise>; - editNote( + editNote( projectId: string | number, mergerequestId: string | number, - discussionId: string | number, + discussionId: string, noteId: number, - options: BaseRequestOptions & ({ body: string } | { resolved: boolean }), - ): Promise>; + options: Sudo & ShowExpanded & Either<{ body: string }, { resolved: boolean }>, + ): Promise>; - removeNote( + removeNote( projectId: string | number, mergerequestId: string | number, - discussionId: string | number, + discussionId: string, noteId: number, - options?: Sudo, - ): Promise; + options?: Sudo & ShowExpanded, + ): Promise>; + + resolve( + projectId: string | number, + mergerequestId: string | number, + discussionId: string, + resolve: boolean, + options?: Sudo & ShowExpanded, + ): Promise>; - show( + show( projectId: string | number, mergerequestId: string | number, - discussionId: string | number, - options?: Sudo, - ): Promise>; + discussionId: string, + options?: Sudo & ShowExpanded, + ): Promise>; } export class MergeRequestDiscussions extends ResourceDiscussions { @@ -63,17 +100,19 @@ export class MergeRequestDiscussions extends Resource super('projects', 'merge_requests', options); } - resolve( + resolve( projectId: string | number, mergerequestId: string | number, - discussionId: string | number, + discussionId: string, resolved: boolean, - ) { - return RequestHelper.put()( + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( this, - endpoint`${projectId}/${this.resource2Type}/${mergerequestId}/discussions/${discussionId}`, + endpoint`${projectId}/merge_requests/${mergerequestId}/discussions/${discussionId}`, { - resolved, + searchParams: { resolved }, + ...options, }, ); } diff --git a/packages/core/src/resources/MergeRequestDraftNotes.ts b/packages/core/src/resources/MergeRequestDraftNotes.ts new file mode 100644 index 000000000..c32ef8211 --- /dev/null +++ b/packages/core/src/resources/MergeRequestDraftNotes.ts @@ -0,0 +1,121 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { DiscussionNotePositionTextSchema } from '../templates/ResourceDiscussions'; + +export interface MergeRequestDraftNoteSchema extends Record { + id: number; + author_id: number; + merge_request_id: number; + resolve_discussion: boolean; + discussion_id?: number; + note: string; + commit_id?: number; + line_code?: number; + position: DiscussionNotePositionTextSchema & { line_range?: number }; +} + +export class MergeRequestDraftNotes extends BaseResource { + all( + projectId: string | number, + mergerequestIId: number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/draft_notes`, + options, + ); + } + + create( + projectId: string | number, + mergerequestIId: number, + note: string, + options?: { + commitId?: string; + inReplyToDiscussionId?: number; + resolveDiscussion?: boolean; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/draft_notes`, + { + ...options, + note, + }, + ); + } + + edit( + projectId: string | number, + mergerequestIId: number, + draftNoteId: number, + options?: { note?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/draft_notes/${draftNoteId}`, + options, + ); + } + + publish( + projectId: string | number, + mergerequestIId: number, + draftNoteId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/draft_notes/${draftNoteId}/publish`, + options, + ); + } + + publishBulk( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/draft_notes/bulk_publish`, + options, + ); + } + + remove( + projectId: string | number, + mergerequestIId: number, + draftNoteId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/draft_notes/${draftNoteId}`, + options, + ); + } + + show( + projectId: string | number, + mergerequestIId: number, + draftNoteId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/draft_notes/${draftNoteId}`, + options, + ); + } +} diff --git a/packages/core/src/resources/MergeRequestLabelEvents.ts b/packages/core/src/resources/MergeRequestLabelEvents.ts new file mode 100644 index 000000000..703616dcb --- /dev/null +++ b/packages/core/src/resources/MergeRequestLabelEvents.ts @@ -0,0 +1,32 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceLabelEvents } from '../templates'; +import type { LabelEventSchema } from '../templates/ResourceLabelEvents'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface MergeRequestLabelEvents { + all( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; + + show( + projectId: string | number, + mergerequestIId: number, + labelEventId: number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class MergeRequestLabelEvents extends ResourceLabelEvents { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', 'merge_requests', options); + } +} diff --git a/packages/core/src/resources/MergeRequestMilestoneEvents.ts b/packages/core/src/resources/MergeRequestMilestoneEvents.ts new file mode 100644 index 000000000..d1ba30ea9 --- /dev/null +++ b/packages/core/src/resources/MergeRequestMilestoneEvents.ts @@ -0,0 +1,34 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceMilestoneEvents } from '../templates'; +import type { MilestoneEventSchema } from '../templates/ResourceMilestoneEvents'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface MergeRequestMilestoneEvents { + all( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; + + show( + projectId: string | number, + mergerequestIId: number, + milestoneEventId: number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class MergeRequestMilestoneEvents< + C extends boolean = false, +> extends ResourceMilestoneEvents { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', 'merge_requests', options); + } +} diff --git a/packages/core/src/resources/MergeRequestNotes.ts b/packages/core/src/resources/MergeRequestNotes.ts index f22377b69..660caae1f 100644 --- a/packages/core/src/resources/MergeRequestNotes.ts +++ b/packages/core/src/resources/MergeRequestNotes.ts @@ -1,14 +1,16 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceNotes } from '../templates'; -import { NoteSchema } from '../templates/types'; -import { - PaginatedRequestOptions, - BaseRequestOptions, +import type { NoteSchema } from '../templates/ResourceNotes'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - CamelizedRecord, } from '../infrastructure'; export interface MergeRequestNoteSchema extends NoteSchema { + confidential: boolean; attachment?: string; system: boolean; noteable_id: number; @@ -18,40 +20,44 @@ export interface MergeRequestNoteSchema extends NoteSchema { } export interface MergeRequestNotes extends ResourceNotes { - all( + all( projectId: string | number, - mergerequestId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; + mergerequestIId: number, + options?: { + sort?: 'asc' | 'desc'; + orderBy?: 'created_at' | 'updated_at'; + } & PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise>; - create( + create( projectId: string | number, - mergerequestId: string | number, + mergerequestIId: number, body: string, - options?: BaseRequestOptions, - ): Promise>; + options?: { mergeRequestDiffSha?: string; createdAt?: string } & Sudo & ShowExpanded, + ): Promise>; - edit( + edit( projectId: string | number, - mergerequestId: string | number, + mergerequestIId: number, noteId: number, - body: string, - options?: BaseRequestOptions, - ): Promise>; + options: { body: string } & Sudo & ShowExpanded, + ): Promise>; - remove( + remove( projectId: string | number, - mergerequestId: string | number, + mergerequestIId: number, noteId: number, options?: Sudo, - ): Promise; + ): Promise>; - show( + show( projectId: string | number, - mergerequestIdepicId: string | number, + mergerequestIId: number, noteId: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; } export class MergeRequestNotes extends ResourceNotes { diff --git a/packages/core/src/resources/MergeRequests.ts b/packages/core/src/resources/MergeRequests.ts index 928fd6f9e..704be9da5 100644 --- a/packages/core/src/resources/MergeRequests.ts +++ b/packages/core/src/resources/MergeRequests.ts @@ -1,112 +1,30 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { UserSchema } from './Users'; -import { PipelineSchema } from './Pipelines'; -import { IssueSchema, TimeStatsSchema } from './Issues'; -import { CommitSchema, CommitDiffSchema } from './Commits'; -import { MilestoneSchema } from '../templates/types'; -import { +import { RequestHelper, endpoint } from '../infrastructure'; +import type { BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, + Either, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; +import type { CommitDiffSchema, CommitSchema } from './Commits'; +import type { IssueSchema, TimeStatsSchema } from './Issues'; +import type { ExpandedPipelineSchema, PipelineSchema } from './Pipelines'; +import type { SimpleProjectSchema } from './Projects'; +import type { TodoSchema } from './TodoLists'; +import type { UserSchema } from './Users'; -export interface AcceptMergeRequestOptions { - mergeCommitMessage?: string; - squashCommitMessage?: string; - squash?: boolean; - shouldRemoveSourceBranch?: boolean; - mergeWhenPipelineSucceeds?: boolean; - sha?: string; -} - -export interface ShowMergeRequestOptions { - renderHtml?: boolean; - includeDivergedCommitsCount?: true; - includeRebaseInProgress?: boolean; -} - -export interface CreateMergeRequestOptions { - assigneeId?: number; - description?: string; - targetProjectId?: number; - labels?: string | Array; - milestoneId?: number; - removeSourceBranch?: boolean; - allowCollaboration?: boolean; - allowMaintainerToPush?: boolean; - squash?: boolean; -} +import type { MilestoneSchema } from '../templates/ResourceMilestones'; -export interface UpdateMergeRequestOptions { - targetBranch?: number; - title?: string; - assigneeId?: number; - reviewerId?: number; - milestoneId?: number; - labels?: string | Array; - description?: string; - stateEvent?: string; - removeSourceBranch?: boolean; - squash?: boolean; - discussionLocked?: boolean; - allowCollaboration?: boolean; - allowMaintainerToPush?: boolean; -} - -export interface AllMergeRequestsOptions { - state?: 'opened' | 'closed' | 'locked' | 'merged'; - orderBy?: 'created_at' | 'updated_at'; - sort?: 'asc' | 'desc'; - milestone?: 'None' | string; - view?: string; - labels?: string | Array; - withLabelsDetails?: boolean; - withMergeStatusRecheck?: boolean; - createdAfter?: string; - createdBefore?: string; - updatedBefore?: string; - updatedAfter?: string; - scope?: 'created_by_me' | 'assigned_to_me' | 'all'; - authorId?: number; - authorUsername?: string; - assigneeId?: number; - assigneeUsername?: string; - approverIds?: Array; - approvedByIds?: Array; - reviewerId?: number; - reviewerUsername?: string; - myReactionEmoji?: string; - sourceBranch?: string; - targetBranch?: string; - in?: string; - wip?: string; - iids?: number[]; - mergeCommitMessage?: string; - squashCommitMessage?: string; - squash?: boolean; - shouldRemoveSourceBranch?: boolean; - mergeWhenPipelineSucceeds?: boolean; - sha?: string; - search?: string; - not?: { - labels?: string | Array; - milestone?: string; - authorId?: number; - authorUsername?: string; - assigneeId?: number; - assigneeUsername?: string; - reviewerId?: number; - reviewerUsername?: string; - myReactionEmoji?: string; - }; - environment?: string; - deployedBefore?: string; - deployedAfter?: string; +// Response Schemas +export interface DiffRefsSchema { + base_sha: string; + head_sha: string; + start_sha: string; } -// Response Schemas export interface ReferenceSchema { short: string; relative: string; @@ -118,12 +36,18 @@ export interface TaskCompletionStatusSchema { completed_count: number; } -export interface RebaseSchema extends Record { - rebase_in_progress?: boolean; - merge_error?: string; +export interface MergeRequestDiffSchema extends Record { + old_path: string; + new_path: string; + a_mode: string; + b_mode: string; + new_file: boolean; + renamed_file: boolean; + deleted_file: boolean; + diff: string; } -export interface DiffSchema extends Record { +export interface MergeRequestDiffVersionsSchema extends Record { id: number; head_commit_sha: string; base_commit_sha: string; @@ -132,77 +56,205 @@ export interface DiffSchema extends Record { merge_request_id: number; state: string; real_size: string; - commits?: CommitSchema[]; - diffs?: CommitDiffSchema[]; } -export interface MergeRequestSchema extends Record { +export interface ExpandedMergeRequestDiffVersionsSchema extends Record { + id: number; + head_commit_sha: string; + base_commit_sha: string; + start_commit_sha: string; + created_at: string; + merge_request_id: number; + state: string; + real_size: string; + commits: CommitSchema[]; + diffs: CommitDiffSchema[]; +} + +export interface MergeRequestRebaseSchema extends Record { + rebase_in_progress?: boolean; + merge_error?: string; +} + +export interface CondensedMergeRequestSchema extends Record { id: number; iid: number; project_id: number; title: string; description: string; state: string; - merged_by: Omit; - merged_at: string; - closed_by?: string; - closed_at?: string; created_at: string; updated_at: string; + web_url: string; +} + +export interface MergeRequestSchema extends CondensedMergeRequestSchema { + merged_by: Omit; + merged_at: string; + closed_by?: Omit; + closed_at?: Omit; target_branch: string; source_branch: string; + user_notes_count: number; upvotes: number; downvotes: number; author: Omit; - assignee: Omit; assignees?: Omit[]; + assignee?: Omit; reviewers?: Omit[]; source_project_id: number; target_project_id: number; labels?: string[]; + draft: boolean; work_in_progress: boolean; - milestone: MilestoneSchema; + milestone?: MilestoneSchema; merge_when_pipeline_succeeds: boolean; - merge_status: string; + merge_status: + | 'unchecked' + | 'checking' + | 'can_be_merged' + | 'cannot_be_merged' + | 'cannot_be_merged_recheck'; sha: string; - merge_commit_sha?: string; + merge_commit_sha: string; squash_commit_sha?: string; - user_notes_count: number; - discussion_locked?: string; - should_remove_source_branch: boolean; + discussion_locked?: boolean; + should_remove_source_branch?: boolean; force_remove_source_branch: boolean; - web_url: string; + reference: string; references: ReferenceSchema; time_stats: TimeStatsSchema; squash: boolean; task_completion_status: TaskCompletionStatusSchema; has_conflicts: boolean; blocking_discussions_resolved: boolean; - changes?: CommitDiffSchema[]; + approvals_before_merge?: unknown; +} + +export interface ExpandedMergeRequestSchema extends MergeRequestSchema { + subscribed: boolean; + changes_count: string; + latest_build_started_at: string; + latest_build_finished_at: string; + first_deployed_to_production_at?: null; + pipeline: PipelineSchema; + head_pipeline: ExpandedPipelineSchema; + diff_refs: DiffRefsSchema; + merge_error?: null; + first_contribution: boolean; + user: { + can_merge: boolean; + }; +} + +export interface MergeRequestTodoSchema extends TodoSchema { + project: SimpleProjectSchema; + target_type: 'MergeRequest'; + target: ExpandedMergeRequestSchema; } +// Select method options +export type AllMergeRequestsOptions = { + approvedByIds?: number[]; + approverIds?: number[]; + approved?: string; + assigneeId?: number; + authorId?: number; + authorUsername?: string; + createdAfter?: string; + createdBefore?: string; + deployedAfter?: string; + deployedBefore?: string; + environment?: string; + in?: string; + labels?: string; + milestone?: string; + myReactionEmoji?: string; + not?: { + labels?: string | string[]; + milestone?: string; + authorId?: number; + authorUsername?: string; + assigneeId?: number; + assigneeUsername?: string; + reviewerId?: number; + reviewerUsername?: string; + myReactionEmoji?: string; + }; + orderBy?: 'created_at' | 'updated_at'; + reviewerId?: number | 'Any' | 'None'; + reviewerUsername?: string; + scope?: 'created_by_me' | 'assigned_to_me' | 'all'; + search?: string; + sort?: 'asc' | 'desc'; + sourceBranch?: string; + state?: 'opened' | 'closed' | 'locked' | 'merged'; + targetBranch?: string; + updatedAfter?: string; + updatedBefore?: string; + view?: string; + withLabelsDetails?: boolean; + withMergeStatusRecheck?: boolean; + wip?: string; +}; + +export type AcceptMergeRequestOptions = { + mergeCommitMessage?: string; + squashCommitMessage?: string; + squash?: boolean; + shouldRemoveSourceBranch?: boolean; + mergeWhenPipelineSucceeds?: boolean; + sha?: string; +}; + +export type CreateMergeRequestOptions = { + assigneeId?: number; + description?: string; + targetProjectId?: number; + labels?: string | Array; + milestoneId?: number; + removeSourceBranch?: boolean; + allowCollaboration?: boolean; + allowMaintainerToPush?: boolean; + squash?: boolean; +}; + +export type EditMergeRequestOptions = { + targetBranch?: number; + title?: string; + assigneeId?: number; + reviewerId?: number; + milestoneId?: number; + labels?: string | Array; + description?: string; + stateEvent?: string; + removeSourceBranch?: boolean; + squash?: boolean; + discussionLocked?: boolean; + allowCollaboration?: boolean; + allowMaintainerToPush?: boolean; +}; + +// Export API export class MergeRequests extends BaseResource { - accept( + // convenience method + accept( projectId: string | number, - mergerequestIid: number, - options?: AcceptMergeRequestOptions & BaseRequestOptions, - ) { - return RequestHelper.put()( - this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/merge`, - options, - ); + mergerequestIId: number, + options?: AcceptMergeRequestOptions & Sudo & ShowExpanded, + ): Promise> { + return this.merge(projectId, mergerequestIId, options); } - addSpentTime( + addSpentTime( projectId: string | number, - mergerequestIid: number, + mergerequestIId: number, duration: string, - options?: Sudo, - ) { + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/add_spent_time`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/add_spent_time`, { duration, ...options, @@ -210,81 +262,121 @@ export class MergeRequests extends BaseResource { ); } - addTimeEstimate( + all( + { + projectId, + groupId, + ...options + }: AllMergeRequestsOptions & + Either<{ projectId: string | number }, { groupId: string | number }> & + PaginationRequestOptions

& + BaseRequestOptions = {} as any, + ): Promise> { + let prefix = ''; + + if (projectId) { + prefix = endpoint`projects/${projectId}/`; + } else if (groupId) { + prefix = endpoint`groups/${groupId}/`; + } + + return RequestHelper.get()(this, `${prefix}merge_requests`, options); + } + + allDiffs( projectId: string | number, - mergerequestIid: number, - duration: string, - options?: Sudo, - ) { - return RequestHelper.post()( + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/time_estimate`, - { - duration, - ...options, - }, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/diffs`, + options, ); } - all({ - projectId, - groupId, - ...options - }: { projectId?: string | number; groupId?: string | number } & AllMergeRequestsOptions & - PaginatedRequestOptions = {}) { - let url: string; - - if (projectId) { - url = endpoint`projects/${projectId}/merge_requests`; - } else if (groupId) { - url = endpoint`groups/${groupId}/merge_requests`; - } else { - url = 'merge_requests'; - } + allIssuesClosed( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/closes_issues`, + options, + ); + } - return RequestHelper.get()(this, url, options); + allCommits( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/commits`, + options, + ); } - cancelOnPipelineSucess(projectId: string | number, mergerequestIid: number, options?: Sudo) { - return RequestHelper.put()( + allDiffVersions( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/cancel_merge_when_pipeline_succeeds`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/versions`, options, ); } - changes(projectId: string | number, mergerequestIid: number, options?: Sudo) { - return RequestHelper.get()( + allParticipants( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise[], C, E, void>> { + return RequestHelper.get[]>()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/changes`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/participants`, options, ); } - closesIssues(projectId: string | number, mergerequestIid: number, options?: Sudo) { - return RequestHelper.get()( + allPipelines( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise< + GitlabAPIResponse[], C, E, void> + > { + return RequestHelper.get[]>()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/closes_issues`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/pipelines`, options, ); } - commits(projectId: string | number, mergerequestIid: number, options?: Sudo) { - return RequestHelper.get()( + cancelOnPipelineSuccess( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/commits`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/cancel_merge_when_pipeline_succeeds`, options, ); } - create( + create( projectId: string | number, sourceBranch: string, targetBranch: string, title: string, - options?: CreateMergeRequestOptions & BaseRequestOptions, - ) { - return RequestHelper.post()( + options?: CreateMergeRequestOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, endpoint`projects/${projectId}/merge_requests`, { @@ -296,114 +388,192 @@ export class MergeRequests extends BaseResource { ); } - edit( + createPipeline( projectId: string | number, - mergerequestIid: number, - options?: UpdateMergeRequestOptions & BaseRequestOptions, - ) { - return RequestHelper.put()( + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/pipelines`, options, ); } - participants(projectId: string | number, mergerequestIid: number, options?: Sudo) { - return RequestHelper.get[]>()( + createTodo( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/participants`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/todo`, options, ); } - pipelines(projectId: string | number, mergerequestIid: number, options?: Sudo) { - return RequestHelper.get[]>()( + edit( + projectId: string | number, + mergerequestIId: number, + options?: EditMergeRequestOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}`, + options, + ); + } + + merge( + projectId: string | number, + mergerequestIId: number, + options?: AcceptMergeRequestOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/merge`, + options, + ); + } + + mergeToDefault( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put<{ commit_id: string }>()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/pipelines`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/merge_ref`, options, ); } - rebase(projectId: string | number, mergerequestIid: number, options?: Sudo) { - return RequestHelper.put()( + rebase( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/rebase`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/rebase`, options, ); } - remove(projectId: string | number, mergerequestIid: number, options?: Sudo) { + remove( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}`, options, ); } - resetSpentTime(projectId: string | number, mergerequestIid: number, options?: Sudo) { + resetSpentTime( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/reset_spent_time`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/reset_spent_time`, options, ); } - resetTimeEstimate(projectId: string | number, mergerequestIid: number, options?: Sudo) { + resetTimeEstimate( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/reset_time_estimate`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/reset_time_estimate`, options, ); } - show( + setTimeEstimate( projectId: string | number, - mergerequestIid: number, - options?: ShowMergeRequestOptions & BaseRequestOptions, - ) { - return RequestHelper.get()( + mergerequestIId: number, + duration: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}`, - options, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/time_estimate`, + { + duration, + ...options, + }, ); } - subscribe(projectId: string | number, mergerequestIid: number, options?: Sudo) { - return RequestHelper.post()( + show( + projectId: string | number, + mergerequestIId: number, + options?: { + renderHtml?: boolean; + includeDivergedCommitsCount?: true; + includeRebaseInProgress?: boolean; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/subscribe`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}`, options, ); } - timeStats(projectId: string | number, mergerequestIid: number, options?: Sudo) { - return RequestHelper.get()( + showDiffVersion( + projectId: string | number, + mergerequestIId: number, + versionId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/time_stats`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/versions/${versionId}`, options, ); } - version(projectId: string | number, mergerequestIid: number, versionId: number, options?: Sudo) { - return RequestHelper.get()( + showTimeStats( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/versions/${versionId}`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/time_stats`, options, ); } - versions(projectId: string | number, mergerequestIid: number, options?: Sudo) { - return RequestHelper.get()( + subscribe( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/versions`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/subscribe`, options, ); } - unsubscribe(projectId: string | number, mergerequestIid: number, options?: Sudo) { - return RequestHelper.post()( + unsubscribe( + projectId: string | number, + mergerequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/merge_requests/${mergerequestIid}/unsubscribe`, + endpoint`projects/${projectId}/merge_requests/${mergerequestIId}/unsubscribe`, options, ); } diff --git a/packages/core/src/resources/MergeTrains.ts b/packages/core/src/resources/MergeTrains.ts new file mode 100644 index 000000000..56d748d40 --- /dev/null +++ b/packages/core/src/resources/MergeTrains.ts @@ -0,0 +1,69 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + BaseRequestOptions, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { UserSchema } from './Users'; +import type { PipelineSchema } from './Pipelines'; +import type { CondensedMergeRequestSchema } from './MergeRequests'; + +export interface MergeTrainSchema extends Record { + id: number; + merge_request: CondensedMergeRequestSchema; + user: Omit; + pipeline: PipelineSchema; + created_at: string; + updated_at: string; + target_branch: string; + status: string; + merged_at: string; + duration: number; +} + +export class MergeTrains extends BaseResource { + all( + projectId: string | number, + options: { + targetBranch?: string; + scope?: 'active' | 'complete'; + sort?: 'asc' | 'desc'; + } & PaginationRequestOptions

& + BaseRequestOptions, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/merge_trains`, + options, + ); + } + + showStatus( + projectId: string | number, + mergeRequestIId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/merge_trains/merge_requests/${mergeRequestIId}`, + options, + ); + } + + addMergeRequest( + projectId: string | number, + mergeRequestIId: number, + options?: { whenPipelineSucceeds?: boolean; sha?: string; squash?: boolean } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/merge_trains/merge_requests/${mergeRequestIId}`, + options, + ); + } +} diff --git a/packages/core/src/resources/Metadata.ts b/packages/core/src/resources/Metadata.ts new file mode 100644 index 000000000..6ad3a27b2 --- /dev/null +++ b/packages/core/src/resources/Metadata.ts @@ -0,0 +1,22 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface MetadataSchema extends Record { + version: string; + revision: string; + kas: { + enabled: boolean; + externalUrl: string; + version: string; + }; + enterprise: boolean; +} + +export class Metadata extends BaseResource { + show( + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'metadata', options); + } +} diff --git a/packages/core/src/resources/Migrations.ts b/packages/core/src/resources/Migrations.ts new file mode 100644 index 000000000..870dd2d0d --- /dev/null +++ b/packages/core/src/resources/Migrations.ts @@ -0,0 +1,112 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export type MigrationStatus = 'created' | 'started' | 'finished' | 'failed'; + +export interface MigrationEntityFailure { + pipeline_class: string; + pipeline_step: string; + exception_class: string; + correlation_id_value: string; + created_at: string; +} + +export interface MigrationEntitySchema extends Record { + id: number; + bulk_import_id: number; + status: string; + source_full_path: string; + destination_name: string; + destination_namespace: string; + parent_id?: number; + namespace_id: number; + project_id?: string | number; + created_at: string; + updated_at: string; + failures?: MigrationEntityFailure[]; +} + +export interface MigrationStatusSchema extends Record { + id: number; + status: string; + source_type: string; + created_at: string; + updated_at: string; +} + +export type MigrationEntityOptions = { + sourceType: string; + sourceFullPath: string; + destinationSlug: string; + destinationNamespace: string; +}; + +export class Migrations extends BaseResource { + all( + options?: { + status?: MigrationStatus; + } & PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'bulk_imports', options); + } + + create( + configuration: { url: string; access_token: string }, + entities: MigrationEntityOptions[], + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, 'bulk_imports', { + configuration, + entities, + ...options, + }); + } + + allEntities({ + bulkImportId, + ...options + }: { + status?: MigrationStatus; + bulkImportId?: number; + } & PaginationRequestOptions<'offset'> & + Sudo & + ShowExpanded = {}): Promise> { + const url = bulkImportId + ? endpoint`bulk_imports/${bulkImportId}/entities` + : 'bulk_imports/entities'; + + return RequestHelper.get()(this, url, options); + } + + show( + bulkImportId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + `bulk_imports/${bulkImportId}`, + options, + ); + } + + showEntity( + bulkImportId: number, + entitityId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + `bulk_imports/${bulkImportId}/entities/${entitityId}`, + options, + ); + } +} diff --git a/packages/core/src/resources/NPM.ts b/packages/core/src/resources/NPM.ts new file mode 100644 index 000000000..242541fbc --- /dev/null +++ b/packages/core/src/resources/NPM.ts @@ -0,0 +1,109 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded } from '../infrastructure'; + +export interface NPMVersionSchema { + name: string; + version: string; + dist: { + shasum: string; + tarball: string; + }; +} + +export interface NPMPackageMetadataSchema extends Record { + name: string; + versions: { + [version: string]: NPMVersionSchema; + }; + 'dist-tags': { + [tag: string]: string; + }; +} + +function url(projectId?: string | number): string { + return projectId ? endpoint`/projects/${projectId}/packages/npm` : 'packages/npm'; +} + +export class NPM extends BaseResource { + downloadPackageFile( + projectId: string | number, + packageName: string, + filename: string, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/packages/npm/${packageName}/-/${filename}`, + options, + ); + } + + removeDistTag( + packageName: string, + tag: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.del()( + this, + `${prefix}/-/package/${packageName}/dist-tags/${tag}`, + options, + ); + } + + setDistTag( + packageName: string, + tag: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.put()( + this, + `${prefix}/-/package/${packageName}/dist-tags/${tag}`, + options, + ); + } + + showDistTags( + packageName: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise, C, E, void>> { + const prefix = url(options?.projectId); + + return RequestHelper.get>()( + this, + `${prefix}/-/package/${packageName}/dist-tags`, + options, + ); + } + + showMetadata( + packageName: string, + options?: { projectId?: string | number } & ShowExpanded, + ): Promise> { + const prefix = url(options?.projectId); + + return RequestHelper.get()(this, `${prefix}/${packageName}`, options); + } + + uploadPackageFile( + projectId: string | number, + packageName: string, + versions: string, + metadata: Record, + options?: ShowExpanded, + ): Promise, C, E, void>> { + return RequestHelper.put>()( + this, + endpoint`projects/${projectId}/packages/npm/${packageName}`, + { + ...options, + versions, + ...metadata, + }, + ); + } +} diff --git a/packages/core/src/resources/Namespaces.ts b/packages/core/src/resources/Namespaces.ts index fb765c480..8d8cdfbdb 100644 --- a/packages/core/src/resources/Namespaces.ts +++ b/packages/core/src/resources/Namespaces.ts @@ -1,7 +1,14 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { RequestHelper, PaginatedRequestOptions, Sudo, endpoint } from '../infrastructure'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; -export interface NamespaceSchema extends Record { +export interface CondensedNamespaceSchema extends Record { id: number; name: string; path: string; @@ -10,19 +17,40 @@ export interface NamespaceSchema extends Record { parent_id?: number; avatar_url: string; web_url: string; +} + +export interface NamespaceSchema extends CondensedNamespaceSchema { + members_count_with_descendants: number; billable_members_count: number; plan: string; trial_ends_on?: string; trial: boolean; } -// TODO: Add missing functions export class Namespaces extends BaseResource { - all(options?: PaginatedRequestOptions) { + all( + options?: { search?: string; ownedOnly?: string } & PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise> { return RequestHelper.get()(this, 'namespaces', options); } - show(namespaceId: string | number, options?: { search?: string } & Sudo) { + exists( + namespaceId: string | number, + options?: { parentId?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`namespaces/${namespaceId}/exists`, + options, + ); + } + + show( + namespaceId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()(this, endpoint`namespaces/${namespaceId}`, options); } } diff --git a/packages/core/src/resources/NotificationSettings.ts b/packages/core/src/resources/NotificationSettings.ts index d6731af33..05d4a96d3 100644 --- a/packages/core/src/resources/NotificationSettings.ts +++ b/packages/core/src/resources/NotificationSettings.ts @@ -1,12 +1,6 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, -} from '../infrastructure'; - -// TODO: Add missing functions +import { RequestHelper, endpoint } from '../infrastructure'; +import type { EitherOrNone, GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; export type NotificationSettingLevel = | 'disabled' @@ -16,57 +10,89 @@ export type NotificationSettingLevel = | 'mention' | 'custom'; +export type CustomSettingLevelEmailEvents = + | 'new_note' + | 'new_issue' + | 'reopen_issue' + | 'close_issue' + | 'reassign_issue' + | 'issue_due' + | 'new_merge_request' + | 'push_to_merge_request' + | 'reopen_merge_request' + | 'close_merge_request' + | 'reassign_merge_request' + | 'merge_merge_request' + | 'failed_pipeline' + | 'fixed_pipeline' + | 'success_pipeline' + | 'moved_project' + | 'merge_when_pipeline_succeeds' + | 'new_epic '; + export interface NotificationSettingSchema extends Record { level: NotificationSettingLevel; - notification_email: string; + notification_email?: string; } -interface ScopedURLOptions { - projectId?: string | number; - groupId?: string | number; -} +export type EditNotificationSettingsOptions = { + level?: string; + notificationEmail?: string; + newNote?: boolean; + newIssue?: boolean; + reopenIssue?: boolean; + closeIssue?: boolean; + reassignIssue?: boolean; + issueDue?: boolean; + newMergeRequest?: boolean; + pushToMergeRequest?: boolean; + reopenMergeRequest?: boolean; + closeMergeRequest?: boolean; + reassignMergeRequest?: boolean; + mergeMergeRequest?: boolean; + failedPipeline?: boolean; + fixedPipeline?: boolean; + successPipeline?: boolean; + movedProject?: boolean; + mergeWhenPipelineSucceeds?: boolean; + newEpic?: boolean; +}; -function url({ projectId, groupId }: ScopedURLOptions) { - let uri: string; +function url({ + projectId, + groupId, +}: { projectId?: string | number; groupId?: string | number } = {}): string { + let prefix = ''; - if (projectId) { - uri = endpoint`projects/${projectId}/`; - } else if (groupId) { - uri = endpoint`groups/${groupId}/`; - } else { - uri = ''; - } + if (projectId) prefix = endpoint`projects/${projectId}/`; + if (groupId) prefix = endpoint`groups/${groupId}/`; - return `${uri}notification_settings`; + return `${prefix}notification_settings`; } export class NotificationSettings extends BaseResource { - all({ - projectId, + edit({ groupId, + projectId, ...options - }: ({ projectId?: string | number } | { groupId?: string | number }) & - PaginatedRequestOptions = {}) { - return RequestHelper.get()( - this, - url({ groupId, projectId } as ScopedURLOptions), - options, - ); + }: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & + EditNotificationSettingsOptions & + Sudo & + ShowExpanded = {}): Promise> { + const uri = url({ groupId, projectId }); + + return RequestHelper.put()(this, uri, options); } - edit({ - projectId, + show({ groupId, + projectId, ...options - }: { level?: NotificationSettingLevel } & ( - | { projectId?: string | number } - | { groupId?: string | number } - ) & - BaseRequestOptions = {}) { - return RequestHelper.put()( - this, - url({ groupId, projectId } as ScopedURLOptions), - options, - ); + }: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & + Sudo & + ShowExpanded = {}): Promise> { + const uri = url({ groupId, projectId }); + + return RequestHelper.get()(this, uri, options); } } diff --git a/packages/core/src/resources/NuGet.ts b/packages/core/src/resources/NuGet.ts new file mode 100644 index 000000000..0ba61e995 --- /dev/null +++ b/packages/core/src/resources/NuGet.ts @@ -0,0 +1,210 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { Either, GitlabAPIResponse, ShowExpanded } from '../infrastructure'; + +export interface NuGetPackageIndexSchema extends Record { + versions: string[]; +} + +export interface NuGetResourceSchema extends Record { + '@id': string; + '@type': string; + comment: string; +} + +export interface NuGetServiceIndexSchema extends Record { + version: string; + resources: NuGetResourceSchema[]; +} + +export interface NuGetServiceMetadataVersionSchema extends Record { + '@id': string; + packageContent: string; + catalogEntry: { + '@id': string; + authors: string; + dependencyGroups: unknown[]; + id: string; + version: string; + tags: string; + packageContent: string; + summary: string; + }; +} + +export interface NuGetServiceMetadataItemSchema extends Record { + '@id': string; + lower: string; + upper: string; + count: number; + items: NuGetServiceMetadataVersionSchema; +} + +export interface NuGetServiceMetadataSchema extends Record { + count: number; + items: NuGetServiceMetadataItemSchema[]; + resources: NuGetResourceSchema[]; +} + +export interface NuGetSearchResultSchema extends Record { + '@type': string; + authors: string; + id: string; + title: string; + version: string; + verified: boolean; + summary: string; + totalDownloads: number; + versions: { + '@id': string; + version: string; + download: number; + }[]; +} + +export interface NuGetSearchResultsSchema extends Record { + totalHits: number; + data: NuGetSearchResultSchema[]; +} + +function url({ + projectId, + groupId, +}: { projectId?: string | number; groupId?: string | number } = {}): string { + if (projectId) return endpoint`/projects/${projectId}/packages/nuget`; + if (groupId) return endpoint`/groups/${groupId}/-/packages/nuget`; + + throw new Error( + 'Missing required argument. Please supply a projectId or a groupId in the options parameter', + ); +} + +export class NuGet extends BaseResource { + downloadPackageFile( + projectId: string | number, + packageName: string, + packageVersion: string, + filename: string, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/packages/nuget/download/${packageName}/${packageVersion}/${filename}`, + options, + ); + } + + search( + q: string, + { + projectId, + groupId, + ...options + }: Either<{ projectId: string | number }, { groupId: string | number }> & { + skip?: number; + take?: number; + prerelease?: boolean; + } & ShowExpanded, + ): Promise> { + const uri = url({ projectId, groupId }); + return RequestHelper.get()(this, `${uri}/query`, { q, ...options }); + } + + showMetadata( + packageName: string, + { + projectId, + groupId, + ...options + }: Either<{ projectId: string | number }, { groupId: string | number }> & ShowExpanded, + ): Promise> { + const uri = url({ projectId, groupId }); + + return RequestHelper.get()( + this, + `${uri}/metadata/${packageName}/index`, + options as ShowExpanded, + ); + } + + showPackageIndex( + projectId: string | number, + packageName: string, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/packages/nuget/download/${packageName}/index`, + options, + ); + } + + showServiceIndex({ + projectId, + groupId, + ...options + }: Either<{ projectId: string | number }, { groupId: string | number }> & + ShowExpanded): Promise> { + const uri = url({ projectId, groupId }); + + return RequestHelper.get()( + this, + `${uri}/index`, + options as ShowExpanded, + ); + } + + showVersionMetadata( + packageName: string, + packageVersion: string, + { + projectId, + groupId, + ...options + }: Either<{ projectId: string | number }, { groupId: string | number }> & ShowExpanded, + ): Promise> { + const uri = url({ projectId, groupId }); + + return RequestHelper.get()( + this, + `${uri}/metadata/${packageName}/${packageVersion}`, + options as ShowExpanded, + ); + } + + uploadPackageFile( + projectId: string | number, + packageName: string, + packageVersion: string, + packageFile: { content: Blob; filename: string }, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.put()(this, endpoint`projects/${projectId}/packages/nuget`, { + isForm: true, + ...options, + packageName, + packageVersion, + file: [packageFile.content, packageFile.filename], + }); + } + + uploadSymbolPackage( + projectId: string | number, + packageName: string, + packageVersion: string, + packageFile: { content: Blob; filename: string }, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`projects/${projectId}/packages/nuget/symbolpackage`, + { + isForm: true, + ...options, + packageName, + packageVersion, + file: [packageFile.content, packageFile.filename], + }, + ); + } +} diff --git a/packages/core/src/resources/PackageRegistry.ts b/packages/core/src/resources/PackageRegistry.ts index 1900b4f56..07b1186be 100644 --- a/packages/core/src/resources/PackageRegistry.ts +++ b/packages/core/src/resources/PackageRegistry.ts @@ -1,44 +1,85 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import * as Mime from 'mime/lite'; -import { RequestHelper, Sudo } from '../infrastructure'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface PackageRegistrySchema extends Record { + id: number; + package_id: number; + created_at: string; + updated_at: string; + size: number; + file_store: number; + file_md5?: string; + file_sha1?: string; + file_name: string; + file: { + url: string; + }; + file_sha256: string; + verification_retry_at?: string; + verified_at?: string; + verification_failure?: string; + verification_retry_count?: string; + verification_checksum?: string; + verification_state: number; + verification_started_at?: string; + new_file_path?: string; +} export class PackageRegistry extends BaseResource { - publish( + publish( projectId: string | number, packageName: string, packageVersion: string, - filename: string, - content: string, - { contentType, ...options }: { contentType?: string } & { status?: 'default' | 'hidden' } = {}, - ) { - const pId = encodeURIComponent(projectId); - const meta = { filename, contentType }; + packageFile: { content: Blob; filename: string }, + options: { + select: 'package_file'; + contentType?: string; + status?: 'default' | 'hidden'; + } & Sudo & + ShowExpanded, + ): Promise>; - if (!meta.contentType) meta.contentType = Mime.getType(meta.filename) || undefined; + publish( + projectId: string | number, + packageName: string, + packageVersion: string, + packageFile: { content: Blob; filename: string }, + options?: { contentType?: string; status?: 'default' | 'hidden' } & Sudo & ShowExpanded, + ): Promise>; - return RequestHelper.put<{ message: string }>()( + publish( + projectId: string | number, + packageName: string, + packageVersion: string, + packageFile: { content: Blob; filename: string }, + { + contentType, + ...options + }: { contentType?: string; status?: 'default' | 'hidden'; select?: 'package_file' } & Sudo & + ShowExpanded = {} as { contentType?: string }, + ): Promise { + return RequestHelper.put()( this, - `projects/${pId}/packages/generic/${packageName}/${packageVersion}/${filename}`, + endpoint`projects/${projectId}/packages/generic/${packageName}/${packageVersion}/${packageFile.filename}`, { isForm: true, - file: [content, meta], + file: [packageFile.content, packageFile.filename], ...options, }, ); } - download( + download( projectId: string | number, packageName: string, packageVersion: string, filename: string, - options?: Sudo, + options?: Sudo & ShowExpanded, ) { - const pId = encodeURIComponent(projectId); - return RequestHelper.get<{ message: string }>()( this, - `projects/${pId}/packages/generic/${packageName}/${packageVersion}/${filename}`, + endpoint`projects/${projectId}/packages/generic/${packageName}/${packageVersion}/${filename}`, options, ); } diff --git a/packages/core/src/resources/Packages.ts b/packages/core/src/resources/Packages.ts index 6b49c90d6..2f2b88980 100644 --- a/packages/core/src/resources/Packages.ts +++ b/packages/core/src/resources/Packages.ts @@ -1,6 +1,14 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { PipelineSchema } from './Pipelines'; -import { endpoint, PaginatedRequestOptions, RequestHelper, Sudo } from '../infrastructure'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + Either, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { PipelineSchema } from './Pipelines'; export interface PackageSchema extends Record { id: number; @@ -10,6 +18,12 @@ export interface PackageSchema extends Record { created_at: string; } +export interface ExpandedPackageSchema extends PackageSchema { + _links: Record; + pipelines: PipelineSchema[]; + versions: Omit; +} + export interface PackageFileSchema extends Record { id: number; package_id: number; @@ -21,53 +35,86 @@ export interface PackageFileSchema extends Record { pipelines?: PipelineSchema[]; } +export type AllPackageOptions = { + excludeSubgroups?: boolean; + orderBy?: 'created_at' | 'name' | 'version' | 'type' | 'project_path'; + sort?: 'asc' | 'desc'; + packageType?: 'conan' | 'maven' | 'npm' | 'pypi' | 'composer' | 'nuget' | 'helm' | 'golang'; + packageName?: string; + includeVersionless?: boolean; + status?: 'default' | 'hidden' | 'processing' | 'error' | 'pending_destruction'; +}; + export class Packages extends BaseResource { - all({ - projectId, - groupId, - ...options - }: { projectId?: string | number; groupId?: string | number } & PaginatedRequestOptions = {}) { + all( + { + projectId, + groupId, + ...options + }: Either<{ projectId: string | number }, { groupId: string | number }> & + AllPackageOptions & + Sudo & + ShowExpanded & + PaginationRequestOptions

= {} as any, + ): Promise> { let url: string; - if (projectId) { - url = endpoint`projects/${projectId}/packages`; - } else if (groupId) { - url = endpoint`groups/${groupId}/packages`; - } else { - throw new Error('projectId or groupId must be passed'); + if (projectId) url = endpoint`projects/${projectId}/packages`; + else if (groupId) url = endpoint`groups/${groupId}/packages`; + else { + throw new Error( + 'Missing required argument. Please supply a projectId or a groupId in the options parameter.', + ); } - return RequestHelper.get()(this, url, options); + return RequestHelper.get()(this, url, options as Sudo & ShowExpanded); } - remove(projectId: string | number, packageId: number, options?: Sudo) { - return RequestHelper.del()( + allFiles( + projectId: string | number, + packageId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/packages/${packageId}`, + endpoint`projects/${projectId}/packages/${packageId}/package_files`, options, ); } - removeFile(projectId: string | number, packageId: number, projectFileId: number, options?: Sudo) { + remove( + projectId: string | number, + packageId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, - endpoint`projects/${projectId}/packages/${packageId}/package_files/${projectFileId}`, + endpoint`projects/${projectId}/packages/${packageId}`, options, ); } - show(projectId: string | number, packageId: number, options?: Sudo) { - return RequestHelper.get()( + removeFile( + projectId: string | number, + packageId: number, + projectFileId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( this, - endpoint`projects/${projectId}/packages/${packageId}`, + endpoint`projects/${projectId}/packages/${packageId}/package_files/${projectFileId}`, options, ); } - showFiles(projectId: string | number, packageId: number, options?: Sudo) { - return RequestHelper.get()( + show( + projectId: string | number, + packageId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/packages/${packageId}/package_files`, + endpoint`projects/${projectId}/packages/${packageId}`, options, ); } diff --git a/packages/core/src/resources/PagesDomains.ts b/packages/core/src/resources/PagesDomains.ts index e9eb82f80..e36196bbb 100644 --- a/packages/core/src/resources/PagesDomains.ts +++ b/packages/core/src/resources/PagesDomains.ts @@ -1,33 +1,38 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, - Sudo, -} from '../infrastructure'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; export interface PagesDomainSchema extends Record { domain: string; url: string; project_id: number; - auto_ssl_enabled: boolean; - certificate: { + auto_ssl_enabled?: boolean; + certificate?: { expired: boolean; expiration: string; + certificate: string; + certificate_text: string; }; } -// TODO: Add missing functions - export class PagesDomains extends BaseResource { - all({ projectId, ...options }: { projectId?: string | number } & PaginatedRequestOptions = {}) { - const url = projectId ? endpoint`projects/${projectId}/` : ''; + all({ + projectId, + ...options + }: { projectId?: string | number } & Sudo & ShowExpanded = {}): Promise< + GitlabAPIResponse + > { + const prefix = projectId ? endpoint`projects/${projectId}/` : ''; - return RequestHelper.get()(this, `${url}pages/domains`, options); + return RequestHelper.get()(this, `${prefix}pages/domains`, options); } - create(projectId: string | number, domain: string, options?: BaseRequestOptions) { + create( + projectId: string | number, + domain: string, + options?: { autoSslEnabled?: string; certificate?: string; key?: string } & Sudo & + ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/pages/domains`, @@ -38,7 +43,12 @@ export class PagesDomains extends BaseResource { ); } - edit(projectId: string | number, domain: string, options?: BaseRequestOptions) { + edit( + projectId: string | number, + domain: string, + options?: { autoSslEnabled?: string; certificate?: string; key?: string } & Sudo & + ShowExpanded, + ): Promise> { return RequestHelper.put()( this, endpoint`projects/${projectId}/pages/domains/${domain}`, @@ -46,7 +56,12 @@ export class PagesDomains extends BaseResource { ); } - show(projectId: string | number, domain: string, options?: Sudo) { + show( + projectId: string | number, + domain: string, + options?: { autoSslEnabled?: string; certificate?: string; key?: string } & Sudo & + ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/pages/domains/${domain}`, @@ -54,7 +69,11 @@ export class PagesDomains extends BaseResource { ); } - remove(projectId: string | number, domain: string, options?: Sudo) { + remove( + projectId: string | number, + domain: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, endpoint`projects/${projectId}/pages/domains/${domain}`, diff --git a/packages/core/src/resources/PersonalAccessTokens.ts b/packages/core/src/resources/PersonalAccessTokens.ts new file mode 100644 index 000000000..d60148464 --- /dev/null +++ b/packages/core/src/resources/PersonalAccessTokens.ts @@ -0,0 +1,95 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface PersonalAccessTokenSchema extends Record { + id: number; + name: string; + revoked: boolean; + created_at: string; + scopes?: string[]; + user_id: number; + last_used_at: string; + active: boolean; + expires_at?: string; +} + +export type PersonalAccessTokenScopes = + | 'api' + | 'read_user' + | 'read_api' + | 'read_repository' + | 'write_repository'; + +export type AllPersonalAccessTokenOptions = { + userId?: string | number; + state?: 'active' | 'inactive'; + search?: string; + revoked?: boolean; + lastUsedBefore?: string; + lastUsedAfter?: string; + createdBefore?: string; + createdAfter?: string; +}; + +export class PersonalAccessTokens extends BaseResource { + all( + options?: AllPersonalAccessTokenOptions & Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + 'personal_access_tokens', + options, + ); + } + + // Convience method - Also located in Users + create( + userId: number, + name: string, + scopes: string[], + options?: { expiresAt?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`users/${userId}/personal_access_tokens`, + { + name, + scopes, + ...options, + }, + ); + } + + remove({ + tokenId, + ...options + }: { tokenId?: string | number } & Sudo & ShowExpanded = {}): Promise< + GitlabAPIResponse + > { + const url = tokenId + ? endpoint`personal_access_tokens/${tokenId}` + : 'personal_access_tokens/self'; + + return RequestHelper.del()(this, url, options); + } + + show({ + tokenId, + ...options + }: { tokenId?: string | number } & Sudo & ShowExpanded = {}): Promise< + GitlabAPIResponse + > { + const url = tokenId + ? endpoint`personal_access_tokens/${tokenId}` + : 'personal_access_tokens/self'; + + return RequestHelper.get()(this, url, options); + } +} diff --git a/packages/core/src/resources/PipelineScheduleVariables.ts b/packages/core/src/resources/PipelineScheduleVariables.ts index a0dcab3fa..a89c05fe3 100644 --- a/packages/core/src/resources/PipelineScheduleVariables.ts +++ b/packages/core/src/resources/PipelineScheduleVariables.ts @@ -1,14 +1,25 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { PipelineVariableSchema } from './Pipelines'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, } from '../infrastructure'; +export interface PipelineVariableSchema extends Record { + key: string; + variable_type?: string; + value: string; +} + export class PipelineScheduleVariables extends BaseResource { - all(projectId: string | number, pipelineScheduleId: number, options?: PaginatedRequestOptions) { + all( + projectId: string | number, + pipelineScheduleId: number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/pipeline_schedules/${pipelineScheduleId}/variables`, @@ -16,49 +27,50 @@ export class PipelineScheduleVariables extends BaseRe ); } - create(projectId: string | number, pipelineScheduleId: number, options?: BaseRequestOptions) { + create( + projectId: string | number, + pipelineScheduleId: number, + key: string, + value: string, + options?: { variableType?: 'env_var' | 'file' } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/pipeline_schedules/${pipelineScheduleId}/variables`, - options, + { + ...options, + key, + value, + }, ); } - edit( + edit( projectId: string | number, pipelineScheduleId: number, - keyId: string, - options?: BaseRequestOptions, - ) { + key: string, + value: string, + options?: { variableType?: 'env_var' | 'file' } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.put()( this, - endpoint`projects/${projectId}/pipeline_schedules/${pipelineScheduleId}/variables/${keyId}`, - options, - ); - } - - show( - projectId: string | number, - pipelineScheduleId: number, - keyId: string, - options?: BaseRequestOptions, - ) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/pipeline_schedules/${pipelineScheduleId}/variables/${keyId}`, - options, + endpoint`projects/${projectId}/pipeline_schedules/${pipelineScheduleId}/variables/${key}`, + { + ...options, + value, + }, ); } - remove( + remove( projectId: string | number, pipelineScheduleId: number, - keyId: string, - options?: BaseRequestOptions, - ) { - return RequestHelper.del()( + key: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( this, - endpoint`projects/${projectId}/pipeline_schedules/${pipelineScheduleId}/variables/${keyId}`, + endpoint`projects/${projectId}/pipeline_schedules/${pipelineScheduleId}/variables/${key}`, options, ); } diff --git a/packages/core/src/resources/PipelineSchedules.ts b/packages/core/src/resources/PipelineSchedules.ts index 7440219f7..f1bc2a717 100644 --- a/packages/core/src/resources/PipelineSchedules.ts +++ b/packages/core/src/resources/PipelineSchedules.ts @@ -1,15 +1,17 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { UserSchema } from './Users'; -import { PipelineSchema, PipelineVariableSchema } from './Pipelines'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; +import type { UserSchema } from './Users'; +import type { PipelineSchema } from './Pipelines'; +import type { PipelineVariableSchema } from './PipelineScheduleVariables'; -export interface PipelineScheduleSchema extends Record { +export interface CondensedPipelineScheduleSchema extends Record { id: number; description: string; ref: string; @@ -19,30 +21,52 @@ export interface PipelineScheduleSchema extends Record { active: boolean; created_at: string; updated_at: string; - owner: Pick; + owner: Omit; } -export interface PipelineScheduleExtendedSchema extends PipelineScheduleSchema { +export interface PipelineScheduleSchema extends CondensedPipelineScheduleSchema { last_pipeline: Pick; } +export interface ExpandedPipelineScheduleSchema extends PipelineScheduleSchema { + last_pipeline: Pick; + variables: PipelineVariableSchema[]; +} + export class PipelineSchedules extends BaseResource { - all(projectId: string | number, options?: PaginatedRequestOptions) { - return RequestHelper.get()( + all( + projectId: string | number, + options?: { scope?: 'active' | 'inactive' } & Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( this, endpoint`projects/${projectId}/pipeline_schedules`, options, ); } - create( + allTriggeredPipelines( + projectId: string | number, + pipelineScheduleId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/pipeline_schedules/${pipelineScheduleId}/pipelines`, + options, + ); + } + + create( projectId: string | number, description: string, ref: string, cron: string, - options?: BaseRequestOptions, - ) { - return RequestHelper.post()( + options?: { cronTimezone?: string; active?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, endpoint`projects/${projectId}/pipeline_schedules`, { @@ -54,34 +78,69 @@ export class PipelineSchedules extends BaseResource()( + edit( + projectId: string | number, + pipelineScheduleId: number, + options?: { + description?: string; + ref?: string; + cron?: string; + cronTimezone?: string; + active?: boolean; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`projects/${projectId}/pipeline_schedules/${pipelineScheduleId}`, + options, + ); + } + + remove( + projectId: string | number, + pipelineScheduleId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( this, - endpoint`projects/${projectId}/pipeline_schedules/${scheduleId}`, + endpoint`projects/${projectId}/pipeline_schedules/${pipelineScheduleId}`, options, ); } - remove(projectId: string | number, scheduleId: number, options?: Sudo) { - return RequestHelper.del()( + run( + projectId: string | number, + pipelineScheduleId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post<{ message: string }>()( this, - endpoint`projects/${projectId}/pipeline_schedules/${scheduleId}`, + endpoint`projects/${projectId}/pipeline_schedules/${pipelineScheduleId}/play`, options, ); } - show(projectId: string | number, scheduleId: number, options?: Sudo) { - return RequestHelper.get()( + show( + projectId: string | number, + pipelineScheduleId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/pipeline_schedules/${scheduleId}`, + endpoint`projects/${projectId}/pipeline_schedules/${pipelineScheduleId}`, options, ); } - takeOwnership(projectId: string | number, scheduleId: number, options?: Sudo) { - return RequestHelper.post()( + takeOwnership( + projectId: string | number, + pipelineScheduleId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/pipeline_schedules/${scheduleId}/take_ownership`, + endpoint`projects/${projectId}/pipeline_schedules/${pipelineScheduleId}/take_ownership`, options, ); } diff --git a/packages/core/src/resources/PipelineTriggerTokens.ts b/packages/core/src/resources/PipelineTriggerTokens.ts new file mode 100644 index 000000000..813121a72 --- /dev/null +++ b/packages/core/src/resources/PipelineTriggerTokens.ts @@ -0,0 +1,103 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { ExpandedPipelineSchema } from './Pipelines'; + +export interface PipelineTriggerTokenSchema extends Record { + id: number; + description: string; + created_at: string; + last_used?: null; + token: string; + updated_at: string; + owner?: null; +} + +export class PipelineTriggerTokens extends BaseResource { + all( + projectId: string | number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/triggers`, + options, + ); + } + + create( + projectId: string | number, + description: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/triggers`, + { + description, + ...options, + }, + ); + } + + edit( + projectId: string | number, + triggerId: number, + options?: { description?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`projects/${projectId}/triggers/${triggerId}`, + options, + ); + } + + remove( + projectId: string | number, + pipelineId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`projects/${projectId}/pipelines/${pipelineId}`, + options, + ); + } + + show( + projectId: string | number, + triggerId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/triggers/${triggerId}`, + options, + ); + } + + trigger( + projectId: string | number, + ref: string, + token: string, + options?: { variables?: Record } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/pipelines`, + { + searchParams: { + token, + ref, + }, + options, + }, + ); + } +} diff --git a/packages/core/src/resources/Pipelines.ts b/packages/core/src/resources/Pipelines.ts index 5a3116b61..855be8cd2 100644 --- a/packages/core/src/resources/Pipelines.ts +++ b/packages/core/src/resources/Pipelines.ts @@ -1,60 +1,126 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { UserSchema } from './Users'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; +import type { UserSchema } from './Users'; +import type { PipelineVariableSchema } from './PipelineScheduleVariables'; + +export type CommitablePipelineStatus = 'pending' | 'running' | 'success' | 'failed' | 'canceled'; export type PipelineStatus = + | CommitablePipelineStatus | 'created' | 'waiting_for_resource' | 'preparing' - | 'pending' - | 'running' - | 'failed' - | 'success' - | 'canceled' | 'skipped' | 'manual' | 'scheduled'; export interface PipelineSchema extends Record { id: number; - status: PipelineStatus; - ref: string; + iid: number; + project_id: number; sha: string; - web_url: string; + ref: string; + status: string; + source: string; created_at: string; updated_at: string; - user: Pick; + web_url: string; } -export interface PipelineExtendedSchema extends PipelineSchema { - project_id: number; +export interface ExpandedPipelineSchema extends PipelineSchema { before_sha: string; tag: boolean; - yaml_errors?: string; - user: Pick; - started_at?: string; + yaml_errors?: unknown; + user: Omit; + started_at: string; finished_at: string; committed_at?: string; - duration?: string; - coverage?: string; + duration: number; + queued_duration?: unknown; + coverage?: unknown; + detailed_status: { + icon: string; + text: string; + label: string; + group: string; + tooltip: string; + has_details: boolean; + details_path: string; + illustration?: null; + favicon: string; + }; } -export interface PipelineVariableSchema extends Record { - key: string; - variable_type?: string; - value: string; +export interface PipelineTestCaseSchema { + status: string; + name: string; + classname: string; + execution_time: number; + system_output?: string; + stack_trace?: string; } -// TODO: Add missing function +export interface PipelineTestSuiteSchema { + name: string; + total_time: number; + total_count: number; + success_count: number; + failed_count: number; + skipped_count: number; + error_count: number; + test_cases?: PipelineTestCaseSchema[]; +} + +export interface PipelineTestReportSchema extends Record { + total_time: number; + total_count: number; + success_count: number; + failed_count: number; + skipped_count: number; + error_count: number; + test_suites?: PipelineTestSuiteSchema[]; +} + +export interface PipelineTestReportSummarySchema extends Record { + total: { + time: number; + count: number; + success: number; + failed: number; + skipped: number; + error: number; + suite_error?: null; + }; + test_suites?: PipelineTestSuiteSchema[]; +} + +export type AllPipelinesOptions = { + scope?: 'running' | 'pending' | 'finished' | 'branches' | 'tags'; + status?: PipelineStatus; + source?: string; + ref?: string; + sha?: string; + yamlErrors?: boolean; + username?: string; + updatedAfter?: string; + updatedBefore?: string; + name?: string; + orderBy?: 'id' | 'status' | 'updated_at' | 'user_id'; + sort?: 'asc' | 'desc'; +}; export class Pipelines extends BaseResource { - all(projectId: string | number, options?: PaginatedRequestOptions) { + all( + projectId: string | number, + options?: AllPipelinesOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/pipelines`, @@ -62,49 +128,113 @@ export class Pipelines extends BaseResource { ); } - create(projectId: string | number, ref: string, options?: BaseRequestOptions) { - return RequestHelper.post()(this, endpoint`projects/${projectId}/pipeline`, { - ref, - ...options, - }); + allVariables( + projectId: string | number, + pipelineId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/pipelines/${pipelineId}/variables`, + options, + ); } - delete(projectId: string | number, pipelineId: number, options?: Sudo) { - return RequestHelper.del()( + cancel( + projectId: string | number, + pipelineId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/pipelines/${pipelineId}`, + endpoint`projects/${projectId}/pipelines/${pipelineId}/cancel`, options, ); } - show(projectId: string | number, pipelineId: number, options?: Sudo) { - return RequestHelper.get()( + create( + projectId: string | number, + ref: string, + options?: { variables?: PipelineVariableSchema[] } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/pipeline`, + { + ref, + ...options, + }, + ); + } + + remove( + projectId: string | number, + pipelineId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( this, endpoint`projects/${projectId}/pipelines/${pipelineId}`, options, ); } - retry(projectId: string | number, pipelineId: number, options?: Sudo) { - return RequestHelper.post()( + retry( + projectId: string | number, + pipelineId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, endpoint`projects/${projectId}/pipelines/${pipelineId}/retry`, options, ); } - cancel(projectId: string | number, pipelineId: number, options?: Sudo) { - return RequestHelper.post()( + show( + projectId: string | number, + pipelineId: number, + options?: Sudo & ShowExpanded, + ): Promise>; + + show( + projectId: string | number, + pipelineId: 'latest', + options?: { ref?: string } & Sudo & ShowExpanded, + ): Promise>; + + show( + projectId: string | number, + pipelineId: number | 'latest', + options?: { ref?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/pipelines/${pipelineId}`, + options, + ); + } + + showTestReport( + projectId: string | number, + pipelineId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/pipelines/${pipelineId}/cancel`, + endpoint`projects/${projectId}/pipelines/${pipelineId}/test_report`, options, ); } - allVariables(projectId: string | number, pipelineId: number, options?: PaginatedRequestOptions) { - return RequestHelper.get()( + showTestReportSummary( + projectId: string | number, + pipelineId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/pipelines/${pipelineId}/variables`, + endpoint`projects/${projectId}/pipelines/${pipelineId}/test_report_summary`, options, ); } diff --git a/packages/core/src/resources/ProductAnalytics.ts b/packages/core/src/resources/ProductAnalytics.ts new file mode 100644 index 000000000..557d054ba --- /dev/null +++ b/packages/core/src/resources/ProductAnalytics.ts @@ -0,0 +1,49 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export class ProductAnalytics extends BaseResource { + allFunnels( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise, C, E, void>> { + return RequestHelper.get>()( + this, + endpoint`projects/${projectId}/product_analytics/funnels`, + options, + ); + } + + load( + projectId: string | number, + options?: { includeToken?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/product_analytics/request/load`, + options, + ); + } + + dryRun( + projectId: string | number, + options?: { includeToken?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/product_analytics/request/dry-run`, + options, + ); + } + + showMetadata( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/product_analytics/request/meta`, + options, + ); + } +} diff --git a/packages/core/src/resources/ProjectAccessRequests.ts b/packages/core/src/resources/ProjectAccessRequests.ts index 739f34d5a..2e08b1da1 100644 --- a/packages/core/src/resources/ProjectAccessRequests.ts +++ b/packages/core/src/resources/ProjectAccessRequests.ts @@ -1,21 +1,36 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceAccessRequests } from '../templates'; -import { AccessRequestSchema, AccessLevel } from '../templates/types'; -import { Sudo, CamelizedRecord } from '../infrastructure'; +import type { AccessLevel, AccessRequestSchema } from '../templates/ResourceAccessRequests'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface ProjectAccessRequests extends ResourceAccessRequests { - all(projectId: string | number): Promise[]>; + all( + projectId: string | number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - request(projectId: string | number): Promise>; + request( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; - approve( + approve( projectId: string | number, userId: number, - options?: { accessLevel?: AccessLevel } & Sudo, - ): Promise>; + options?: { accessLevel?: AccessLevel } & Sudo & ShowExpanded, + ): Promise>; - deny(projectId: string | number, userId: number): Promise; + deny( + groupId: string | number, + userId: number, + ): Promise>; } export class ProjectAccessRequests extends ResourceAccessRequests { diff --git a/packages/core/src/resources/ProjectAccessTokens.ts b/packages/core/src/resources/ProjectAccessTokens.ts new file mode 100644 index 000000000..2069c3218 --- /dev/null +++ b/packages/core/src/resources/ProjectAccessTokens.ts @@ -0,0 +1,44 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceAccessTokens } from '../templates'; +import type { AccessTokenSchema, AccessTokenScopes } from '../templates/ResourceAccessTokens'; +import type { AccessLevel } from '../templates/ResourceAccessRequests'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface ProjectAccessTokens extends ResourceAccessTokens { + all( + projectId: string | number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; + + create( + projectId: string | number, + name: string, + scopes: AccessTokenScopes[], + options?: { accessLevel?: AccessLevel; expiresAt?: string } & Sudo & ShowExpanded, + ): Promise>; + + revoke( + projectId: string | number, + tokenId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; + + show( + projectId: string | number, + tokenId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class ProjectAccessTokens extends ResourceAccessTokens { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', options); + } +} diff --git a/packages/core/src/resources/ProjectAliases.ts b/packages/core/src/resources/ProjectAliases.ts new file mode 100644 index 000000000..6e87888f7 --- /dev/null +++ b/packages/core/src/resources/ProjectAliases.ts @@ -0,0 +1,49 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface ProjectAliasSchema extends Record { + id: number; + project_id: string | number; + name: string; +} + +export class ProjectAliases extends BaseResource { + all( + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()(this, 'project_aliases', options); + } + + create( + projectId: string | number, + name: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, 'project_aliases', { + name, + projectId, + ...options, + }); + } + + edit( + name: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, `project_aliases/${name}`, options); + } + + remove( + name: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, `project_aliases/${name}`, options); + } +} diff --git a/packages/core/src/resources/ProjectBadges.ts b/packages/core/src/resources/ProjectBadges.ts index c7dafa7b2..0736bb8a0 100644 --- a/packages/core/src/resources/ProjectBadges.ts +++ b/packages/core/src/resources/ProjectBadges.ts @@ -1,11 +1,16 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceBadges } from '../templates'; -import { BadgeSchema } from '../templates/types'; -import { - BaseRequestOptions, - PaginatedRequestOptions, +import type { + BadgeSchema, + CondensedBadgeSchema, + EditBadgeOptions, +} from '../templates/ResourceBadges'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - CamelizedRecord, } from '../infrastructure'; export interface ProjectBadgeSchema extends BadgeSchema { @@ -13,36 +18,42 @@ export interface ProjectBadgeSchema extends BadgeSchema { } export interface ProjectBadges extends ResourceBadges { - add( - productId: string | number, - options?: BaseRequestOptions, - ): Promise>; - - all( - productId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; - - edit( - productId: string | number, + add( + groupId: string | number, + linkUrl: string, + imageUrl: string, + options?: { name?: string } & Sudo & ShowExpanded, + ): Promise>; + + all( + groupId: string | number, + options?: { name?: string } & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; + + edit( + groupId: string | number, badgeId: number, - options?: BaseRequestOptions, - ): Promise>; + options?: EditBadgeOptions & Sudo & ShowExpanded, + ): Promise>; - preview( - productId: string | number, + preview( + groupId: string | number, linkUrl: string, imageUrl: string, - options?: Sudo, - ): Promise>>; + options?: Sudo & ShowExpanded, + ): Promise>; - remove(productId: string | number, badgeId: number, options?: Sudo): Promise; + remove( + groupId: string | number, + badgeId: number, + options?: Sudo & ShowExpanded, + ): Promise>; - show( - productId: string | number, + show( + groupId: string | number, badgeId: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; } export class ProjectBadges extends ResourceBadges { diff --git a/packages/core/src/resources/ProjectCustomAttributes.ts b/packages/core/src/resources/ProjectCustomAttributes.ts index ec0dc395d..fbc54baf1 100644 --- a/packages/core/src/resources/ProjectCustomAttributes.ts +++ b/packages/core/src/resources/ProjectCustomAttributes.ts @@ -1,29 +1,39 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceCustomAttributes } from '../templates'; -import { CustomAttributeSchema } from '../templates/types'; -import { PaginatedRequestOptions, CamelizedRecord, Sudo } from '../infrastructure'; +import type { CustomAttributeSchema } from '../templates/ResourceCustomAttributes'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface ProjectCustomAttributes extends ResourceCustomAttributes { - all( + all( projectId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - set( + set( projectId: string | number, - customAttributeId: number, + customAttributeId: string, value: string, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; - remove(projectId: string | number, customAttributeId: number, options?: Sudo): Promise; + remove( + projectId: string | number, + customAttributeId: string, + options?: Sudo & ShowExpanded, + ): Promise>; - show( + show( projectId: string | number, - customAttributeId: number, - options?: Sudo, - ): Promise>; + customAttributeId: string, + options?: Sudo & ShowExpanded, + ): Promise>; } export class ProjectCustomAttributes extends ResourceCustomAttributes { diff --git a/packages/core/src/resources/ProjectDORA4Metrics.ts b/packages/core/src/resources/ProjectDORA4Metrics.ts new file mode 100644 index 000000000..e465d904d --- /dev/null +++ b/packages/core/src/resources/ProjectDORA4Metrics.ts @@ -0,0 +1,9 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceDORA4Metrics } from '../templates'; + +export class ProjectDORA4Metrics extends ResourceDORA4Metrics { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', options); + } +} diff --git a/packages/core/src/resources/ProjectDeployTokens.ts b/packages/core/src/resources/ProjectDeployTokens.ts deleted file mode 100644 index abe999323..000000000 --- a/packages/core/src/resources/ProjectDeployTokens.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { ResourceDeployTokens } from '../templates'; -import { DeployTokenScope, DeployTokenSchema } from '../templates/types'; -import { - BaseRequestOptions, - PaginatedRequestOptions, - CamelizedRecord, - Sudo, -} from '../infrastructure'; - -export interface ProjectDeployTokens extends ResourceDeployTokens { - add( - projectId: string | number, - tokenName: string, - tokenScopes: DeployTokenScope[], - options?: BaseRequestOptions, - ): Promise>; - - all( - options?: { projectId?: string | number } & PaginatedRequestOptions, - ): Promise[]>; - - remove(projectId: string | number, tokenId: number, options?: Sudo): Promise; -} - -export class ProjectDeployTokens extends ResourceDeployTokens { - constructor(options: BaseResourceOptions) { - /* istanbul ignore next */ - super('projects', options); - } -} diff --git a/packages/core/src/resources/ProjectHooks.ts b/packages/core/src/resources/ProjectHooks.ts index f9842dd8d..660deb914 100644 --- a/packages/core/src/resources/ProjectHooks.ts +++ b/packages/core/src/resources/ProjectHooks.ts @@ -1,69 +1,56 @@ -import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceHooks } from '../templates'; +import type { + AddResourceHookOptions, + EditResourceHookOptions, + ExpandedHookSchema, +} from '../templates/ResourceHooks'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; -export interface ProjectHookSchema extends Record { - id: number; - url: string; - project_id: number; - push_events: boolean; - push_events_branch_filter: string; - issues_events: boolean; - confidential_issues_events: boolean; - merge_requests_events: boolean; - tag_push_events: boolean; - note_events: boolean; - confidential_note_events: boolean; - job_events: boolean; - pipeline_events: boolean; - wiki_page_events: boolean; - deployment_events: boolean; - releases_events: boolean; - enable_ssl_verification: boolean; - created_at: string; +export interface ProjectHookSchema extends ExpandedHookSchema { + projectId: number; } -export class ProjectHooks extends BaseResource { - all(projectId: string | number, options?: PaginatedRequestOptions) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/hooks`, - options, - ); - } +export interface ProjectHooks { + add( + projectId: string | number, + url: string, + options?: AddResourceHookOptions & Sudo & ShowExpanded, + ): Promise>; - show(projectId: string | number, hookId: number, options?: Sudo) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/hooks/${hookId}`, - options, - ); - } + all( + projectId: string | number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - add(projectId: string | number, url: string, options?: BaseRequestOptions) { - return RequestHelper.post()(this, endpoint`projects/${projectId}/hooks`, { - url, - ...options, - }); - } + edit( + projectId: string | number, + hookId: number, + url: string, + options?: EditResourceHookOptions & Sudo & ShowExpanded, + ): Promise>; - edit(projectId: string | number, hookId: number, url: string, options?: BaseRequestOptions) { - return RequestHelper.put()( - this, - endpoint`projects/${projectId}/hooks/${hookId}`, - { - url, - ...options, - }, - ); - } + remove( + projectId: string | number, + hookId: number, + options?: Sudo & ShowExpanded, + ): Promise>; + show( + projectId: string | number, + hookId: number, + options?: Sudo & ShowExpanded, + ): Promise>; +} - remove(projectId: string | number, hookId: number, options?: Sudo) { - return RequestHelper.del()(this, endpoint`projects/${projectId}/hooks/${hookId}`, options); +export class ProjectHooks extends ResourceHooks { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', options); } } diff --git a/packages/core/src/resources/ProjectImportExport.ts b/packages/core/src/resources/ProjectImportExport.ts index 5a8ee02bf..93370c92a 100644 --- a/packages/core/src/resources/ProjectImportExport.ts +++ b/packages/core/src/resources/ProjectImportExport.ts @@ -1,6 +1,6 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import * as Mime from 'mime/lite'; -import { RequestHelper, Sudo, BaseRequestOptions, endpoint } from '../infrastructure'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; export interface ExportStatusSchema extends Record { id: number; @@ -37,60 +37,106 @@ export interface ImportStatusSchema extends Record { import_status: string; correlation_id: string; failed_relations?: FailedRelationSchema[]; + import_error?: string; } -export interface UploadMetadata { - filename?: string; - contentType?: string; -} - -export const defaultMetadata = { - filename: `${Date.now().toString()}.tar.gz`, -}; - export class ProjectImportExport extends BaseResource { - download(projectId: string | number, options?: Sudo) { - return RequestHelper.get()(this, endpoint`projects/${projectId}/export/download`, options); - } - - exportStatus(projectId: string | number, options?: Sudo) { - return RequestHelper.get()( + download( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/export`, + endpoint`projects/${projectId}/export/download`, options, ); } - import( - content: string, + // TODO: What does this return? + import( + file: { content: Blob; filename: string }, path: string, - { metadata, ...options }: { metadata?: UploadMetadata } & BaseRequestOptions = {}, - ) { - const meta = { ...defaultMetadata, ...metadata }; - - if (!meta.contentType) meta.contentType = Mime.getType(meta.filename) || undefined; - + options?: { + name?: string; + namespace?: number | string; + overrideParams?: Record; + overwrite?: boolean; + } & Sudo & + ShowExpanded, + ): Promise> { return RequestHelper.post()(this, 'projects/import', { isForm: true, ...options, - file: [content, meta], + file: [file.content, file.filename], path, }); } - importStatus(projectId: string | number, options?: Sudo) { - return RequestHelper.get()( + importRemote( + url: string, + path: string, + options?: { + name?: number; + namespace?: number | string; + overrideParams?: Record; + overwrite?: boolean; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, 'projects/remote-import', { + ...options, + path, + url, + }); + } + + importRemoteS3( + accessKeyId: string, + bucketName: string, + fileKey: string, + path: string, + region: string, + secretAccessKey: string, + options?: { name?: number; namespace?: number | string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, 'projects/remote-import', { + ...options, + accessKeyId, + bucketName, + fileKey, + path, + region, + secretAccessKey, + }); + } + + showExportStatus(projectId: string | number, options?: Sudo) { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/import`, + endpoint`projects/${projectId}/export`, options, ); } - schedule(projectId: string | number, options?: BaseRequestOptions) { - return RequestHelper.post<{ message: string }>()( + showImportStatus(projectId: string | number, options?: Sudo) { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/export`, + endpoint`projects/${projectId}/import`, options, ); } + + scheduleExport( + projectId: string | number, + uploadConfig: { + url: string; + http_method?: string; + }, + options?: { description?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post<{ message: string }>()(this, endpoint`projects/${projectId}/export`, { + ...options, + upload: uploadConfig, + }); + } } diff --git a/packages/core/src/resources/ProjectInvitations.ts b/packages/core/src/resources/ProjectInvitations.ts new file mode 100644 index 000000000..8ee27c784 --- /dev/null +++ b/packages/core/src/resources/ProjectInvitations.ts @@ -0,0 +1,50 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceInvitations } from '../templates'; +import type { InvitationSchema } from '../templates/ResourceInvitations'; +import type { AccessLevel } from '../templates/ResourceAccessRequests'; +import type { + Either, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface ProjectInvitations { + add( + projectId: string | number, + accessLevel: AccessLevel, + options: Either<{ email: string }, { userId: string }> & { + expiresAt?: string; + inviteSource?: string; + tasksToBeDone?: string[]; + tasksProjectId?: number; + } & Sudo & + ShowExpanded, + ): Promise>; + + all( + projectId: string | number, + options?: PaginationRequestOptions

& { query?: string } & Sudo & ShowExpanded, + ): Promise>; + + edit( + projectId: string | number, + email: string, + options?: { expiresAt?: string; accessLevel?: AccessLevel } & Sudo & ShowExpanded, + ): Promise>; + + remove( + projectId: string | number, + email: string, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class ProjectInvitations extends ResourceInvitations { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', options); + } +} diff --git a/packages/core/src/resources/ProjectIssueBoards.ts b/packages/core/src/resources/ProjectIssueBoards.ts index f4e5acb0a..56ae50f5c 100644 --- a/packages/core/src/resources/ProjectIssueBoards.ts +++ b/packages/core/src/resources/ProjectIssueBoards.ts @@ -1,87 +1,96 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { ProjectSchema } from './Projects'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceIssueBoards } from '../templates'; -import { IssueBoardSchema, IssueBoardListSchema } from '../templates/types'; -import { - BaseRequestOptions, - PaginatedRequestOptions, +import { IssueBoardListSchema, IssueBoardSchema } from '../templates/ResourceIssueBoards'; +import type { + EitherOrNone3, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - CamelizedRecord, } from '../infrastructure'; +import type { SimpleProjectSchema } from './Projects'; export interface ProjectIssueBoardSchema extends IssueBoardSchema { - project: Pick< - ProjectSchema, - | 'id' - | 'name' - | 'name_with_namespace' - | 'path' - | 'path_with_namespace' - | 'http_url_to_repo' - | 'web_url' - >; + project: SimpleProjectSchema; } export interface ProjectIssueBoards extends ResourceIssueBoards { - all( - groupId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; + all( + projectId: string | number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - create( - groupId: string | number, + allLists( + projectId: string | number, + boardId: number, + options?: Sudo & ShowExpanded, + ): Promise>; + + create( + projectId: string | number, name: string, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; - createList( - groupId: string | number, + createList( + projectId: string | number, boardId: number, - labelId: number | string, - options?: Sudo, - ): Promise>; + options?: EitherOrNone3< + { labelId?: number }, + { assigneeId?: number }, + { milestoneId?: number } + > & + Sudo & + ShowExpanded, + ): Promise>; - edit( - groupId: string | number, + edit( + projectId: string | number, boardId: number, - options?: BaseRequestOptions, - ): Promise>; + options?: { + name?: string; + assigneeId?: number; + milestoneId?: number; + labels?: string; + weight?: number; + } & Sudo & + ShowExpanded, + ): Promise>; - editList( - groupId: string | number, + editList( + projectId: string | number, boardId: number, listId: number, position: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; - lists( - groupId: string | number, + remove( + projectId: string | number, boardId: number, - options?: Sudo, - ): Promise[]>; - - remove(groupId: string | number, boardId: number, options?: Sudo): Promise; + options?: Sudo & ShowExpanded, + ): Promise>; - removeList( - groupId: string | number, + removeList( + projectId: string | number, boardId: number, listId: number, - options?: Sudo, - ): Promise; + options?: Sudo & ShowExpanded, + ): Promise>; - show( - groupId: string | number, + show( + projectId: string | number, boardId: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; - showList( - groupId: string | number, + showList( + projectId: string | number, boardId: number, listId: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; } export class ProjectIssueBoards extends ResourceIssueBoards { diff --git a/packages/core/src/resources/ProjectIterations.ts b/packages/core/src/resources/ProjectIterations.ts new file mode 100644 index 000000000..3ba8a034e --- /dev/null +++ b/packages/core/src/resources/ProjectIterations.ts @@ -0,0 +1,24 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceIterations } from '../templates'; +import type { AllIterationsOptions, IterationSchema } from '../templates/ResourceIterations'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface ProjectIterations { + all( + projectId: string | number, + options?: AllIterationsOptions & Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; +} + +export class ProjectIterations extends ResourceIterations { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('project', options); + } +} diff --git a/packages/core/src/resources/ProjectLabels.ts b/packages/core/src/resources/ProjectLabels.ts new file mode 100644 index 000000000..324826f8c --- /dev/null +++ b/packages/core/src/resources/ProjectLabels.ts @@ -0,0 +1,78 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceLabels } from '../templates'; +import type { LabelSchema } from '../templates/ResourceLabels'; +import type { + Either, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface ProjectLabels extends ResourceLabels { + all( + projectId: string | number, + options?: { + withCounts?: boolean; + includeAncestorGroups?: boolean; + search?: string; + } & PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise>; + + create( + projectId: string | number, + labelName: string, + color: string, + options?: { description?: string; priority?: number } & Sudo & ShowExpanded, + ): Promise>; + + edit( + projectId: string | number, + labelId: number | string, + options: Either<{ newName: string }, { color: string }> & { + description?: string; + priority?: number; + } & Sudo & + ShowExpanded, + ): Promise>; + + promote( + projectId: string | number, + labelId: number | string, + options?: Sudo & ShowExpanded, + ): Promise>; + + remove( + projectId: string | number, + labelId: number | string, + options?: Sudo & ShowExpanded, + ): Promise>; + + show( + projectId: string | number, + labelId: number | string, + options?: { includeAncestorGroups?: boolean } & Sudo & ShowExpanded, + ): Promise>; + + subscribe( + projectId: string | number, + labelId: number | string, + options?: Sudo & ShowExpanded, + ): Promise>; + + unsubscribe( + projectId: string | number, + labelId: number | string, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class ProjectLabels extends ResourceLabels { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', options); + } +} diff --git a/packages/core/src/resources/ProjectMembers.ts b/packages/core/src/resources/ProjectMembers.ts index 7fc48b8cc..ed669a8a6 100644 --- a/packages/core/src/resources/ProjectMembers.ts +++ b/packages/core/src/resources/ProjectMembers.ts @@ -1,40 +1,55 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceMembers } from '../templates'; -import { MemberSchema, IncludeInherited, AccessLevel } from '../templates/types'; -import { - BaseRequestOptions, - PaginatedRequestOptions, - CamelizedRecord, +import type { + AddMemeberOptions, + AllMembersOptions, + IncludeInherited, + MemberSchema, +} from '../templates/ResourceMembers'; +import type { AccessLevel } from '../templates/ResourceAccessRequests'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; export interface ProjectMembers extends ResourceMembers { - add( + add( projectId: string | number, userId: number, accessLevel: AccessLevel, - options?: BaseRequestOptions, - ): Promise>; + options?: AddMemeberOptions & Sudo & ShowExpanded, + ): Promise>; - all( + all( projectId: string | number, - options?: IncludeInherited & PaginatedRequestOptions, - ): Promise[]>; + options?: IncludeInherited & + PaginationRequestOptions

& + AllMembersOptions & + Sudo & + ShowExpanded, + ): Promise>; - edit( + edit( projectId: string | number, userId: number, accessLevel: AccessLevel, - options?: BaseRequestOptions, - ): Promise>; + options?: { expiresAt?: string; memberRoleId?: number } & Sudo & ShowExpanded, + ): Promise>; - show( + show( projectId: string | number, userId: number, - options?: IncludeInherited & Sudo, - ): Promise>; + options?: IncludeInherited & Sudo & ShowExpanded, + ): Promise>; - remove(projectId: string | number, userId: number, options?: Sudo): Promise; + remove( + projectId: string | number, + userId: number, + options?: { skipSubresourceS?: boolean; unassignIssuables?: boolean } & Sudo & ShowExpanded, + ): Promise>; } export class ProjectMembers extends ResourceMembers { diff --git a/packages/core/src/resources/ProjectMilestones.ts b/packages/core/src/resources/ProjectMilestones.ts index 34c2f0a60..9fc495809 100644 --- a/packages/core/src/resources/ProjectMilestones.ts +++ b/packages/core/src/resources/ProjectMilestones.ts @@ -1,50 +1,76 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { IssueSchema } from './Issues'; -import { MergeRequestSchema } from './MergeRequests'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceMilestones } from '../templates'; -import { MilestoneSchema } from '../templates/types'; -import { - PaginatedRequestOptions, - BaseRequestOptions, +import type { + AllMilestonesOptions, + BurndownChartEventSchema, + MilestoneSchema, +} from '../templates/ResourceMilestones'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - CamelizedRecord, } from '../infrastructure'; +import type { IssueSchema } from './Issues'; +import type { MergeRequestSchema } from './MergeRequests'; export interface ProjectMilestones extends ResourceMilestones { - all( + all( projectId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: AllMilestonesOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - create( + allAssignedIssues( projectId: string | number, - title: string, - options?: BaseRequestOptions, - ): Promise>; + milestoneId: number, + options?: Sudo & ShowExpanded, + ): Promise>; + + allAssignedMergeRequests( + projectId: string | number, + milestoneId: number, + options?: Sudo & ShowExpanded, + ): Promise>; - edit( + allBurndownChartEvents( projectId: string | number, milestoneId: number, - options?: BaseRequestOptions, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; + + create( + projectId: string | number, + title: string, + options?: { description?: string; dueDate?: string; startDate?: string } & Sudo & + ShowExpanded, + ): Promise>; - issues( + edit( projectId: string | number, milestoneId: number, - options?: Sudo, - ): Promise[]>; + options?: { + title?: string; + description?: string; + dueDate?: string; + startDate?: string; + startEvent?: 'close' | 'activate'; + } & Sudo & + ShowExpanded, + ): Promise>; - mergeRequests( + remove( projectId: string | number, milestoneId: number, - options?: Sudo, - ): Promise[]>; + options?: Sudo & ShowExpanded, + ): Promise>; - show( + show( projectId: string | number, milestoneId: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; } export class ProjectMilestones extends ResourceMilestones { @@ -52,4 +78,16 @@ export class ProjectMilestones extends ResourceMilest /* istanbul ignore next */ super('projects', options); } + + promote( + projectId: string | number, + milestoneId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`${projectId}/milestones/${milestoneId}/promote`, + options, + ); + } } diff --git a/packages/core/src/resources/ProjectProtectedEnvironments.ts b/packages/core/src/resources/ProjectProtectedEnvironments.ts new file mode 100644 index 000000000..d1022a9e8 --- /dev/null +++ b/packages/core/src/resources/ProjectProtectedEnvironments.ts @@ -0,0 +1,63 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceProtectedEnvironments } from '../templates'; +import { + ProtectedEnvironmentAccessLevelEntity, + ProtectedEnvironmentSchema, +} from '../templates/ResourceProtectedEnvironments'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface ProjectProtectedEnvironments { + all( + projectId: string | number, + options?: { search?: string } & Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; + + create( + projectId: string | number, + name: string, + deployAccessLevel: ProtectedEnvironmentAccessLevelEntity[], + options?: { + requiredApprovalCount?: number; + approvalLevels: ProtectedEnvironmentAccessLevelEntity[]; + } & Sudo & + ShowExpanded, + ): Promise>; + + edit( + projectId: string | number, + name: string, + options?: { + deployAccessLevels?: ProtectedEnvironmentAccessLevelEntity[]; + requiredApprovalCount?: number; + approvalRules?: ProtectedEnvironmentAccessLevelEntity[]; + } & Sudo & + ShowExpanded, + ): Promise>; + + show( + projectId: string | number, + name: string, + options?: Sudo & ShowExpanded, + ): Promise>; + + unprotect( + projectId: string | number, + name: string, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class ProjectProtectedEnvironments< + C extends boolean = false, +> extends ResourceProtectedEnvironments { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('groups', options); + } +} diff --git a/packages/core/src/resources/ProjectPushRules.ts b/packages/core/src/resources/ProjectPushRules.ts new file mode 100644 index 000000000..9f41af099 --- /dev/null +++ b/packages/core/src/resources/ProjectPushRules.ts @@ -0,0 +1,33 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourcePushRules } from '../templates'; +import type { CreateAndEditPushRuleOptions, PushRuleSchema } from '../templates/ResourcePushRules'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface ProjectPushRules extends ResourcePushRules { + create( + projectId: string | number, + options?: CreateAndEditPushRuleOptions & Sudo & ShowExpanded, + ): Promise>; + + edit( + projectId: string | number, + options?: CreateAndEditPushRuleOptions & Sudo & ShowExpanded, + ): Promise>; + + remove( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; + + show( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class ProjectPushRules extends ResourcePushRules { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', options); + } +} diff --git a/packages/core/src/resources/ProjectRelationsExport.ts b/packages/core/src/resources/ProjectRelationsExport.ts new file mode 100644 index 000000000..8bd3bed02 --- /dev/null +++ b/packages/core/src/resources/ProjectRelationsExport.ts @@ -0,0 +1,76 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface ExportStatusSchema extends Record { + id: number; + description: string; + name: string; + name_with_namespace: string; + path: string; + path_with_namespace: string; + created_at: string; + export_status: string; + _links: { + api_url: string; + web_url: string; + }; +} + +export interface FailedRelationSchema { + id: number; + created_at: string; + exception_class: string; + exception_message: string; + source: string; + relation_name: string; +} + +export interface ImportStatusSchema extends Record { + id: number; + description: string; + name: string; + name_with_namespace: string; + path: string; + path_with_namespace: string; + created_at: string; + import_status: string; + correlation_id: string; + failed_relations?: FailedRelationSchema[]; +} + +export class ProjectRelationsExport extends BaseResource { + download( + projectId: string | number, + relation: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/export_relations/download`, + { + relation, + ...options, + }, + ); + } + + showExportStatus(projectId: string | number, options?: Sudo) { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/export_relations/status`, + options, + ); + } + + scheduleExport( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post<{ message: string }>()( + this, + endpoint`projects/${projectId}/export_relations`, + options, + ); + } +} diff --git a/packages/core/src/resources/ProjectReleases.ts b/packages/core/src/resources/ProjectReleases.ts new file mode 100644 index 000000000..6bf41cfbc --- /dev/null +++ b/packages/core/src/resources/ProjectReleases.ts @@ -0,0 +1,168 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + BaseRequestOptions, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { UserSchema } from './Users'; +import type { CommitSchema } from './Commits'; +import type { MilestoneSchema } from '../templates/ResourceMilestones'; + +export interface ReleaseEvidence { + sha: string; + filepath: string; + collected_at: string; +} + +export interface ReleaseAssetSource { + format: string; + url: string; +} + +export interface ReleaseAssetLink { + id: number; + name: string; + url: string; + external: boolean; + link_type: string; +} + +export interface ReleaseSchema extends Record { + tag_name: string; + description: string; + name: string; + description_html: string; + created_at: string; + released_at: string; + user: Omit; + commit: CommitSchema; + milestones?: MilestoneSchema[]; + commit_path: string; + tag_path: string; + assets: { + count: number; + sources?: ReleaseAssetSource[]; + links?: ReleaseAssetLink[]; + evidence_file_path: string; + }; + evidences?: ReleaseEvidence[]; +} + +export class ProjectReleases extends BaseResource { + all( + projectId: string | number, + options?: PaginationRequestOptions

& BaseRequestOptions, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/releases`, + options, + ); + } + + create( + projectId: string | number, + options?: BaseRequestOptions, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/releases`, + options, + ); + } + + createEvidence( + projectId: string | number, + tagName: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/releases/${tagName}/evidence`, + options, + ); + } + + edit( + projectId: string | number, + tagName: string, + options?: BaseRequestOptions, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`projects/${projectId}/releases/${tagName}`, + options, + ); + } + + download( + projectId: string | number, + tagName: string, + filepath: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/releases/${tagName}/downloads/${filepath}`, + options, + ); + } + + downloadLatest( + projectId: string | number, + filepath: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/releases/permalink/latest/downloads/${filepath}`, + options, + ); + } + + remove( + projectId: string | number, + tagName: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`projects/${projectId}/releases/${tagName}`, options); + } + + show( + projectId: string | number, + tagName: string, + options?: { includeHtmlDescription?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/releases/${tagName}`, + options, + ); + } + + showLatest( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/releases/permalink/latest`, + options, + ); + } + + showLatestEvidence( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/releases/permalink/latest/evidence`, + options, + ); + } +} diff --git a/packages/core/src/resources/ProjectRemoteMirrors.ts b/packages/core/src/resources/ProjectRemoteMirrors.ts new file mode 100644 index 000000000..996f8aaa9 --- /dev/null +++ b/packages/core/src/resources/ProjectRemoteMirrors.ts @@ -0,0 +1,111 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface ProjectRemoteMirrorSchema extends Record { + enabled: boolean; + id: number; + last_error?: string; + last_successful_update_at: string; + last_update_at: string; + last_update_started_at: string; + only_protected_branches: boolean; + keep_divergent_refs: boolean; + update_status: string; + url: string; +} + +export class ProjectRemoteMirrors extends BaseResource { + all( + projectId: string | number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/remote_mirrors`, + options, + ); + } + + // Helper method - Duplicated from Projects + createPullMirror( + projectId: string | number, + url: string, + mirror: boolean, + options?: { onlyProtectedBranches?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/mirror/pull`, + { + importUrl: url, + mirror, + ...options, + }, + ); + } + + createPushMirror( + projectId: string | number, + url: string, + options?: { + enabled?: boolean; + onlyProtectedBranches?: boolean; + keepDivergentRefs?: boolean; + mirrorBranchRegex?: string; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/remote_mirrors`, + { + url, + ...options, + }, + ); + } + + edit( + projectId: string | number, + mirrorId: number, + options?: { + enabled?: boolean; + onlyProtectedBranches?: boolean; + keepDivergentRefs?: boolean; + mirrorBranchRegex?: string; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/remote_mirrors/${mirrorId}`, + options, + ); + } + + remove( + name: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, `project_aliases/${name}`, options); + } + + show( + projectId: string | number, + mirrorId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/remote_mirrors/${mirrorId}`, + options, + ); + } +} diff --git a/packages/core/src/resources/ProjectRepositoryStorageMoves.ts b/packages/core/src/resources/ProjectRepositoryStorageMoves.ts new file mode 100644 index 000000000..2ca3b4f98 --- /dev/null +++ b/packages/core/src/resources/ProjectRepositoryStorageMoves.ts @@ -0,0 +1,42 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceRepositoryStorageMoves } from '../templates'; +import type { RepositoryStorageMoveSchema } from '../templates/ResourceRepositoryStorageMoves'; +import type { + BaseRequestOptions, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { SimpleProjectSchema } from './Projects'; + +export interface ProjectRepositoryStorageMoveSchema extends RepositoryStorageMoveSchema { + project: SimpleProjectSchema; +} + +export interface ProjectRepositoryStorageMoves + extends ResourceRepositoryStorageMoves { + all( + options?: { projectId?: string | number } & PaginationRequestOptions

& BaseRequestOptions, + ): Promise>; + + show( + repositoryStorageId: number, + options?: { projectId?: string | number } & Sudo & ShowExpanded, + ): Promise>; + + schedule( + sourceStorageName: string, + options?: { projectId?: string | number; destinationStorageName } & Sudo & ShowExpanded, + ): Promise>; +} + +export class ProjectRepositoryStorageMoves< + C extends boolean = false, +> extends ResourceRepositoryStorageMoves { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', options); + } +} diff --git a/packages/core/src/resources/ProjectSnippetAwardEmojis.ts b/packages/core/src/resources/ProjectSnippetAwardEmojis.ts index 97021c481..e86e89c21 100644 --- a/packages/core/src/resources/ProjectSnippetAwardEmojis.ts +++ b/packages/core/src/resources/ProjectSnippetAwardEmojis.ts @@ -1,41 +1,47 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceAwardEmojis } from '../templates'; -import { AwardEmojiSchema } from '../templates/types'; -import { PaginatedRequestOptions, Sudo, CamelizedRecord } from '../infrastructure'; +import type { AwardEmojiSchema } from '../templates/ResourceAwardEmojis'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface ProjectSnippetAwardEmojis extends ResourceAwardEmojis { - all( + all( projectId: string | number, - snippetIId: number, - options?: PaginatedRequestOptions, - ): Promise[]>; + snippetId: number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - award( + award( projectId: string | number, - snippetIId: number, + snippetId: number, name: string, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; - remove( + remove( projectId: string | number, - snippetIId: number, + snippetId: number, awardId: number, - options?: Sudo, - ): Promise; + options?: Sudo & ShowExpanded, + ): Promise>; - show( + show( projectId: string | number, - snippetIId: number, + snippetId: number, awardId: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; } export class ProjectSnippetAwardEmojis extends ResourceAwardEmojis { constructor(options: BaseResourceOptions) { /* istanbul ignore next */ - super('snippets', options); + super('projects', 'snippets', options); } } diff --git a/packages/core/src/resources/ProjectSnippetDiscussions.ts b/packages/core/src/resources/ProjectSnippetDiscussions.ts index 093fd4558..f6856f6bb 100644 --- a/packages/core/src/resources/ProjectSnippetDiscussions.ts +++ b/packages/core/src/resources/ProjectSnippetDiscussions.ts @@ -1,59 +1,60 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceDiscussions } from '../templates'; -import { DiscussionSchema } from '../templates/types'; -import { - BaseRequestOptions, - PaginatedRequestOptions, +import type { DiscussionNoteSchema, DiscussionSchema } from '../templates/ResourceDiscussions'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - CamelizedRecord, } from '../infrastructure'; export interface ProjectSnippetDiscussions extends ResourceDiscussions { - addNote( + addNote( projectId: string | number, snippetId: string | number, - discussionId: string | number, + discussionId: string, noteId: number, body: string, - options?: BaseRequestOptions, - ): Promise>; + options?: { createdAt?: string } & Sudo & ShowExpanded, + ): Promise>; - all( + all( projectId: string | number, issueId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - create( + create( projectId: string | number, snippetId: string | number, body: string, - options?: BaseRequestOptions, - ): Promise>; + options?: { createdAt?: string } & Sudo & ShowExpanded, + ): Promise>; - editNote( + editNote( projectId: string | number, snippetId: string | number, - discussionId: string | number, + discussionId: string, noteId: number, - options: BaseRequestOptions & { body: string }, - ): Promise>; + options: Sudo & ShowExpanded & { body: string }, + ): Promise>; - removeNote( + removeNote( projectId: string | number, snippetId: string | number, - discussionId: string | number, + discussionId: string, noteId: number, - options?: Sudo, - ): Promise; + options?: Sudo & ShowExpanded, + ): Promise>; - show( + show( projectId: string | number, snippetId: string | number, - discussionId: string | number, - options?: Sudo, - ): Promise>; + discussionId: string, + options?: Sudo & ShowExpanded, + ): Promise>; } export class ProjectSnippetDiscussions extends ResourceDiscussions { diff --git a/packages/core/src/resources/ProjectSnippetNotes.ts b/packages/core/src/resources/ProjectSnippetNotes.ts index 46d724e81..467a7fc70 100644 --- a/packages/core/src/resources/ProjectSnippetNotes.ts +++ b/packages/core/src/resources/ProjectSnippetNotes.ts @@ -1,53 +1,59 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceNotes } from '../templates'; -import { NoteSchema } from '../templates/types'; -import { - PaginatedRequestOptions, - BaseRequestOptions, +import type { NoteSchema } from '../templates/ResourceNotes'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - CamelizedRecord, } from '../infrastructure'; export interface SnippetNoteSchema extends NoteSchema { + confidential: boolean; file_name: string; expires_at: string; } export interface ProjectSnippetNotes extends ResourceNotes { - all( + all( projectId: string | number, - snippetId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; + snippedId: number, + options?: { + sort?: 'asc' | 'desc'; + orderBy?: 'created_at' | 'updated_at'; + } & PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise>; - create( + create( projectId: string | number, - snippetId: string | number, + snippedId: number, body: string, - options?: BaseRequestOptions, - ): Promise>; + options?: { createdAt?: string } & Sudo & ShowExpanded, + ): Promise>; - edit( + edit( projectId: string | number, - snippetId: string | number, + snippedId: number, noteId: number, - body: string, - options?: BaseRequestOptions, - ): Promise>; + options: { body: string } & Sudo & ShowExpanded, + ): Promise>; - remove( + remove( projectId: string | number, - snippetId: string | number, + snippedId: number, noteId: number, options?: Sudo, - ): Promise; + ): Promise>; - show( + show( projectId: string | number, - snippetId: string | number, + snippedId: number, noteId: number, - options?: Sudo, - ): Promise>; + options?: Sudo & ShowExpanded, + ): Promise>; } export class ProjectSnippetNotes extends ResourceNotes { diff --git a/packages/core/src/resources/ProjectSnippets.ts b/packages/core/src/resources/ProjectSnippets.ts index 59abea5fa..19487db17 100644 --- a/packages/core/src/resources/ProjectSnippets.ts +++ b/packages/core/src/resources/ProjectSnippets.ts @@ -1,74 +1,64 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, + UserAgentDetailSchema, } from '../infrastructure'; -import { SnippetVisibility } from './Snippets'; -import { UserSchema } from './Users'; - -export interface ProjectSnippetSchema extends Record { - id: number; - title: string; - file_name: string; - description: string; - author: Pick; - updated_at: string; - created_at: string; - project_id: number; - web_url: string; - raw_url: string; -} +import type { + CreateSnippetOptions, + EditSnippetOptions, + ExpandedSnippetSchema, + SnippetSchema, +} from './Snippets'; export class ProjectSnippets extends BaseResource { - all(projectId: string | number, options?: PaginatedRequestOptions) { - return RequestHelper.get()( + all( + projectId: string | number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( this, endpoint`projects/${projectId}/snippets`, options, ); } - content(projectId: string | number, snippetId: number, options?: Sudo) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/snippets/${snippetId}/raw`, - options, - ); - } - - create( + create( projectId: string | number, title: string, - fileName: string, - code: string, - visibility: SnippetVisibility, - options?: BaseRequestOptions, + options?: CreateSnippetOptions & Sudo & ShowExpanded, ) { - return RequestHelper.post()( + return RequestHelper.post()( this, endpoint`projects/${projectId}/snippets`, { title, - fileName, - code, - visibility, ...options, }, ); } - edit(projectId: string | number, snippetId: number, options?: BaseRequestOptions) { - return RequestHelper.put()( + edit( + projectId: string | number, + snippetId: number, + options?: EditSnippetOptions & Sudo & ShowExpanded, + ) { + return RequestHelper.put()( this, endpoint`projects/${projectId}/snippets/${snippetId}`, options, ); } - remove(projectId: string | number, snippetId: number, options?: Sudo) { + remove( + projectId: string | number, + snippetId: number, + options?: Sudo & ShowExpanded, + ) { return RequestHelper.del()( this, endpoint`projects/${projectId}/snippets/${snippetId}`, @@ -76,19 +66,53 @@ export class ProjectSnippets extends BaseResource ); } - show(projectId: string | number, snippetId: number, options?: Sudo) { - return RequestHelper.get()( + show( + projectId: string | number, + snippetId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, endpoint`projects/${projectId}/snippets/${snippetId}`, options, ); } - userAgentDetails(projectId: string | number, snippetId: number, options?: Sudo) { - return RequestHelper.get<{ - user_agent: string; - ip_address: string; - akismet_submitted: boolean; - }>()(this, endpoint`projects/${projectId}/snippets/${snippetId}/user_agent_detail`, options); + showContent( + projectId: string | number, + snippetId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/snippets/${snippetId}/raw`, + options, + ); + } + + showRepositoryFileContent( + projectId: string | number, + snippetId: number, + ref: string, + filePath: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/snippets/${snippetId}/files/${ref}/${filePath}/raw`, + options, + ); + } + + showUserAgentDetails( + projectId: string | number, + snippetId: number, + options?: Sudo & ShowExpanded, + ) { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/snippets/${snippetId}/user_agent_detail`, + options, + ); } } diff --git a/packages/core/src/resources/ProjectStatistics.ts b/packages/core/src/resources/ProjectStatistics.ts new file mode 100644 index 000000000..a408a63ea --- /dev/null +++ b/packages/core/src/resources/ProjectStatistics.ts @@ -0,0 +1,23 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface ProjectStatisticSchema extends Record { + fetches: { + total: number; + days: { count: number; date: string }[]; + }; +} + +export class ProjectStatistics extends BaseResource { + show( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/statistics`, + options as Sudo & ShowExpanded, + ); + } +} diff --git a/packages/core/src/resources/ProjectTemplates.ts b/packages/core/src/resources/ProjectTemplates.ts new file mode 100644 index 000000000..572a55dbe --- /dev/null +++ b/packages/core/src/resources/ProjectTemplates.ts @@ -0,0 +1,49 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export type ProjectTemplateType = + | 'dockerfiles' + | 'gitignores' + | 'gitlab_ci_ymls' + | 'licenses' + | 'issues' + | 'merge_requests'; +export interface ProjectTemplateSchema extends Record { + name: string; + content: string; +} + +export class ProjectTemplates extends BaseResource { + all( + projectId: string | number, + type: ProjectTemplateType, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/templates/${type}`, + options, + ); + } + + show( + projectId: string | number, + type: ProjectTemplateType, + name: string, + options?: { project?: string; fullname?: string; sourceTemplateProjectId?: number } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/templates/${type}/${name}`, + options, + ); + } +} diff --git a/packages/core/src/resources/ProjectVariables.ts b/packages/core/src/resources/ProjectVariables.ts index a71a44eca..d57ec3ef4 100644 --- a/packages/core/src/resources/ProjectVariables.ts +++ b/packages/core/src/resources/ProjectVariables.ts @@ -1,36 +1,62 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceVariables } from '../templates'; -import { VariableSchema } from '../templates/types'; -import { BaseRequestOptions, PaginatedRequestOptions, CamelizedRecord } from '../infrastructure'; +import type { VariableFilter, VariableSchema, VariableType } from '../templates/ResourceVariables'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface ProjectVariableSchema extends VariableSchema { + environment_scope: string; +} export interface ProjectVariables extends ResourceVariables { - all( + all( projectId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; - create( + create( projectId: string | number, - options?: BaseRequestOptions, - ): Promise>; + key: string, + value: string, + options?: { + variableType?: VariableType; + protected?: boolean; + masked?: boolean; + environmentScope?: string; + } & Sudo & + ShowExpanded, + ): Promise>; - edit( + edit( projectId: string | number, - keyId: string, - options?: BaseRequestOptions, - ): Promise>; + key: string, + value: string, + options?: { + variableType?: VariableType; + protected?: boolean; + masked?: boolean; + environmentScope?: string; + filter: VariableFilter; + } & Sudo & + ShowExpanded, + ): Promise>; - show( + show( projectId: string | number, - keyId: string, - options?: PaginatedRequestOptions, - ): Promise>; + key: string, + options?: { filter?: VariableFilter } & Sudo & ShowExpanded, + ): Promise>; - remove( + remove( projectId: string | number, - keyId: string, - options?: PaginatedRequestOptions, - ): Promise; + key: string, + options?: { filter?: VariableFilter } & Sudo & ShowExpanded, + ): Promise>; } export class ProjectVariables extends ResourceVariables { diff --git a/packages/core/src/resources/ProjectVulnerabilities.ts b/packages/core/src/resources/ProjectVulnerabilities.ts new file mode 100644 index 000000000..719c3ee87 --- /dev/null +++ b/packages/core/src/resources/ProjectVulnerabilities.ts @@ -0,0 +1,83 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { SimpleProjectSchema } from './Projects'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface ProjectVulnerabilitySchema extends Record { + author_id: number; + confidence: string; + created_at: string; + description?: string; + dismissed_at?: string; + dismissed_by_id?: number; + due_date?: string; + finding: { + confidence: string; + created_at: string; + id: number; + location_fingerprint: string; + metadata_version: string; + name: string; + primary_identifier_id: number; + project_fingerprint: string; + project_id: number; + raw_metadata: string; + report_type: string; + scanner_id: number; + severity: string; + updated_at: string; + uuid: string; + vulnerability_id: number; + }; + id: number; + last_edited_at?: string; + last_edited_by_id?: number; + project: SimpleProjectSchema; + project_default_branch: string; + report_type: string; + resolved_at?: string; + resolved_by_id?: number; + resolved_on_default_branch: boolean; + severity: string; + start_date?: string; + state: string; + title: string; + updated_at: string; + updated_by_id?: number; +} + +export class ProjectVulnerabilities extends BaseResource { + all( + projectId: string | number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/vulnerabilities`, + options, + ); + } + + create( + projectId: string | number, + findingId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/vulnerabilities`, + { + ...options, + searchParams: { + findingId, + }, + }, + ); + } +} diff --git a/packages/core/src/resources/ProjectWikis.ts b/packages/core/src/resources/ProjectWikis.ts new file mode 100644 index 000000000..a79175554 --- /dev/null +++ b/packages/core/src/resources/ProjectWikis.ts @@ -0,0 +1,57 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceWikis } from '../templates'; +import type { WikiAttachmentSchema, WikiSchema } from '../templates/ResourceWikis'; +import type { + Either, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface ProjectWikis extends ResourceWikis { + all( + projectId: string | number, + options?: { withContent?: boolean } & Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise>; + + create( + projectId: string | number, + content: string, + title: string, + options?: { format?: string } & Sudo & ShowExpanded, + ): Promise>; + + edit( + projectId: string | number, + slug: string, + options?: Either<{ content: string }, { title: string }> & { format?: string } & Sudo & + ShowExpanded, + ): Promise>; + + remove( + projectId: string | number, + slug: string, + options?: Sudo & ShowExpanded, + ): Promise>; + + show( + projectId: string | number, + slug: string, + options?: { renderHtml?: boolean; version?: string } & Sudo & ShowExpanded, + ): Promise>; + + uploadAttachment( + projectId: string | number, + file: { content: Blob; filename: string }, + options?: { branch?: string } & Sudo & ShowExpanded, + ): Promise>; +} + +export class ProjectWikis extends ResourceWikis { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', options); + } +} diff --git a/packages/core/src/resources/Projects.ts b/packages/core/src/resources/Projects.ts index cc8ec093e..85cdd16b3 100644 --- a/packages/core/src/resources/Projects.ts +++ b/packages/core/src/resources/Projects.ts @@ -1,57 +1,78 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import * as Mime from 'mime/lite'; -import { UserSchema } from './Users'; -import { NamespaceSchema } from './Namespaces'; -import { LicenseTemplateSchema } from './LicenseTemplates'; -import { UploadMetadata, defaultMetadata } from './ProjectImportExport'; -import { +import { RequestHelper, endpoint } from '../infrastructure'; +import type { BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, + Either, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; -import { AccessLevel } from '../templates/types'; +import type { ProjectRemoteMirrorSchema } from './ProjectRemoteMirrors'; +import type { UserSchema } from './Users'; +import type { CondensedNamespaceSchema } from './Namespaces'; +import type { SimpleGroupSchema } from './Groups'; +import type { AccessLevel } from '../templates/ResourceAccessRequests'; -// TODO add missing functions -export interface ProjectSchema extends Record { +export interface ProjectStarrerSchema extends Record { + starred_since: string; + user: Omit; +} + +export interface ProjectStoragePath extends Record { + project_id: string | number; + disk_path: string; + created_at: string; + repository_storage: string; +} + +export interface ProjectStatisticsSchema { + commit_count: number; + storage_size: number; + repository_size: number; + wiki_size: number; + lfs_objects_size: number; + job_artifacts_size: number; + pipeline_artifacts_size: number; + packages_size: number; + snippets_size: number; + uploads_size: number; +} + +export interface CondensedProjectSchema extends Record { id: number; - description?: string; - default_branch?: string; + web_url: string; + name: string; + path: string; +} + +export interface SimpleProjectSchema extends CondensedProjectSchema { + description?: null; + name_with_namespace: string; + path_with_namespace: string; + created_at: string; +} + +export interface ProjectSchema extends SimpleProjectSchema { + id: number; + default_branch: string; ssh_url_to_repo: string; http_url_to_repo: string; web_url: string; readme_url: string; - tag_list?: string[]; topics?: string[]; name: string; - name_with_namespace: string; - namespace: Pick< - NamespaceSchema, - 'id' | 'name' | 'path' | 'kind' | 'full_path' | 'avatar_url' | 'web_url' - >; path: string; - path_with_namespace: string; - created_at: string; last_activity_at: string; forks_count: number; avatar_url: string; star_count: number; } -export interface AccessSchema { - access_level: AccessLevel; - notification_level: number; -} - -export interface SharedWithGroupSchema { - group_id: number; - group_name: string; - group_full_path: string; - group_access_level: number; -} - -export interface ProjectExtendedSchema extends ProjectSchema { +export interface ExpandedProjectSchema extends ProjectSchema { + issues_template?: string; + merge_requests_template?: string; visibility: string; owner: Pick; issues_enabled: boolean; @@ -63,67 +84,31 @@ export interface ProjectExtendedSchema extends ProjectSchema { can_create_merge_request_in: boolean; resolve_outdated_diff_discussions: boolean; container_registry_enabled: boolean; - container_expiration_policy: { - cadence: string; - enabled: boolean; - keep_n?: number; - older_than?: string; - name_regex_delete?: string; - name_regex_keep?: string; - next_run_at: string; - }; + container_registry_access_level: string; creator_id: number; + namespace: CondensedNamespaceSchema; import_status: string; - import_error?: string; - permissions: { - project_access: AccessSchema; - group_access: AccessSchema; - }; archived: boolean; - license_url: string; - license: Pick; shared_runners_enabled: boolean; runners_token: string; ci_default_git_depth: number; ci_forward_deployment_enabled: boolean; public_jobs: boolean; - shared_with_groups?: SharedWithGroupSchema[]; - repository_storage: string; + shared_with_groups?: string[]; only_allow_merge_if_pipeline_succeeds: boolean; allow_merge_on_skipped_pipeline: boolean; restrict_user_defined_variables: boolean; only_allow_merge_if_all_discussions_are_resolved: boolean; remove_source_branch_after_merge: boolean; - printing_merge_requests_link_enabled: boolean; request_access_enabled: boolean; merge_method: string; - auto_devops_enabled: boolean; - auto_devops_deploy_strategy: string; - approvals_before_merge: number; - mirror: boolean; - mirror_user_id: number; - mirror_trigger_builds: boolean; - only_mirror_protected_branches: boolean; - mirror_overwrites_diverged_branches: boolean; - external_authorization_classification_label?: string; - packages_enabled: boolean; - service_desk_enabled: boolean; - service_desk_address?: string; + squash_option: string; autoclose_referenced_issues: boolean; suggestion_commit_message?: string; - marked_for_deletion_at: string; + merge_commit_template?: null; + squash_commit_template?: null; marked_for_deletion_on: string; - compliance_frameworks?: string[]; - statistics: { - commit_count: number; - storage_size: number; - repository_size: number; - wiki_size: number; - lfs_objects_size: number; - job_artifacts_size: number; - packages_size: number; - snippets_size: number; - }; + approvals_before_merge: number; container_registry_image_prefix: string; _links: { self: string; @@ -143,158 +128,648 @@ export interface ProjectFileUploadSchema extends Record { markdown: string; } +export type AllProjectsOptions = { + archived?: boolean; + idAfter?: number; + idBefore?: number; + imported?: boolean; + lastActivityAfter?: string; + lastActivityBefore?: string; + membership?: boolean; + minAccessLevel?: number; + orderBy?: 'id' | 'name' | 'path' | 'created_at' | 'updated_at' | 'last_activity_at'; + owned?: boolean; + repositoryChecksumFailed?: boolean; + repositoryStorage?: string; + searchNamespaces?: boolean; + search?: string; + simple?: boolean; + sort?: 'asc' | 'desc'; + starred?: boolean; + statistics?: boolean; + topic?: string; + topicId?: number; + visibility?: 'public' | 'internal' | 'private'; + wikiChecksumFailed?: boolean; + withCustomAttributes?: boolean; + withIssuesEnabled?: boolean; + withMergeRequestsEnabled?: boolean; + withProgrammingLanguage?: string; + updatedBefore?: string; + updatedAfter?: string; +}; + +export type CreateProjectOptions = { + userId?: number; + avatar?: { content: Blob; filename: string }; + allowMergeOnSkippedPipeline?: boolean; + onlyAllowMergeIfAllStatusChecksPassed?: boolean; + analyticsAccessLevel?: 'disabled' | 'private' | 'enabled'; + approvalsBeforeMerge?: number; + autoCancelPendingPipelines?: string; + autoDevopsDeployStrategy?: 'continuous' | 'manual' | 'timed_incremental'; + autoDevopsEnabled?: boolean; + autocloseReferencedIssues?: boolean; + buildGitStrategy?: string; + buildTimeout?: number; + buildsAccessLevel?: 'disabled' | 'private' | 'enabled'; + ciConfigPath?: string; + containerExpirationPolicyAttributes?: Record; + containerRegistryAccessLevel?: 'disabled' | 'private' | 'enabled'; + defaultBranch?: string; + description?: string; + emailsDisabled?: boolean; + externalAuthorizationClassificationLabel?: string; + forkingAccessLevel?: 'disabled' | 'private' | 'enabled'; + groupWithProjectTemplatesId?: number; + importUrl?: string; + initializeWithReadme?: boolean; + issuesAccessLevel?: 'disabled' | 'private' | 'enabled'; + lfsEnabled?: boolean; + mergeMethod?: string; + mergePipelinesEnabled?: boolean; + mergeRequestsAccessLevel?: 'disabled' | 'private' | 'enabled'; + mergeTrainsEnabled?: boolean; + mirrorTriggerBuilds?: boolean; + mirror?: boolean; + namespaceId?: number; + onlyAllowMergeIfAllDiscussionsAreResolved?: boolean; + onlyAllowMergeIfPipelineSucceeds?: boolean; + packagesEnabled?: boolean; + pagesAccessLevel?: 'disabled' | 'private' | 'enabled' | 'public'; + printingMergeRequestLinkEnabled?: boolean; + publicBuilds?: boolean; + releasesAccessLevel?: 'disabled' | 'private' | 'enabled'; + environmentsAccessLevel?: 'disabled' | 'private' | 'enabled'; + featureFlagsAccessLevel?: 'disabled' | 'private' | 'enabled'; + infrastructureAccessLevel?: 'disabled' | 'private' | 'enabled'; + monitorAccessLevel?: 'disabled' | 'private' | 'enabled'; + removeSourceBranchAfterMerge?: boolean; + repositoryAccessLevel?: 'disabled' | 'private' | 'enabled'; + repositoryStorage?: string; + requestAccessEnabled?: boolean; + requirementsAccessLevel?: 'disabled' | 'private' | 'enabled'; + resolveOutdatedDiffDiscussions?: boolean; + securityAndComplianceAccessLevel?: 'disabled' | 'private' | 'enabled'; + sharedRunnersEnabled?: boolean; + groupRunnersEnabled?: boolean; + snippetsAccessLevel?: 'disabled' | 'private' | 'enabled'; + squashOption?: 'never' | 'always' | 'default_on' | 'default_off'; + templateName?: string; + templateProjectId?: number; + topics?: string[]; + useCustomTemplate?: boolean; + visibility?: 'public' | 'internal' | 'private'; + wikiAccessLevel?: 'disabled' | 'private' | 'enabled'; +}; + +export type EditProjectOptions = { + avatar?: { content: Blob; filename: string }; + allowMergeOnSkippedPipeline?: boolean; + allowPipelineTriggerApproveDeployment?: boolean; + onlyAllowMergeIfAllStatusChecksPassed?: boolean; + analyticsAccessLevel?: 'disabled' | 'private' | 'enabled'; + approvalsBeforeMerge?: number; + autoCancelPendingPipelines?: string; + autoDevopsDeployStrategy?: 'continuous' | 'manual' | 'timed_incremental'; + autoDevopsEnabled?: boolean; + autocloseReferencedIssues?: boolean; + buildGitStrategy?: string; + buildTimeout?: number; + buildsAccessLevel?: 'disabled' | 'private' | 'enabled'; + ciConfigPath?: string; + ciDefaultGitDepth?: number; + ciForwardDeploymentEnabled?: boolean; + ciAllowForkPipelinesToRunInParentProject?: boolean; + ciSeparatedCaches?: boolean; + containerExpirationPolicyAttributes?: Record; + containerRegistryAccessLevel?: string; + defaultBranch?: string; + description?: string; + emailsDisabled?: boolean; + enforceAuthChecksOnUploads?: boolean; + externalAuthorizationClassificationLabel?: string; + forkingAccessLevel?: 'disabled' | 'private' | 'enabled'; + importUrl?: string; + issuesAccessLevel?: 'disabled' | 'private' | 'enabled'; + issuesTemplate?: string; + keepLatestArtifact?: boolean; + lfsEnabled?: boolean; + mergeCommitTemplate?: string; + mergeMethod?: string; + mergePipelinesEnabled?: boolean; + mergeRequestsAccessLevel?: 'disabled' | 'private' | 'enabled'; + mergeRequestsTemplate?: string; + mergeTrainsEnabled?: boolean; + mirrorOverwritesDivergedBranches?: boolean; + mirrorTriggerBuilds?: boolean; + mirrorUserId?: number; + mirror?: boolean; + mrDefaultTargetSelf?: boolean; + name?: string; + onlyAllowMergeIfAllDiscussionsAreResolved?: boolean; + onlyAllowMergeIfPipelineSucceeds?: boolean; + onlyMirrorProtectedBranches?: boolean; + packagesEnabled?: boolean; + pagesAccessLevel?: string; + path?: string; + printingMergeRequestLinkEnabled?: boolean; + publicBuilds?: boolean; + releasesAccessLevel?: 'disabled' | 'private' | 'enabled'; + environmentsAccessLevel?: 'disabled' | 'private' | 'enabled'; + featureFlagsAccessLevel?: 'disabled' | 'private' | 'enabled'; + infrastructureAccessLevel?: 'disabled' | 'private' | 'enabled'; + monitorAccessLevel?: 'disabled' | 'private' | 'enabled'; + removeSourceBranchAfterMerge?: boolean; + repositoryAccessLevel?: 'disabled' | 'private' | 'enabled'; + repositoryStorage?: string; + requestAccessEnabled?: boolean; + requirementsAccessLevel?: 'disabled' | 'private' | 'enabled'; + resolveOutdatedDiffDiscussions?: boolean; + restrictUserDefinedVariables?: boolean; + securityAndComplianceAccessLevel?: 'disabled' | 'private' | 'enabled'; + serviceDeskEnabled?: boolean; + sharedRunnersEnabled?: boolean; + groupRunnersEnabled?: boolean; + snippetsAccessLevel?: 'disabled' | 'private' | 'enabled'; + issueBranchTemplate?: string; + squashCommitTemplate?: string; + squashOption?: 'never' | 'always' | 'default_on' | 'default_off'; + suggestionCommitMessage?: string; + topics?: string[]; + visibility?: 'public' | 'internal' | 'private'; + wikiAccessLevel?: 'disabled' | 'private' | 'enabled'; +}; + +export type ForkProjectOptions = { + description?: string; + mrDefaultTargetSelf?: boolean; + name?: string; + namespaceId?: number; + namespacePath?: string; + namespace?: number | string; + path?: string; + visibility?: 'public' | 'internal' | 'private'; +}; + +export type AllForksOptions = { + archived?: boolean; + membership?: boolean; + minAccessLevel?: 'disabled' | 'private' | 'enabled'; + orderBy?: 'id' | 'name' | 'path' | 'created_at' | 'updated_at' | 'last_activity_at'; + owned?: boolean; + search?: string; + simple?: boolean; + sort?: 'asc' | 'desc'; + starred?: boolean; + statistics?: boolean; + visibility?: 'public' | 'internal' | 'private'; + withCustomAttributes?: boolean; + withIssuesEnabled?: boolean; + withMergeRequestsEnabled?: boolean; + updatedBefore?: string; + updatedAfter?: string; +}; + export class Projects extends BaseResource { - all(options?: PaginatedRequestOptions) { - return RequestHelper.get()(this, 'projects', options); + all( + options: PaginationRequestOptions

& + AllProjectsOptions & + Sudo & + ShowExpanded & { simple: true }, + ): Promise>; + + all( + options: PaginationRequestOptions

& + AllProjectsOptions & + Sudo & + ShowExpanded & { statistics: true }, + ): Promise< + GitlabAPIResponse<(ExpandedProjectSchema & { statistics: ProjectStatisticsSchema })[], C, E, P> + >; + + all( + options?: PaginationRequestOptions

& AllProjectsOptions & Sudo & ShowExpanded, + ): Promise>; + + all( + { + userId, + starredOnly, + ...options + }: { userId?: number; starredOnly?: boolean } & AllProjectsOptions & + PaginationRequestOptions

& + BaseRequestOptions = {} as any, + ): Promise> { + let uri: string; + + if (userId && starredOnly) uri = endpoint`users/${userId}/starred_projects`; + else if (userId) uri = endpoint`users/${userId}/projects`; + else uri = 'projects'; + + return RequestHelper.get()(this, uri, options); } - archive(projectId: string | number, options?: Sudo) { - return RequestHelper.post()( + allTransferLocations( + projectId: string | number, + options?: { search?: string } & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/archive`, + endpoint`projects/${projectId}/transfer_locations`, options, ); } - create({ - userId, - ...options - }: ({ name: string } | { path: string }) & { userId?: number } & BaseRequestOptions) { - const url = userId ? `projects/user/${userId}` : 'projects'; + allUsers( + projectId: string | number, + options?: { search?: string; skipUsers?: number[] } & Sudo & ShowExpanded, + ): Promise[], C, E, void>> { + return RequestHelper.get[]>()( + this, + endpoint`projects/${projectId}/users`, + options, + ); + } - return RequestHelper.post()(this, url, options); + allGroups( + projectId: string | number, + options?: { + search?: string; + skipGroups?: number[]; + withShared?: boolean; + sharedMinAccessLevel?: AccessLevel; + sharedVisibleOnly?: boolean; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/groups`, + options, + ); } - edit(projectId: string | number, options?: BaseRequestOptions) { - return RequestHelper.put()( + allSharableGroups( + projectId: string | number, + options?: { + search?: string; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}`, + endpoint`projects/${projectId}/share_locations`, options, ); } - fork( + allForks( projectId: string | number, - { forkedFromId, ...options }: { forkedFromId?: number } & BaseRequestOptions = {}, - ) { - let url = endpoint`projects/${projectId}/fork`; + options: AllForksOptions & Sudo & ShowExpanded & { simple: true }, + ): Promise>; - if (forkedFromId) url += `/${encodeURIComponent(forkedFromId)}`; + allForks( + projectId: string | number, + options: AllForksOptions & Sudo & ShowExpanded & { statistics: true }, + ): Promise< + GitlabAPIResponse< + (ExpandedProjectSchema & { statistics: ProjectStatisticsSchema })[], + C, + E, + void + > + >; - return RequestHelper.post()(this, url, options); + allForks( + projectId: string | number, + options?: AllForksOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/forks`, + options, + ); } - forks(projectId: string | number, options?: BaseRequestOptions) { - return RequestHelper.get()( + allStarrers( + projectId: string | number, + options?: { search?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/forks`, + endpoint`projects/${projectId}/starrers`, options, ); } - languages(projectId: string | number, options?: Sudo) { - return RequestHelper.get<{ [name: string]: number }>()( + allStoragePaths( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/languages`, + endpoint`projects/${projectId}/storage`, + options, + ); + } + + archive( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/archive`, + options, + ); + } + + create( + { + userId, + avatar, + ...options + }: Either<{ name: string }, { path: string }> & + CreateProjectOptions & + Sudo & + ShowExpanded = {} as any, + ): Promise> { + const url = userId ? `projects/user/${userId}` : 'projects'; + + if (avatar) { + return RequestHelper.post()(this, url, { + ...options, + isForm: true, + avatar: [avatar.content, avatar.filename], + }); + } + + return RequestHelper.post()(this, url, { ...options, avatar }); + } + + createForkRelationship( + projectId: string | number, + forkedFromId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/fork/${forkedFromId}`, options, ); } - mirrorPull(projectId: string | number, options?: Sudo) { - return RequestHelper.post()(this, endpoint`projects/${projectId}/mirror/pull`, options); + // Helper method - Duplicated from ProjectRemoteMirrors + createPullMirror( + projectId: string | number, + url: string, + mirror: boolean, + options?: { + mirrorTriggerBuilds?: boolean; + mirrorBranchRegex?: string; + onlyProtectedBranches?: boolean; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/mirror/pull`, + { + importUrl: url, + mirror, + ...options, + }, + ); } - remove(projectId: string | number, options?: Sudo) { + downloadSnapshot( + projectId: string | number, + options?: { wiki?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, endpoint`projects/${projectId}/snapshot`, options); + } + + edit( + projectId: string | number, + { avatar, ...options }: EditProjectOptions & Sudo & ShowExpanded = {} as any, + ): Promise> { + const url = endpoint`projects/${projectId}`; + + if (avatar) { + return RequestHelper.put()(this, url, { + ...options, + isForm: true, + avatar: [avatar.content, avatar.filename], + }); + } + + return RequestHelper.put()(this, url, { ...options, avatar }); + } + + fork( + projectId: string | number, + options?: ForkProjectOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/fork`, + options, + ); + } + + housekeeping( + projectId: string | number, + options?: { task?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`projects/${projectId}/housekeeping`, options); + } + + importProjectMembers( + projectId: string | number, + sourceProjectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`projects/${projectId}/import_project_members/${sourceProjectId}`, + options, + ); + } + + remove( + projectId: string | number, + options?: { permanentlyRemove?: boolean; fullPath?: string } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()(this, endpoint`projects/${projectId}`, options); } - removeFork(projectId: string | number, options?: Sudo) { + removeForkRelationship( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()(this, endpoint`projects/${projectId}/fork`, options); } - search(projectName: string, options?: BaseRequestOptions) { + removeAvatar( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()(this, endpoint`projects/${projectId}`, { + ...options, + avatar: '', + }); + } + + restore( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`projects/${projectId}/restore`, options); + } + + search( + projectName: string, + options?: { + sort?: 'asc' | 'desc'; + orderBy?: 'id' | 'name' | 'created_at' | 'last_activity_at'; + } & Sudo & + ShowExpanded, + ): Promise> { return RequestHelper.get()(this, 'projects', { search: projectName, ...options, }); } - share( + share( projectId: string | number, groupId: string | number, groupAccess: number, - options?: BaseRequestOptions, - ) { - return RequestHelper.post()(this, endpoint`projects/${projectId}/share`, { + options?: { expiresAt?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`projects/${projectId}/share`, { groupId, groupAccess, ...options, }); } - show(projectId: string | number, options?: BaseRequestOptions) { - return RequestHelper.get()( + show( + projectId: string | number, + options?: { license?: boolean; statistics?: boolean; withCustomAttributes?: boolean } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, endpoint`projects/${projectId}`, options, ); } - star(projectId: string | number, options?: Sudo) { - return RequestHelper.post()( + showLanguages( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get<{ [name: string]: number }>()( + this, + endpoint`projects/${projectId}/languages`, + options, + ); + } + + showPullMirror( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/mirror/pull`, + options, + ); + } + + star( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, endpoint`projects/${projectId}/star`, options, ); } - transfer(projectId: string | number, namespaceId: string | number) { - return RequestHelper.put()( + transfer( + projectId: string | number, + namespaceId: string | number, + options?: Sudo & ShowExpanded, + ) { + return RequestHelper.put()( this, endpoint`projects/${projectId}/transfer`, { + ...options, namespace: namespaceId, }, ); } - unarchive(projectId: string | number, options?: Sudo) { - return RequestHelper.post()( + unarchive( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, endpoint`projects/${projectId}/unarchive`, options, ); } - unshare(projectId: string | number, groupId: string | number, options?: Sudo) { + unshare( + projectId: string | number, + groupId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()(this, endpoint`projects/${projectId}/share/${groupId}`, options); } - unstar(projectId: string | number, options?: Sudo) { - return RequestHelper.post()( + unstar( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, endpoint`projects/${projectId}/unstar`, options, ); } - upload( + upload( projectId: string | number, - content: string, - { metadata, ...options }: { metadata?: UploadMetadata } & BaseRequestOptions = {}, - ) { - const meta = { ...defaultMetadata, ...metadata }; - - if (!meta.contentType) meta.contentType = Mime.getType(meta.filename) || undefined; - + file: { content: Blob; filename: string }, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/uploads`, { - isForm: true, - file: [content, meta], ...options, + isForm: true, + file: [file.content, file.filename], }, ); } + + uploadAvatar( + projectId: string | number, + avatar: { content: Blob; filename: string }, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put<{ avatar_url: string }>()(this, endpoint`projects/${projectId}`, { + ...options, + isForm: true, + avatar: [avatar.content, avatar.filename], + }); + } } diff --git a/packages/core/src/resources/ProtectedBranches.ts b/packages/core/src/resources/ProtectedBranches.ts index 582f26e5e..a08a9c487 100644 --- a/packages/core/src/resources/ProtectedBranches.ts +++ b/packages/core/src/resources/ProtectedBranches.ts @@ -1,9 +1,10 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; @@ -19,12 +20,35 @@ export interface ProtectedBranchSchema extends Record { name: string; push_access_levels?: ProtectedBranchAccessLevel[]; merge_access_levels?: ProtectedBranchAccessLevel[]; + unprotect_access_levels?: ProtectedBranchAccessLevel[]; allow_force_push: boolean; code_owner_approval_required: boolean; } +export type CreateProtectedBranchOptions = { + allowForcePush?: boolean; + allowedToMerge?: Record[]; + allowedToPush?: Record[]; + allowedToUnprotect?: Record[]; + codeOwnerApprovalRequired?: boolean; + mergeAccessLevel?: ProtectedBranchAccessLevel; + pushAccessLevel?: ProtectedBranchAccessLevel; + unprotectAccessLevel?: ProtectedBranchAccessLevel; +}; + +export type EditProtectedBranchOptions = { + allowForcePush?: boolean; + allowedToMerge?: Record[]; + allowedToPush?: Record[]; + allowedToUnprotect?: Record[]; + codeOwnerApprovalRequired?: boolean; +}; + export class ProtectedBranches extends BaseResource { - all(projectId: string | number, options: { search?: string } & PaginatedRequestOptions = {}) { + all( + projectId: string | number, + options?: { search?: string } & Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/protected_branches`, @@ -32,20 +56,53 @@ export class ProtectedBranches extends BaseResource( + projectId: string | number, + branchName: string, + options?: CreateProtectedBranchOptions & Sudo & ShowExpanded, + ): Promise> { + const { sudo, showExpanded, ...opts } = options || {}; + return RequestHelper.post()( this, endpoint`projects/${projectId}/protected_branches`, { - query: { + searchParams: { + ...opts, name: branchName, - ...options, }, + sudo, + showExpanded, }, ); } - show(projectId: string | number, branchName: string, options?: Sudo) { + // Convenience method - create + protect( + projectId: string | number, + branchName: string, + options?: CreateProtectedBranchOptions & Sudo & ShowExpanded, + ): Promise> { + return this.create(projectId, branchName, options); + } + + edit( + projectId: string | number, + branchName: string, + options?: EditProtectedBranchOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.patch()( + this, + endpoint`projects/${projectId}/protected_branches/${branchName}`, + options, + ); + } + + show( + projectId: string | number, + branchName: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/protected_branches/${branchName}`, @@ -53,11 +110,24 @@ export class ProtectedBranches extends BaseResource( + projectId: string | number, + branchName: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, endpoint`projects/${projectId}/protected_branches/${branchName}`, options, ); } + + // Convenience method - remove + unprotect( + projectId: string | number, + branchName: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return this.remove(projectId, branchName, options); + } } diff --git a/packages/core/src/resources/ProtectedTags.ts b/packages/core/src/resources/ProtectedTags.ts index b897a70c6..ebce35fa1 100644 --- a/packages/core/src/resources/ProtectedTags.ts +++ b/packages/core/src/resources/ProtectedTags.ts @@ -1,24 +1,38 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + Either3, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; -export interface ProtectedTagAccessLevel { - access_level: 0 | 30 | 40 | 60; +export type ProtectedTagAccessLevel = 0 | 30 | 40 | 60; + +export interface ProtectedTagAccessLevelSummarySchema { + id: number; + access_level: ProtectedTagAccessLevel; access_level_description: string; } export interface ProtectedTagSchema extends Record { name: string; - create_access_levels?: ProtectedTagAccessLevel[]; + create_access_levels?: ProtectedTagAccessLevelSummarySchema[]; } +export type ProtectedTagAccessLevelEntity = Either3< + { userId: number }, + { groupId: number }, + { accessLevel: number } +>; + export class ProtectedTags extends BaseResource { - all(projectId: string | number, options?: PaginatedRequestOptions) { + all( + projectId: string | number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/protected_tags`, @@ -26,18 +40,36 @@ export class ProtectedTags extends BaseResource { ); } - protect(projectId: string | number, tagName: string, options?: BaseRequestOptions) { + create( + projectId: string | number, + tagName: string, + options?: { + createAccessLevel?: ProtectedTagAccessLevel; + allowedToCreate: ProtectedTagAccessLevelEntity; + } & Sudo & + ShowExpanded, + ): Promise> { + const { sudo, showExpanded, ...opts } = options || {}; + return RequestHelper.post()( this, endpoint`projects/${projectId}/protected_tags`, { - name: tagName, - ...options, + searchParams: { + name: tagName, + ...opts, + }, + sudo, + showExpanded, }, ); } - show(projectId: string | number, tagName: string, options?: Sudo) { + show( + projectId: string | number, + tagName: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/protected_tags/${tagName}`, @@ -45,7 +77,11 @@ export class ProtectedTags extends BaseResource { ); } - unprotect(projectId: string | number, tagName: string, options?: Sudo) { + remove( + projectId: string | number, + tagName: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, endpoint`projects/${projectId}/protected_tags/${tagName}`, diff --git a/packages/core/src/resources/PushRules.ts b/packages/core/src/resources/PushRules.ts deleted file mode 100644 index f24290bfd..000000000 --- a/packages/core/src/resources/PushRules.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { BaseResource } from '@gitbeaker/requester-utils'; -import { RequestHelper, BaseRequestOptions, Sudo, endpoint } from '../infrastructure'; - -export interface PushRulesSchema extends Record { - id: number; - project_id: number; - commit_message_regex: string; - commit_message_negative_regex: string; - branch_name_regex: string; - deny_delete_tag: boolean; - created_at: string; - member_check: boolean; - prevent_secrets: boolean; - author_email_regex: string; - file_name_regex: string; - max_file_size: number; - commit_committer_check?: boolean; - reject_unsigned_commits?: boolean; -} - -export class PushRules extends BaseResource { - create(projectId: string | number, options?: BaseRequestOptions) { - return RequestHelper.post()( - this, - endpoint`projects/${projectId}/push_rule`, - options, - ); - } - - edit(projectId: string | number, options?: BaseRequestOptions) { - return RequestHelper.put()( - this, - endpoint`projects/${projectId}/push_rule`, - options, - ); - } - - remove(projectId: string | number, options?: Sudo) { - return RequestHelper.del()( - this, - endpoint`projects/${projectId}/push_rule`, - options, - ); - } - - show(projectId: string | number, options?: Sudo) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/push_rule`, - options, - ); - } -} diff --git a/packages/core/src/resources/PyPI.ts b/packages/core/src/resources/PyPI.ts new file mode 100644 index 000000000..14bf9784e --- /dev/null +++ b/packages/core/src/resources/PyPI.ts @@ -0,0 +1,64 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { Either, GitlabAPIResponse, ShowExpanded } from '../infrastructure'; + +export class PyPI extends BaseResource { + downloadPackageFile( + sha: string, + fileIdentifier: string, + { + projectId, + groupId, + ...options + }: Either<{ projectId: string | number }, { groupId: string | number }> & ShowExpanded, + ): Promise> { + let url = endpoint`packages/pypi/files/${sha}/${fileIdentifier}`; + + if (projectId) { + url = endpoint`projects/${projectId}/${url}`; + } else if (groupId) { + url = endpoint`groups/${groupId}/${url}`; + } else { + throw new Error( + 'Missing required argument. Please supply a projectId or a groupId in the options parameter', + ); + } + + return RequestHelper.get()(this, url, options as ShowExpanded); + } + + showPackageDescriptor( + packageName: string, + { + projectId, + groupId, + ...options + }: Either<{ projectId: string | number }, { groupId: string | number }> & ShowExpanded, + ): Promise> { + let url = `packages/pypi/simple/${packageName}`; + + if (projectId) { + url = endpoint`projects/${projectId}/${url}`; + } else if (groupId) { + url = endpoint`groups/${groupId}/${url}`; + } else { + throw new Error( + 'Missing required argument. Please supply a projectId or a groupId in the options parameter', + ); + } + + return RequestHelper.get()(this, url, options as ShowExpanded); + } + + uploadPackageFile( + projectId: string | number, + packageFile: { content: Blob; filename: string }, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.put()(this, endpoint`projects/${projectId}/packages/pypi`, { + isForm: true, + ...options, + file: [packageFile.content, packageFile.filename], + }); + } +} diff --git a/packages/core/src/resources/ReleaseLinks.ts b/packages/core/src/resources/ReleaseLinks.ts index 443b4830a..598b64c4a 100644 --- a/packages/core/src/resources/ReleaseLinks.ts +++ b/packages/core/src/resources/ReleaseLinks.ts @@ -1,5 +1,12 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { RequestHelper, PaginatedRequestOptions, Sudo, endpoint } from '../infrastructure'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface ReleaseLinkSchema extends Record { id: number; @@ -10,7 +17,11 @@ export interface ReleaseLinkSchema extends Record { } export class ReleaseLinks extends BaseResource { - all(projectId: string | number, tagName: string, options?: PaginatedRequestOptions) { + all( + projectId: string | number, + tagName: string, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/releases/${tagName}/assets/links`, @@ -18,13 +29,13 @@ export class ReleaseLinks extends BaseResource { ); } - create( + create( projectId: string | number, tagName: string, name: string, url: string, - options?: Sudo & { filePath?: string; linkType?: string }, - ) { + options?: Sudo & { filePath?: string; linkType?: string; directAssetPath?: string }, + ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/releases/${tagName}/assets/links`, @@ -36,12 +47,19 @@ export class ReleaseLinks extends BaseResource { ); } - edit( + edit( projectId: string | number, tagName: string, linkId: number, - options?: Sudo & { name?: string; url?: string; filePath?: string; linkType?: string }, - ) { + options?: Sudo & + ShowExpanded & { + name?: string; + url?: string; + filePath?: string; + linkType?: string; + directAssetPath?: string; + }, + ): Promise> { return RequestHelper.put()( this, endpoint`projects/${projectId}/releases/${tagName}/assets/links/${linkId}`, @@ -49,7 +67,12 @@ export class ReleaseLinks extends BaseResource { ); } - remove(projectId: string | number, tagName: string, linkId: number, options?: Sudo) { + remove( + projectId: string | number, + tagName: string, + linkId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, endpoint`projects/${projectId}/releases/${tagName}/assets/links/${linkId}`, @@ -57,7 +80,12 @@ export class ReleaseLinks extends BaseResource { ); } - show(projectId: string | number, tagName: string, linkId: number, options?: Sudo) { + show( + projectId: string | number, + tagName: string, + linkId: number, + options?: Sudo & ShowExpanded, + ) { return RequestHelper.get()( this, endpoint`projects/${projectId}/releases/${tagName}/assets/links/${linkId}`, diff --git a/packages/core/src/resources/Releases.ts b/packages/core/src/resources/Releases.ts deleted file mode 100644 index bd75cf36d..000000000 --- a/packages/core/src/resources/Releases.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { BaseResource } from '@gitbeaker/requester-utils'; -import { UserSchema } from './Users'; -import { CommitSchema } from './Commits'; -import { MilestoneSchema } from '../templates/types'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, - Sudo, -} from '../infrastructure'; - -export interface ReleaseEvidence { - sha: string; - filepath: string; - collected_at: string; -} - -export interface ReleaseAssetSource { - format: string; - url: string; -} - -export interface ReleaseAssetLink { - id: number; - name: string; - url: string; - external: boolean; - link_type: string; -} - -export interface ReleaseSchema extends Record { - tag_name: string; - description: string; - name: string; - description_html: string; - created_at: string; - released_at: string; - user: Pick; - commit: CommitSchema; - milestones?: MilestoneSchema[]; - commit_path: string; - tag_path: string; - assets: { - count: number; - sources?: ReleaseAssetSource[]; - links?: ReleaseAssetLink[]; - evidence_file_path: string; - }; - evidences?: ReleaseEvidence[]; -} - -// TODO: Add missing functions -export class Releases extends BaseResource { - all(projectId: string | number, options?: PaginatedRequestOptions) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/releases`, - options, - ); - } - - create(projectId: string | number, options?: BaseRequestOptions) { - return RequestHelper.post()( - this, - endpoint`projects/${projectId}/releases`, - options, - ); - } - - edit(projectId: string | number, tagName: string, options?: BaseRequestOptions) { - return RequestHelper.put()( - this, - endpoint`projects/${projectId}/releases/${tagName}`, - options, - ); - } - - remove(projectId: string | number, tagName: string, options?: Sudo) { - return RequestHelper.del()(this, endpoint`projects/${projectId}/releases/${tagName}`, options); - } - - show(projectId: string | number, tagName: string, options?: Sudo) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/releases/${tagName}`, - options, - ); - } -} diff --git a/packages/core/src/resources/Repositories.ts b/packages/core/src/resources/Repositories.ts index d65babaf6..0a1d9ccc0 100644 --- a/packages/core/src/resources/Repositories.ts +++ b/packages/core/src/resources/Repositories.ts @@ -1,18 +1,23 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { CommitSchema, CommitDiffSchema } from './Commits'; -import { RequestHelper, Sudo, BaseRequestOptions, endpoint } from '../infrastructure'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + AsStream, + GitlabAPIResponse, + PaginationRequestOptions, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { CommitDiffSchema, CommitSchema, CondensedCommitSchema } from './Commits'; -type ArchiveType = 'tar.gz' | 'tar.bz2' | 'tbz' | 'tbz2' | 'tb2' | 'bz2' | 'tar' | 'zip'; +export type ArchiveType = 'tar.gz' | 'tar.bz2' | 'tbz' | 'tbz2' | 'tb2' | 'bz2' | 'tar' | 'zip'; + +export interface RepositoryChangelogSchema extends Record { + notes: string; +} export interface RepositoryCompareSchema extends Record { - commit: Pick< - CommitSchema, - 'id' | 'short_id' | 'title' | 'author_name' | 'author_email' | 'created_at' - >; - commits?: Pick< - CommitSchema, - 'id' | 'short_id' | 'title' | 'author_name' | 'author_email' | 'created_at' - >[]; + commit: Omit; + commits?: Omit[]; diffs?: CommitDiffSchema[]; compare_timeout: boolean; compare_same_ref: boolean; @@ -34,8 +39,71 @@ export interface RepositoryTreeSchema extends Record { mode: string; } +export interface RepositoryBlobSchema extends Record { + size: number; + encoding: string; + content: string; + sha: string; +} + +export type AllRepositoryTreesOptions = { + pageToken?: string; + path?: string; + recursive?: boolean; + ref?: string; +}; + +export type EditChangelogOptions = { + branch?: string; + configFile?: string; + date?: string; + file?: string; + from?: string; + message?: string; + to?: string; + trailer?: string; +}; + +export type ShowChangelogOptions = { + configFile?: string; + date?: string; + from?: string; + to?: string; + trailer?: string; +}; + export class Repositories extends BaseResource { - compare(projectId: string | number, from: string, to: string, options?: Sudo) { + allContributors( + projectId: string | number, + options?: { orderBy?: string; sort?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/repository/contributors`, + options, + ); + } + + allRepositoryTrees( + projectId: string | number, + options?: AllRepositoryTreesOptions & + PaginationRequestOptions<'keyset'> & + Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/repository/tree`, + options, + ); + } + + compare( + projectId: string | number, + from: string, + to: string, + options?: { fromProjectId?: string | number; straight?: string } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/repository/compare`, @@ -47,15 +115,23 @@ export class Repositories extends BaseResource { ); } - contributors(projectId: string | number, options?: Sudo) { - return RequestHelper.get()( + editChangelog( + projectId: string | number, + version: string, + options?: EditChangelogOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, - endpoint`projects/${projectId}/repository/contributors`, - options, + endpoint`projects/${projectId}/repository/changelog`, + { version, ...options }, ); } - mergeBase(projectId: string | number, refs: string[], options?: Sudo) { + mergeBase( + projectId: string | number, + refs: string[], + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/repository/merge_base`, @@ -66,38 +142,67 @@ export class Repositories extends BaseResource { ); } - showArchive( + showArchive( projectId: string | number, - { fileType = 'tar.gz', ...options }: { fileType?: ArchiveType } & Sudo = {}, - ) { - return RequestHelper.get()( + options: { fileType?: ArchiveType; sha?: string; path?: string; asStream: true } & Sudo & + ShowExpanded, + ): Promise>; + + showArchive( + projectId: string | number, + options?: { fileType?: ArchiveType; sha?: string; path?: string; asStream?: boolean } & Sudo & + ShowExpanded, + ): Promise>; + + showArchive( + projectId: string | number, + { + fileType = 'tar.gz', + ...options + }: { fileType?: ArchiveType; sha?: string; path?: string } & AsStream & + ShowExpanded & + Sudo = {} as { fileType: ArchiveType }, + ): Promise { + return RequestHelper.get()( this, endpoint`projects/${projectId}/repository/archive.${fileType}`, - options as Record, - ) as unknown as Promise; + options as { sha?: string; path?: string } & AsStream & ShowExpanded & Sudo, + ); } - showBlob(projectId: string | number, sha: string, options?: Sudo) { - return RequestHelper.get()( + showBlob( + projectId: string | number, + sha: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, endpoint`projects/${projectId}/repository/blobs/${sha}`, options, - ) as unknown as Promise; + ); } - showBlobRaw(projectId: string | number, sha: string, options?: Sudo) { - return RequestHelper.get()( + showBlobRaw( + projectId: string | number, + sha: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, endpoint`projects/${projectId}/repository/blobs/${sha}/raw`, options, - ) as unknown as Promise; + ); } - tree(projectId: string | number, options?: BaseRequestOptions) { - return RequestHelper.get()( + showChangelog( + projectId: string | number, + version: string, + options?: ShowChangelogOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`projects/${projectId}/repository/tree`, - options, + endpoint`projects/${projectId}/repository/changelog`, + { version, ...options }, ); } } diff --git a/packages/core/src/resources/RepositoryFiles.ts b/packages/core/src/resources/RepositoryFiles.ts index db7c05af2..f5161c34a 100644 --- a/packages/core/src/resources/RepositoryFiles.ts +++ b/packages/core/src/resources/RepositoryFiles.ts @@ -1,8 +1,9 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { CommitSchema } from './Commits'; -import { RequestHelper, BaseRequestOptions, endpoint, Sudo } from '../infrastructure'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; +import type { CommitSchema } from './Commits'; -export interface RepositoryFileExtendedSchema extends Record { +export interface RepositoryFileExpandedSchema extends Record { file_name: string; file_path: string; size: number; @@ -25,15 +26,55 @@ export interface RepositoryFileSchema extends Record { branch: string; } +export type CreateRepositoryFileOptions = { + authorEmail?: string; + authorName?: string; + encoding?: string; + executeFilemode?: boolean; + startBranch?: string; +}; + +export type EditRepositoryFileOptions = { + authorEmail?: string; + authorName?: string; + encoding?: string; + executeFilemode?: boolean; + startBranch?: string; + lastCommitId?: string; +}; + +export type RemoveRepositoryFileOptions = { + authorEmail?: string; + authorName?: string; + startBranch?: string; + lastCommitId?: string; +}; + export class RepositoryFiles extends BaseResource { - create( + allFileBlames( + projectId: string | number, + filePath: string, + ref: string, + options?: { range?: { start: number; end: number } } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/repository/files/${filePath}/blame`, + { + ref, + ...options, + }, + ); + } + + create( projectId: string | number, filePath: string, branch: string, content: string, commitMessage: string, - options?: BaseRequestOptions, - ) { + options?: CreateRepositoryFileOptions & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/repository/files/${filePath}`, @@ -46,14 +87,14 @@ export class RepositoryFiles extends BaseResource ); } - edit( + edit( projectId: string | number, filePath: string, branch: string, content: string, commitMessage: string, - options?: BaseRequestOptions, - ) { + options?: EditRepositoryFileOptions & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.put()( this, endpoint`projects/${projectId}/repository/files/${filePath}`, @@ -66,13 +107,13 @@ export class RepositoryFiles extends BaseResource ); } - remove( + remove( projectId: string | number, filePath: string, branch: string, commitMessage: string, - options?: BaseRequestOptions, - ) { + options?: RemoveRepositoryFileOptions & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()(this, endpoint`projects/${projectId}/repository/files/${filePath}`, { branch, commitMessage, @@ -80,8 +121,13 @@ export class RepositoryFiles extends BaseResource }); } - show(projectId: string | number, filePath: string, ref: string, options?: Sudo) { - return RequestHelper.get()( + show( + projectId: string | number, + filePath: string, + ref: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, endpoint`projects/${projectId}/repository/files/${filePath}`, { @@ -91,19 +137,19 @@ export class RepositoryFiles extends BaseResource ); } - showBlame(projectId: string | number, filePath: string, options?: Sudo) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/repository/files/${filePath}/blame`, - options, - ); - } - - showRaw(projectId: string | number, filePath: string, options?: BaseRequestOptions) { - return RequestHelper.get()( + showRaw( + projectId: string | number, + filePath: string, + ref: string, + options?: { lfs?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, endpoint`projects/${projectId}/repository/files/${filePath}/raw`, - options, - ) as unknown as Promise; + { + ref, + ...options, + }, + ); } } diff --git a/packages/core/src/resources/RepositorySubmodules.ts b/packages/core/src/resources/RepositorySubmodules.ts index e34661aad..b25226692 100644 --- a/packages/core/src/resources/RepositorySubmodules.ts +++ b/packages/core/src/resources/RepositorySubmodules.ts @@ -1,36 +1,26 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { BaseRequestOptions, endpoint, RequestHelper } from '../infrastructure'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; +import type { CommitSchema } from './Commits'; -export interface RepositorySubmoduleSchema extends Record { - id: string; - short_id: string; - title: string; - author_name: string; - author_email: string; - committer_name: string; - committer_email: string; - created_at: string; - message: string; - parent_ids: string[]; - committed_date: Date; - authored_date: Date; +export interface RepositorySubmoduleSchema extends CommitSchema { status?: string; } export class RepositorySubmodules extends BaseResource { - edit( + edit( projectId: string | number, submodule: string, branch: string, - commit_sha: string, - options?: BaseRequestOptions, - ) { + commitSha: string, + options?: { commitMessage?: string } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.put()( this, endpoint`projects/${projectId}/repository/submodules/${submodule}`, { branch, - commit_sha, + commitSha, ...options, }, ); diff --git a/packages/core/src/resources/ResourceGroups.ts b/packages/core/src/resources/ResourceGroups.ts new file mode 100644 index 000000000..2e229c572 --- /dev/null +++ b/packages/core/src/resources/ResourceGroups.ts @@ -0,0 +1,66 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { JobSchema } from './Jobs'; + +export interface ResourceGroupSchema extends Record { + id: number; + key: string; + process_mode: string; + created_at: string; + updated_at: string; +} + +export class ResourceGroups extends BaseResource { + all( + projectId: string | number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/resource_groups`, + options, + ); + } + + edit( + projectId: string | number, + key: string, + options?: { processMode?: string } & Sudo & ShowExpanded, + ) { + return RequestHelper.put()( + this, + endpoint`projects/${projectId}/resource_groups/${key}`, + options, + ); + } + + show( + projectId: string | number, + key: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/resource_groups/${key}`, + options, + ); + } + + allUpcomingJobs( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/resource_groups/upcoming_jobs`, + options, + ); + } +} diff --git a/packages/core/src/resources/RubyGems.ts b/packages/core/src/resources/RubyGems.ts new file mode 100644 index 000000000..c7dd1e042 --- /dev/null +++ b/packages/core/src/resources/RubyGems.ts @@ -0,0 +1,40 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded } from '../infrastructure'; + +export class RubyGems extends BaseResource { + allDependencies( + projectId: string, + options?: { gems?: string } & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/packages/rubygems/api/v1/dependencies`, + options, + ); + } + + downloadGemFile( + projectId: string, + fileName: string, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/packages/rubygems/gems/${fileName}`, + options, + ); + } + + uploadGemFile( + projectId: string | number, + packageFile: { content: Blob; filename: string }, + options?: ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, `projects/${projectId}/packages/rubygems/api/v1/gems`, { + isForm: true, + ...options, + file: [packageFile.content, packageFile.filename], + }); + } +} diff --git a/packages/core/src/resources/Runners.ts b/packages/core/src/resources/Runners.ts index 68d08b6d6..0ccd54f13 100644 --- a/packages/core/src/resources/Runners.ts +++ b/packages/core/src/resources/Runners.ts @@ -1,32 +1,44 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { ProjectSchema } from './Projects'; -import { JobSchema } from './Jobs'; -import { +import { RequestHelper, endpoint } from '../infrastructure'; +import type { BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, + Either, + EitherOrNone, + EitherOrNone3, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; +import type { JobSchema } from './Jobs'; +import type { SimpleProjectSchema } from './Projects'; + +export interface RunnerToken extends Record { + id: number; + token: string; + token_expires_at: string; +} export interface RunnerSchema extends Record { id: number; + paused: boolean; description: string; ip_address: string; - active: boolean; is_shared: boolean; + runner_type: 'instance_type' | 'group_type' | 'project_type'; name: string; online: boolean; - status: 'running' | 'success' | 'failed' | 'canceled'; + status: 'online' | 'offline'; } -export interface RunnerExtendedSchema extends RunnerSchema { +export interface ExpandedRunnerSchema extends RunnerSchema { architecture?: string; description: string; contacted_at: string; platform?: string; projects?: Pick< - ProjectSchema, + SimpleProjectSchema, 'id' | 'name' | 'name_with_namespace' | 'path' | 'path_with_namespace' >; revision?: string; @@ -36,41 +48,170 @@ export interface RunnerExtendedSchema extends RunnerSchema { maximum_timeout?: number; } +export type AllRunnersOptions = { + type?: 'instance_type' | 'group_type' | 'project_type'; + status?: 'online' | 'offline' | 'stale' | 'never_contacted' | 'active' | 'paused'; + paused?: boolean; + tagList?: string[]; +}; + +export type EditRunnerOptions = { + description?: string; + active?: boolean; + paused?: boolean; + tagList?: string[]; + runUntagged?: boolean; + locked?: boolean; + accessLevel?: 'not_protected' | 'ref_protected'; + maximumTimeout?: number; +}; + +export type CreateRunnerOptions = { + info?: Record; + description?: string; + active?: boolean; + paused?: boolean; + tagList?: string[]; + runUntagged?: boolean; + locked?: boolean; + accessLevel?: 'not_protected' | 'ref_protected'; + maximumTimeout?: number; + maintainerNote?: string; + maintenanceNote?: string; +}; + export class Runners extends BaseResource { - all({ projectId, ...options }: { projectId?: string | number } & PaginatedRequestOptions = {}) { - const url = projectId ? endpoint`projects/${projectId}/runners` : 'runners/all'; + all( + { + projectId, + groupId, + owned, + ...options + }: EitherOrNone3< + { projectId?: string | number }, + { owned?: boolean }, + { groupId?: string | number } + > & + AllRunnersOptions & + BaseRequestOptions & + PaginationRequestOptions

= {} as any, + ): Promise> { + let url: string; + + if (projectId) url = endpoint`projects/${projectId}/runners`; + else if (groupId) url = endpoint`groups/${groupId}/runners`; + else if (owned) url = 'runners'; + else url = 'runners/all'; return RequestHelper.get()(this, url, options); } - allOwned(options?: BaseRequestOptions) { - return RequestHelper.get()(this, 'runners', options); + allJobs( + runnerId: number, + options?: Sudo & ShowExpanded & { status?: string; orderBy?: string; sort?: string }, + ): Promise> { + return RequestHelper.get()(this, `runners/${runnerId}/jobs`, options); + } + + // https://docs.gitlab.com/15.9/ee/api/runners.html#register-a-new-runner + create( + token: string, + options?: CreateRunnerOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, `runners`, { + token, + ...options, + }); } - edit(runnerId: number, options?: BaseRequestOptions) { - return RequestHelper.put()(this, `runners/${runnerId}`, options); + edit( + runnerId: number, + options?: EditRunnerOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()(this, `runners/${runnerId}`, options); } - enable(projectId: string | number, runnerId: number, options?: Sudo) { + enable( + projectId: string | number, + runnerId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()(this, endpoint`projects/${projectId}/runners`, { runnerId, ...options, }); } - disable(projectId: string | number, runnerId: number, options?: Sudo) { + disable( + projectId: string | number, + runnerId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()(this, endpoint`projects/${projectId}/runners/${runnerId}`, options); } - jobs(runnerId: number, options?: Sudo) { - return RequestHelper.get()(this, `runners/${runnerId}/jobs`, options); + // Create - Convenience method + register( + token: string, + options?: CreateRunnerOptions & Sudo & ShowExpanded, + ): Promise> { + return this.create(token, options); + } + + remove({ + runnerId, + token, + ...options + }: Either<{ runnerId: number }, { token: string }> & Sudo & ShowExpanded): Promise< + GitlabAPIResponse + > { + let url: string; + + if (runnerId) url = `runners/${runnerId}`; + else if (token) { + url = 'runners'; + } else + throw new Error( + 'Missing required argument. Please supply a runnerId or a token in the options parameter', + ); + + return RequestHelper.del()(this, url, { + token, + ...options, + }); + } + + resetRegistrationToken( + { + runnerId, + token, + ...options + }: EitherOrNone<{ runnerId: string }, { token: string }> & Sudo & ShowExpanded = {} as any, + ): Promise> { + let url: string; + + if (runnerId) url = endpoint`runners/${runnerId}/reset_registration_token`; + else if (token) url = 'runners/reset_registration_token'; + else { + throw new Error('Missing either runnerId or token parameters'); + } + + return RequestHelper.post()(this, url, { + token, + ...options, + }); } - remove(runnerId: number, options?: Sudo) { - return RequestHelper.del()(this, `runners/${runnerId}`, options); + show( + runnerId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, `runners/${runnerId}`, options); } - show(runnerId: number, options?: Sudo) { - return RequestHelper.get()(this, `runners/${runnerId}`, options); + verify( + options?: { systemId?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, `runners/verify`, options); } } diff --git a/packages/core/src/resources/Search.ts b/packages/core/src/resources/Search.ts index 55a29bbc7..71743a14f 100644 --- a/packages/core/src/resources/Search.ts +++ b/packages/core/src/resources/Search.ts @@ -1,49 +1,172 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { RequestHelper, BaseRequestOptions, endpoint } from '../infrastructure'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + EitherOrNone, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { ProjectSchema } from './Projects'; +import type { IssueSchema } from './Issues'; +import type { MergeRequestSchema } from './MergeRequests'; +import type { MilestoneSchema } from '../templates/ResourceMilestones'; +import type { SimpleSnippetSchema } from './Snippets'; +import type { CommitSchema } from './Commits'; +import type { NoteSchema } from '../templates/ResourceNotes'; +import type { UserSchema } from './Users'; -export interface SearchResultSchema extends Record { +export interface BlobSchema extends Record { id: number; - description: string; - name: string; - name_with_namespace: string; + basename: string; + data: string; path: string; - path_with_namespace: string; - created_at: string; - default_branch: string; - tag_list?: string[]; - ssh_url_to_repo: string; - http_url_to_repo: string; - web_url: string; - avatar_url?: string; - star_count: number; - forks_count: number; - last_activity_at: string; + filename: string; + ref: string; + startline: number; + project_id: number; } +export type SearchScopes = + | 'projects' + | 'issues' + | 'merge_requests' + | 'milestones' + | 'snippet_titles' + | 'wiki_blobs' + | 'commits' + | 'blobs' + | 'notes' + | 'users'; + +export type AllSearchOptions = { + orderBy?: 'created_at'; + state?: 'issues' | 'merge_requests'; + confidential?: boolean; +}; + export class Search extends BaseResource { - all( - scope: string, - search: string, - { - projectId, - groupId, - ...options - }: { projectId?: string | number; groupId?: string | number } & BaseRequestOptions = {}, - ) { + all( + scope: 'users', + search: string, + options?: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & + AllSearchOptions & + Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): Promise>; + + all( + scope: 'notes', + search: string, + options?: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & + AllSearchOptions & + Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): Promise>; + + all( + scope: 'blobs', + search: string, + options?: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & + AllSearchOptions & + Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): Promise>; + + all( + scope: 'commits', + search: string, + options?: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & + AllSearchOptions & + Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): Promise>; + + all( + scope: 'wiki_blobs', + search: string, + options?: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & + AllSearchOptions & + Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): Promise>; + + all( + scope: 'snippet_titles', + search: string, + options?: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & + AllSearchOptions & + Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): Promise>; + + all( + scope: 'milestones', + search: string, + options?: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & + AllSearchOptions & + Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): Promise>; + + all( + scope: 'merge_requests', + search: string, + options?: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & + AllSearchOptions & + Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): Promise>; + + all( + scope: 'issues', + search: string, + options?: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & + AllSearchOptions & + Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): Promise>; + + all( + scope: 'projects', + search: string, + options?: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & + AllSearchOptions & + Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): Promise>; + + all( + scope: SearchScopes, + search: string, + options?: EitherOrNone<{ projectId: string | number }, { groupId: string | number }> & + AllSearchOptions & + Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): any { + const { projectId, groupId, ...opts } = options || {}; let url: string; - if (projectId) { - url = endpoint`projects/${projectId}/`; - } else if (groupId) { - url = endpoint`groups/${groupId}/`; - } else { - url = ''; - } + if (projectId) url = endpoint`projects/${projectId}/`; + else if (groupId) url = endpoint`groups/${groupId}/`; + else url = ''; - return RequestHelper.get()(this, `${url}search`, { + return RequestHelper.get()(this, `${url}search`, { scope, search, - ...options, + ...opts, }); } } diff --git a/packages/core/src/resources/SecureFiles.ts b/packages/core/src/resources/SecureFiles.ts new file mode 100644 index 000000000..b65422112 --- /dev/null +++ b/packages/core/src/resources/SecureFiles.ts @@ -0,0 +1,98 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface SecureFileSchema extends Record { + id: number; + name: string; + checksum: string; + checksum_algorithm: string; + created_at: string; + expires_at?: string; + metadata?: { + id: string; + issuer: { + C: string; + O: string; + CN: string; + OU: string; + }; + subject: { + C: string; + O: string; + CN: string; + OU: string; + UID: string; + }; + expires_at: string; + }; +} + +export class SecureFiles extends BaseResource { + all( + projectId: string | number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/secure_files`, + options, + ); + } + + create( + projectId: string | number, + name: string, + file: { content: Blob; filename: string }, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, `projects/${projectId}/secure_files`, { + isForm: true, + ...options, + file: [file.content, file.filename], + name, + }); + } + + download( + projectId: string | number, + secureFileId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/secure_files/${secureFileId}/download`, + options, + ); + } + + remove( + projectId: string | number, + secureFileId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( + this, + endpoint`projects/${projectId}/secure_files/${secureFileId}`, + options, + ); + } + + show( + projectId: string | number, + secureFileId: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/secure_files/${secureFileId}`, + options, + ); + } +} diff --git a/packages/core/src/resources/ServiceData.ts b/packages/core/src/resources/ServiceData.ts new file mode 100644 index 000000000..8ce69bffe --- /dev/null +++ b/packages/core/src/resources/ServiceData.ts @@ -0,0 +1,27 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export class ServiceData extends BaseResource { + showMetricDefinitions( + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'usage_data/metric_definitions', options); + } + + showServicePingSQLQueries( + options?: Sudo & ShowExpanded, + ): Promise, C, E, void>> { + return RequestHelper.get>()(this, 'usage_data/queries', options); + } + + showUsageDataNonSQLMetrics( + options?: Sudo & ShowExpanded, + ): Promise, C, E, void>> { + return RequestHelper.get>()( + this, + 'usage_data/non_sql_metrics', + options, + ); + } +} diff --git a/packages/core/src/resources/Services.ts b/packages/core/src/resources/Services.ts deleted file mode 100644 index 65c0995fb..000000000 --- a/packages/core/src/resources/Services.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { BaseResource } from '@gitbeaker/requester-utils'; -import { - RequestHelper, - BaseRequestOptions, - PaginatedRequestOptions, - Sudo, - endpoint, -} from '../infrastructure'; - -export type SupportedService = - | 'asana' - | 'assembla' - | 'bamboo' - | 'bugzilla' - | 'buildkite' - | 'campfire' - | 'custom-issue-tracker' - | 'drone-ci' - | 'emails-on-push' - | 'external-wiki' - | 'flowdock' - | 'hangouts_chat' - | 'hipchat' - | 'irker' - | 'jira' - | 'kubernetes' - | 'slack-slash-commands' - | 'slack' - | 'packagist' - | 'pipelines-email' - | 'pivotaltracker' - | 'prometheus' - | 'pushover' - | 'redmine' - | 'microsoft-teams' - | 'mattermost' - | 'mattermost-slash-commands' - | 'teamcity' - | 'jenkins' - | 'jenkins-deprecated' - | 'mock-ci' - | 'youtrack'; - -export interface ServiceSchema extends Record { - id: number; - title: string; - slug: string; - created_at: string; - updated_at: string; - active: boolean; - commit_events: boolean; - push_events: boolean; - issues_events: boolean; - confidential_issues_events: boolean; - merge_requests_events: boolean; - tag_push_events: boolean; - note_events: boolean; - confidential_note_events: boolean; - pipeline_events: boolean; - wiki_page_events: boolean; - job_events: boolean; - comment_on_event_enabled: boolean; -} - -export class Services extends BaseResource { - all(projectId: string | number, options?: PaginatedRequestOptions) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/services`, - options, - ); - } - - edit(projectId: string | number, serviceName: SupportedService, options?: BaseRequestOptions) { - return RequestHelper.put()( - this, - endpoint`projects/${projectId}/services/${serviceName}`, - options, - ); - } - - remove(projectId: string | number, serviceName: SupportedService, options?: Sudo) { - return RequestHelper.del()( - this, - endpoint`projects/${projectId}/services/${serviceName}`, - options, - ); - } - - show(projectId: string | number, serviceName: SupportedService, options?: Sudo) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/services/${serviceName}`, - options, - ); - } -} diff --git a/packages/core/src/resources/SidekiqMetrics.ts b/packages/core/src/resources/SidekiqMetrics.ts index f86f97735..54043b2bd 100644 --- a/packages/core/src/resources/SidekiqMetrics.ts +++ b/packages/core/src/resources/SidekiqMetrics.ts @@ -1,5 +1,6 @@ import { BaseResource } from '@gitbeaker/requester-utils'; import { RequestHelper } from '../infrastructure'; +import type { GitlabAPIResponse } from '../infrastructure'; export interface ProcessMetricSchema { hostname: string; @@ -39,19 +40,27 @@ export type SidekickCompoundMetricsSchema = SidekickJobStatsSchema & SidekickProcessMetricsSchema; export class SidekiqMetrics extends BaseResource { - queueMetrics() { + queueMetrics(): Promise< + GitlabAPIResponse + > { return RequestHelper.get()(this, 'sidekiq/queue_metrics'); } - processMetrics() { + processMetrics(): Promise< + GitlabAPIResponse + > { return RequestHelper.get()(this, 'sidekiq/process_metrics'); } - jobStats() { + jobStats(): Promise< + GitlabAPIResponse + > { return RequestHelper.get()(this, 'sidekiq/job_stats'); } - compoundMetrics() { + compoundMetrics(): Promise< + GitlabAPIResponse + > { return RequestHelper.get()(this, 'sidekiq/compound_metrics'); } } diff --git a/packages/core/src/resources/SidekiqQueues.ts b/packages/core/src/resources/SidekiqQueues.ts new file mode 100644 index 000000000..062bd8c5e --- /dev/null +++ b/packages/core/src/resources/SidekiqQueues.ts @@ -0,0 +1,32 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface SidekiqQueueStatus extends Record { + completed: boolean; + deleted_jobs: number; + queue_size: number; +} + +export type RemoveSidekiqQueueOptions = { + user?: string; + project?: string; + rootNamespace?: string; + subscriptionPlan?: string; + callerId?: string; + featureCategory?: string; + workerClass?: string; +}; + +export class SidekiqQueues extends BaseResource { + remove( + queueName: string, + options?: RemoveSidekiqQueueOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`admin/sidekiq/queues/${queueName}`, + options, + ); + } +} diff --git a/packages/core/src/resources/SnippetRepositoryStorageMoves.ts b/packages/core/src/resources/SnippetRepositoryStorageMoves.ts new file mode 100644 index 000000000..a9c9e7e72 --- /dev/null +++ b/packages/core/src/resources/SnippetRepositoryStorageMoves.ts @@ -0,0 +1,56 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { ResourceRepositoryStorageMoves } from '../templates'; +import type { RepositoryStorageMoveSchema } from '../templates/ResourceRepositoryStorageMoves'; +import type { + BaseRequestOptions, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { SnippetSchema } from './Snippets'; + +export interface SnippetRepositoryStorageMoveSchema extends RepositoryStorageMoveSchema { + snippet: Pick< + SnippetSchema, + | 'id' + | 'title' + | 'description' + | 'visibility' + | 'updated_at' + | 'created_at' + | 'created_at' + | 'web_url' + | 'raw_url' + | 'ssh_url_to_repo' + | 'http_url_to_repo' + >; +} + +export interface SnippetRepositoryStorageMoves + extends ResourceRepositoryStorageMoves { + all( + options?: { snippetId?: string | number } & PaginationRequestOptions

& BaseRequestOptions, + ): Promise>; + + show( + repositoryStorageId: number, + options?: { snippetId?: string | number } & Sudo & ShowExpanded, + ): Promise>; + + schedule( + sourceStorageName: string, + options?: { snippetId?: string | number; destinationStorageName?: string } & Sudo & + ShowExpanded, + ): Promise>; +} + +export class SnippetRepositoryStorageMoves< + C extends boolean = false, +> extends ResourceRepositoryStorageMoves { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('snippets', options); + } +} diff --git a/packages/core/src/resources/Snippets.ts b/packages/core/src/resources/Snippets.ts index 0b3d70a02..25104ab7d 100644 --- a/packages/core/src/resources/Snippets.ts +++ b/packages/core/src/resources/Snippets.ts @@ -1,29 +1,33 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { UserSchema } from './Users'; -import { - BaseRequestOptions, - PaginatedRequestOptions, - RequestHelper, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + ShowExpanded, Sudo, + UserAgentDetailSchema, } from '../infrastructure'; +import type { UserSchema } from './Users'; export type SnippetVisibility = 'private' | 'public' | 'internal'; -export interface SnippetSchema extends Record { +export interface SimpleSnippetSchema extends Record { id: number; title: string; file_name: string; description?: string; - visibility: string; - author: Pick; + author: Omit; updated_at: string; created_at: string; project_id?: string | number; web_url: string; +} + +export interface SnippetSchema extends SimpleSnippetSchema { + visibility: SnippetVisibility; raw_url: string; } -export interface SnippetExtendedSchema extends SnippetSchema { +export interface ExpandedSnippetSchema extends SnippetSchema { expires_at?: string; ssh_url_to_repo: string; http_url_to_repo: string; @@ -33,52 +37,86 @@ export interface SnippetExtendedSchema extends SnippetSchema { }[]; } -export interface UserAgentDetailSchema extends Record { - user_agent: string; - ip_address: string; - akismet_submitted: boolean; -} +export type CreateSnippetOptions = { + description?: string; + visibility?: SnippetVisibility; + files?: { content: string; filePath: string }[]; +}; + +export type EditSnippetOptions = { + description?: string; + visibility?: SnippetVisibility; + files?: { + content?: string; + filePath?: string; + previousPath?: string; + action: 'create' | 'update' | 'delete' | 'move'; + }[]; +}; export class Snippets extends BaseResource { - all({ public: p, ...options }: { public?: boolean } & PaginatedRequestOptions = {}) { - const url = p ? 'snippets/public' : 'snippets'; + all({ + public: ppublic, + ...options + }: { public?: boolean; createdAfter?: string; createdBefore?: string } & Sudo & + ShowExpanded = {}): Promise> { + const url = ppublic ? 'snippets/public' : 'snippets'; return RequestHelper.get()(this, url, options); } - content(snippetId: number, options?: Sudo) { - return RequestHelper.get()(this, `snippets/${snippetId}/raw`, options); - } - - create( + create( title: string, - fileName: string, - content: string, - visibility: SnippetVisibility, - options?: BaseRequestOptions, + options?: CreateSnippetOptions & Sudo & ShowExpanded, ) { - return RequestHelper.post()(this, 'snippets', { + return RequestHelper.post()(this, 'snippets', { title, - fileName, - content, - visibility, ...options, }); } - edit(snippetId: number, options?: BaseRequestOptions) { - return RequestHelper.put()(this, `snippets/${snippetId}`, options); + edit( + snippetId: number, + options?: EditSnippetOptions & Sudo & ShowExpanded, + ) { + return RequestHelper.put()(this, `snippets/${snippetId}`, options); } - remove(snippetId: number, options?: Sudo) { + remove(snippetId: number, options?: Sudo & ShowExpanded) { return RequestHelper.del()(this, `snippets/${snippetId}`, options); } - show(snippetId: number, options?: Sudo) { + show( + snippetId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()(this, `snippets/${snippetId}`, options); } - userAgentDetails(snippetId: number, options?: Sudo) { + showContent( + snippetId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, `snippets/${snippetId}/raw`, options); + } + + showRepositoryFileContent( + snippetId: number, + ref: string, + filePath: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`snippets/${snippetId}/files/${ref}/${filePath}/raw`, + options, + ); + } + + showUserAgentDetails( + snippetId: number, + options?: Sudo & ShowExpanded, + ) { return RequestHelper.get()( this, `snippets/${snippetId}/user_agent_detail`, diff --git a/packages/core/src/resources/Suggestions.ts b/packages/core/src/resources/Suggestions.ts new file mode 100644 index 000000000..61c47284c --- /dev/null +++ b/packages/core/src/resources/Suggestions.ts @@ -0,0 +1,36 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface SuggestionSchema extends Record { + id: number; + from_line: number; + to_line: number; + appliable: boolean; + applied: boolean; + from_content: string; + to_content: string; +} + +export class Suggestions extends BaseResource { + edit( + suggestionId: number, + options?: { commitMessage?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + `suggestions/${suggestionId}/apply`, + options, + ); + } + + editBatch( + suggestionIds: number[], + options?: { commitMessage?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()(this, `suggestions/batch_apply`, { + ...options, + ids: suggestionIds, + }); + } +} diff --git a/packages/core/src/resources/SystemHooks.ts b/packages/core/src/resources/SystemHooks.ts index 7faffe206..8b4928bed 100644 --- a/packages/core/src/resources/SystemHooks.ts +++ b/packages/core/src/resources/SystemHooks.ts @@ -1,36 +1,69 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - PaginatedRequestOptions, - RequestHelper, - Sudo, -} from '../infrastructure'; - -export interface SystemHookSchema extends Record { - id: number; - url: string; - created_at: string; - push_events: boolean; - tag_push_events: boolean; - merge_requests_events: boolean; - repository_update_events: boolean; - enable_ssl_verification: boolean; +import { RequestHelper } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; +import type { HookSchema } from '../templates/ResourceHooks'; + +export interface SystemHookTestResponse extends Record { + project_id: number; + owner_email: string; + owner_name: string; + name: string; + path: string; + event_name: string; +} + +export interface CreateSystemHook { + token?: string; + pushEvents?: boolean; + tagPushEvents?: boolean; + mergeRequestsEvents?: boolean; + repositoryUpdateEvents?: boolean; + enableSslVerification?: boolean; } export class SystemHooks extends BaseResource { - add(url: string, options?: BaseRequestOptions) { - return RequestHelper.post()(this, 'hooks', { url, ...options }); + all( + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'hooks', options); } - all(options?: PaginatedRequestOptions) { - return RequestHelper.get()(this, 'hooks', options); + // Convenience method + add( + url: string, + options?: CreateSystemHook & Sudo & ShowExpanded, + ): Promise> { + return this.create(url, options); } - edit(hookId: number, url: string, options?: BaseRequestOptions) { - return RequestHelper.put()(this, `hooks/${hookId}`, { url, ...options }); + create( + url: string, + options?: CreateSystemHook & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, 'hooks', { + url, + ...options, + }); } - remove(hookId: number, options?: Sudo) { + test( + hookId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, `hooks/${hookId}`, options); + } + + remove( + hookId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()(this, `hooks/${hookId}`, options); } + + show( + hookId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, `hooks/${hookId}`, options); + } } diff --git a/packages/core/src/resources/Tags.ts b/packages/core/src/resources/Tags.ts index 98e3b81d6..95866db70 100644 --- a/packages/core/src/resources/Tags.ts +++ b/packages/core/src/resources/Tags.ts @@ -1,13 +1,14 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { CommitSchema } from './Commits'; -import { ReleaseSchema } from './Releases'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; +import type { CommitSchema } from './Commits'; +import type { ReleaseSchema } from './ProjectReleases'; export interface TagSchema extends Record { commit: CommitSchema; @@ -18,8 +19,32 @@ export interface TagSchema extends Record { protected: boolean; } +export interface TagSignatureSchema extends Record { + signature_type: string; + verification_status: string; + x509_certificate: { + id: number; + subject: string; + subject_key_identifier: string; + email: string; + serial_number: number; + certificate_status: string; + x509_issuer: { + id: number; + subject: string; + subject_key_identifier: string; + crl_url: string; + }; + }; +} + export class Tags extends BaseResource { - all(projectId: string | number, options?: PaginatedRequestOptions) { + all( + projectId: string | number, + options?: { orderBy?: 'name' | 'updated'; sort?: 'asc' | 'desc'; search?: string } & Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/repository/tags`, @@ -27,9 +52,14 @@ export class Tags extends BaseResource { ); } - create(projectId: string | number, tagName: string, ref: string, options?: BaseRequestOptions) { + create( + projectId: string | number, + tagName: string, + ref: string, + options?: { message?: string } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()(this, endpoint`projects/${projectId}/repository/tags`, { - query: { + searchParams: { tagName, ref, }, @@ -37,7 +67,11 @@ export class Tags extends BaseResource { }); } - remove(projectId: string | number, tagName: string, options?: Sudo) { + remove( + projectId: string | number, + tagName: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, endpoint`projects/${projectId}/repository/tags/${tagName}`, @@ -45,11 +79,27 @@ export class Tags extends BaseResource { ); } - show(projectId: string | number, tagName: string, options?: Sudo) { + show( + projectId: string | number, + tagName: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/repository/tags/${tagName}`, options, ); } + + showSignature( + projectId: string | number, + tagName: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/repository/tags/${tagName}/signature`, + options, + ); + } } diff --git a/packages/core/src/resources/TodoLists.ts b/packages/core/src/resources/TodoLists.ts new file mode 100644 index 000000000..3c7c36c9a --- /dev/null +++ b/packages/core/src/resources/TodoLists.ts @@ -0,0 +1,88 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { UserSchema } from './Users'; +import type { SimpleProjectSchema } from './Projects'; + +export type TodoAction = + | 'assigned' + | 'mentioned' + | 'build_failed' + | 'marked' + | 'approval_required' + | 'unmergeable' + | 'directly_addressed' + | 'merge_train_removed'; +export type TodoType = + | 'Issue' + | 'MergeRequest' + | 'Commit' + | 'Epic' + | 'DesignManagement::Design' + | 'AlertManagement::Alert'; +export type TodoState = 'pending' | 'done'; + +export interface TodoSchema extends Record { + id: number; + author: Omit; + project: Pick< + SimpleProjectSchema, + 'id' | 'name' | 'name_with_namespace' | 'path' | 'path_with_namespace' + >; + action_name: TodoAction; + target_type: TodoType; + target: Record; + target_url: string; + body: string; + state: TodoState; + created_at: string; + updated_at: string; +} + +export class TodoLists extends BaseResource { + all( + options?: { + action?: TodoAction; + authorId?: number; + projectId?: string | number; + groupId?: string | number; + state?: TodoState; + type?: TodoType; + } & Sudo & + ShowExpanded & + PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()(this, 'todos', options); + } + + done( + options: { todoId: number } & Sudo & ShowExpanded, + ): Promise>; + + done( + options?: Sudo & ShowExpanded, + ): Promise>; + + done({ + todoId, + ...options + }: { todoId?: number } & Sudo & ShowExpanded = {}): Promise< + GitlabAPIResponse + > { + let prefix = 'todos'; + + if (todoId) prefix += `/${todoId}`; + + return RequestHelper.post()( + this, + `${prefix}/mark_as_done`, + options as Sudo & ShowExpanded, + ); + } +} diff --git a/packages/core/src/resources/Todos.ts b/packages/core/src/resources/Todos.ts deleted file mode 100644 index 22977a9ee..000000000 --- a/packages/core/src/resources/Todos.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { BaseResource } from '@gitbeaker/requester-utils'; -import { UserSchema } from './Users'; -import { ProjectSchema } from './Projects'; -import { MilestoneSchema } from '../templates/types'; -import { RequestHelper, PaginatedRequestOptions, Sudo, endpoint } from '../infrastructure'; - -export interface TodoSchema extends Record { - id: number; - project: Pick< - ProjectSchema, - 'id' | 'name' | 'name_with_namespace' | 'path' | 'path_with_namespace' - >; - author: Pick; - action_name: string; - target_type: string; - target: { - id: number; - iid: number; - project_id: number; - title: string; - description: string; - state: string; - created_at: string; - updated_at: string; - target_branch: string; - source_branch: string; - upvotes: number; - downvotes: number; - author: Pick; - assignee: Pick; - source_project_id: number; - target_project_id: number; - labels?: string[]; - work_in_progress: boolean; - milestone: Omit; - merge_when_pipeline_succeeds: boolean; - merge_status: string; - user_notes_count: number; - }; - target_url: string; - body: string; - state: string; - created_at: string; - updated_at: string; -} - -export class Todos extends BaseResource { - all(options?: PaginatedRequestOptions) { - return RequestHelper.get()(this, 'todos', options); - } - - create( - projectId: string | number, - resourceId: number, - resourceName: 'mergerequest' | 'issue', - options?: Sudo, - ) { - const resourceAPI = resourceName === 'issue' ? 'issues' : 'merge_requests'; - - return RequestHelper.post()( - this, - endpoint`projects/${projectId}/${resourceAPI}/${resourceId}/todo`, - options, - ); - } - - done({ todoId, ...options }: { todoId?: number } & Sudo = {}) { - const url = ['todos']; - - if (todoId) url.push(todoId.toString()); - - url.push('mark_as_done'); - - // Fixme: Rewrite this to make better use of proper typing - if (todoId) { - return RequestHelper.post()( - this, - url.join('/'), - options as Record, - ); - } - - return RequestHelper.post()(this, url.join('/'), options as Record); - } -} diff --git a/packages/core/src/resources/Topics.ts b/packages/core/src/resources/Topics.ts new file mode 100644 index 000000000..f6ebfd28c --- /dev/null +++ b/packages/core/src/resources/Topics.ts @@ -0,0 +1,97 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface TopicSchema extends Record { + id: number; + name: string; + description: string; + total_projects_count: number; + avatar_url: string; +} + +export class Topics extends BaseResource { + all( + options?: { search?: string; withoutProjects?: boolean } & PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'topics', options); + } + + create( + name: string, + { + avatar, + ...options + }: { avatar?: { content: Blob; filename: string }; description?: string } & Sudo & + ShowExpanded = {}, + ): Promise> { + const opts: Record = { + name, + ...options, + }; + + if (avatar) { + opts.isForm = true; + opts.file = [avatar.content, avatar.filename]; + } + + return RequestHelper.post()(this, 'topics', opts); + } + + edit( + topicId: number, + { + avatar, + ...options + }: { + name?: string; + title?: string; + avatar?: { content: Blob; filename: string }; + description?: string; + } & Sudo & + ShowExpanded = {}, + ): Promise> { + const opts: Record = { ...options }; + + if (avatar) { + opts.isForm = true; + opts.file = [avatar.content, avatar.filename]; + } + + return RequestHelper.put()(this, `topics/${topicId}`, opts); + } + + merge( + sourceTopicId: number, + targetTopicId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, `topics/merge`, { + sourceTopicId, + targetTopicId, + ...options, + }); + } + + remove( + topicId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, `topics/${topicId}`, options); + } + + show( + topicId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, `topics/${topicId}`, options); + } +} diff --git a/packages/core/src/resources/Triggers.ts b/packages/core/src/resources/Triggers.ts deleted file mode 100644 index 8205ce827..000000000 --- a/packages/core/src/resources/Triggers.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { BaseResource } from '@gitbeaker/requester-utils'; -import { UserSchema } from './Users'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, - Sudo, -} from '../infrastructure'; - -export interface PipelineTriggerSchema extends Record { - id: number; - description: string; - created_at: string; - last_used?: string; - token: string; - updated_at: string; - owner: Pick; -} - -// TODO: Rename PipelineTriggers -export class Triggers extends BaseResource { - add(projectId: string | number, options?: BaseRequestOptions) { - return RequestHelper.post()( - this, - endpoint`projects/${projectId}/triggers`, - options, - ); - } - - all(projectId: string | number, options?: PaginatedRequestOptions) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/triggers`, - options, - ); - } - - edit(projectId: string | number, triggerId: number, options?: BaseRequestOptions) { - return RequestHelper.put()( - this, - endpoint`projects/${projectId}/triggers/${triggerId}`, - options, - ); - } - - pipeline( - projectId: string | number, - ref: string, - token: string, - { variables }: { variables?: Record } = {}, - ) { - const hapiVariables = {}; - - if (variables) { - Object.entries(variables).forEach(([k, v]) => { - hapiVariables[`variables[${k}]`] = v; - }); - } - - return RequestHelper.post()(this, endpoint`projects/${projectId}/trigger/pipeline`, { - isForm: true, - ref, - token, - ...hapiVariables, - }); - } - - remove(projectId: string | number, triggerId: number, options?: Sudo) { - return RequestHelper.del()( - this, - endpoint`projects/${projectId}/triggers/${triggerId}`, - options, - ); - } - - show(projectId: string | number, triggerId: number, options?: Sudo) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/triggers/${triggerId}`, - options, - ); - } -} diff --git a/packages/core/src/resources/UserCustomAttributes.ts b/packages/core/src/resources/UserCustomAttributes.ts index d8bd4fb15..206662dff 100644 --- a/packages/core/src/resources/UserCustomAttributes.ts +++ b/packages/core/src/resources/UserCustomAttributes.ts @@ -1,29 +1,39 @@ -import { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceCustomAttributes } from '../templates'; -import { CustomAttributeSchema } from '../templates/types'; -import { PaginatedRequestOptions, CamelizedRecord, Sudo } from '../infrastructure'; +import type { CustomAttributeSchema } from '../templates/ResourceCustomAttributes'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface UserCustomAttributes extends ResourceCustomAttributes { - all( + all( userId: string | number, - options?: PaginatedRequestOptions, - ): Promise[]>; + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise>; - set( + remove( userId: string | number, - customAttributeId: number, - value: string, + customAttributeId: string, options?: Sudo, - ): Promise>; + ): Promise>; - remove(userId: string | number, customAttributeId: number, options?: Sudo): Promise; + set( + userId: string | number, + customAttributeId: string, + value: string, + options?: Sudo & ShowExpanded, + ): Promise>; - show( + show( userId: string | number, - customAttributeId: number, - options?: Sudo, - ): Promise>; + customAttributeId: string, + options?: Sudo & ShowExpanded, + ): Promise>; } export class UserCustomAttributes extends ResourceCustomAttributes { diff --git a/packages/core/src/resources/UserEmails.ts b/packages/core/src/resources/UserEmails.ts index 23df96c14..27d442ab4 100644 --- a/packages/core/src/resources/UserEmails.ts +++ b/packages/core/src/resources/UserEmails.ts @@ -1,10 +1,6 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - Sudo, - PaginatedRequestOptions, - RequestHelper, -} from '../infrastructure'; +import { RequestHelper } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; export interface UserEmailSchema extends Record { id: number; @@ -15,24 +11,55 @@ export interface UserEmailSchema extends Record { const url = (userId?: number) => (userId ? `users/${userId}/emails` : 'user/emails'); export class UserEmails extends BaseResource { - all({ userId, ...options }: { userId?: number } & PaginatedRequestOptions = {}) { - return RequestHelper.get()(this, url(userId), options); + // Convenience method for create + add( + email: string, + options?: { userId?: number; skipConfirmation?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return this.create(email, options); } - add(email: string, { userId, ...options }: { userId?: number } & BaseRequestOptions = {}) { + all({ + userId, + ...options + }: { userId?: number } & Sudo & ShowExpanded = {}): Promise< + GitlabAPIResponse + > { + return RequestHelper.get()( + this, + url(userId), + options as Sudo & ShowExpanded, + ); + } + + create( + email: string, + { + userId, + ...options + }: { userId?: number; skipConfirmation?: boolean } & Sudo & ShowExpanded = {}, + ): Promise> { return RequestHelper.post()(this, url(userId), { email, ...options, }); } - show(emailId: number, options?: BaseRequestOptions) { + show( + emailId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()(this, `user/emails/${emailId}`, options); } - remove(emailId: number, { userId, ...options }: { userId?: number } & Sudo = {}) { - const eId = encodeURIComponent(emailId); - - return RequestHelper.del()(this, `${url(userId)}/${eId}`, options as Sudo); + remove( + emailId: number, + { userId, ...options }: { userId?: number } & Sudo & ShowExpanded = {}, + ): Promise> { + return RequestHelper.del()( + this, + `${url(userId)}/${emailId}`, + options as Sudo & ShowExpanded, + ); } } diff --git a/packages/core/src/resources/UserGPGKeys.ts b/packages/core/src/resources/UserGPGKeys.ts index 550b55414..1100af0a7 100644 --- a/packages/core/src/resources/UserGPGKeys.ts +++ b/packages/core/src/resources/UserGPGKeys.ts @@ -1,10 +1,6 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - Sudo, - PaginatedRequestOptions, - RequestHelper, -} from '../infrastructure'; +import { RequestHelper } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; export interface UserGPGKeySchema extends Record { id: number; @@ -15,26 +11,44 @@ export interface UserGPGKeySchema extends Record { const url = (userId?: number) => (userId ? `users/${userId}/gpg_keys` : 'user/gpg_keys'); export class UserGPGKeys extends BaseResource { - all({ userId, ...options }: { userId?: number } & PaginatedRequestOptions = {}) { + // Convienence method + add( + key: string, + options?: { userId?: number } & Sudo & ShowExpanded, + ): Promise> { + return this.create(key, options); + } + + all({ + userId, + ...options + }: { userId?: number } & Sudo & ShowExpanded = {}): Promise< + GitlabAPIResponse + > { return RequestHelper.get()(this, url(userId), options); } - add(key: string, { userId, ...options }: { userId?: number } & BaseRequestOptions = {}) { + create( + key: string, + { userId, ...options }: { userId?: number } & Sudo & ShowExpanded = {}, + ): Promise> { return RequestHelper.post()(this, url(userId), { key, ...options, }); } - show(keyId: number, { userId, ...options }: { userId?: number } & BaseRequestOptions = {}) { - const kId = encodeURIComponent(keyId); - - return RequestHelper.get()(this, `${url(userId)}/${kId}`, options); + show( + keyId: number, + { userId, ...options }: { userId?: number } & Sudo & ShowExpanded = {}, + ): Promise> { + return RequestHelper.get()(this, `${url(userId)}/${keyId}`, options); } - remove(keyId: number, { userId, ...options }: { userId?: number } & Sudo = {}) { - const kId = encodeURIComponent(keyId); - - return RequestHelper.del()(this, `${url(userId)}/${kId}`, options as Sudo); + remove( + keyId: number, + { userId, ...options }: { userId?: number } & Sudo & ShowExpanded = {}, + ): Promise> { + return RequestHelper.del()(this, `${url(userId)}/${keyId}`, options); } } diff --git a/packages/core/src/resources/UserImpersonationTokens.ts b/packages/core/src/resources/UserImpersonationTokens.ts index 2d5fac1e7..aec892859 100644 --- a/packages/core/src/resources/UserImpersonationTokens.ts +++ b/packages/core/src/resources/UserImpersonationTokens.ts @@ -1,5 +1,12 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { RequestHelper, PaginatedRequestOptions, Sudo } from '../infrastructure'; +import { RequestHelper } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export type ImpersonationTokenScope = 'api' | 'read_user'; export type ImpersonationTokenState = 'all' | 'active' | 'inactive'; @@ -17,7 +24,12 @@ export interface UserImpersonationTokenSchema extends Record { } export class UserImpersonationTokens extends BaseResource { - all(userId: number, options?: { state?: ImpersonationTokenState } & PaginatedRequestOptions) { + all( + userId: number, + options?: { state?: ImpersonationTokenState } & PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise> { return RequestHelper.get()( this, `users/${userId}/impersonation_tokens`, @@ -25,27 +37,28 @@ export class UserImpersonationTokens extends BaseReso ); } - // TODO: change required params - add( + create( userId: number, name: string, - scopes: ImpersonationTokenScope, - expiresAt: string, - options?: Sudo, - ) { + scopes: ImpersonationTokenScope[], + options?: { expiresAt?: string } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, `users/${userId}/impersonation_tokens`, { name, - expiresAt, scopes, ...options, }, ); } - show(userId: number, tokenId: number, options?: Sudo) { + show( + userId: number, + tokenId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, `users/${userId}/impersonation_tokens/${tokenId}`, @@ -53,7 +66,20 @@ export class UserImpersonationTokens extends BaseReso ); } - revoke(userId: number, tokenId: number, options?: Sudo) { + remove( + userId: number, + tokenId: number, + options?: Sudo & ShowExpanded, + ) { return RequestHelper.del()(this, `users/${userId}/impersonation_tokens/${tokenId}`, options); } + + // Convienence method + revoke( + userId: number, + tokenId: number, + options?: Sudo & ShowExpanded, + ) { + return this.remove(userId, tokenId, options); + } } diff --git a/packages/core/src/resources/UserSSHKeys.ts b/packages/core/src/resources/UserSSHKeys.ts index 42953b37f..65edc143a 100644 --- a/packages/core/src/resources/UserSSHKeys.ts +++ b/packages/core/src/resources/UserSSHKeys.ts @@ -1,10 +1,6 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - Sudo, - PaginatedRequestOptions, - RequestHelper, -} from '../infrastructure'; +import { RequestHelper } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; export interface UserSSHKeySchema extends Record { id: number; @@ -16,15 +12,46 @@ export interface UserSSHKeySchema extends Record { const url = (userId?: number) => (userId ? `users/${userId}/keys` : 'user/keys'); export class UserSSHKeys extends BaseResource { - all({ userId, ...options }: { userId?: number } & PaginatedRequestOptions = {}) { - return RequestHelper.get()(this, url(userId), options); + // Convienence method for create + add( + title: string, + key: string, + options?: { + userId?: number; + expiresAt?: string; + usageType?: 'auth' | 'signing' | 'auth_and_signing'; + } & Sudo & + ShowExpanded, + ): Promise> { + return this.create(title, key, options); + } + + all({ + userId, + ...options + }: { userId?: number } & Sudo & ShowExpanded = {}): Promise< + GitlabAPIResponse + > { + return RequestHelper.get()( + this, + url(userId), + options as Sudo & ShowExpanded, + ); } - create( + create( title: string, key: string, - { userId, ...options }: { userId?: number } & BaseRequestOptions = {}, - ) { + { + userId, + ...options + }: { + userId?: number; + expiresAt?: string; + usageType?: 'auth' | 'signing' | 'auth_and_signing'; + } & Sudo & + ShowExpanded = {}, + ): Promise> { return RequestHelper.post()(this, url(userId), { title, key, @@ -32,15 +59,21 @@ export class UserSSHKeys extends BaseResource { }); } - show(keyId: number, { userId, ...options }: { userId?: number } & BaseRequestOptions = {}) { - const kId = encodeURIComponent(keyId); - - return RequestHelper.get()(this, `${url(userId)}/${kId}`, options); + show( + keyId: number, + { userId, ...options }: { userId?: number } & Sudo & ShowExpanded = {}, + ): Promise> { + return RequestHelper.get()( + this, + `${url(userId)}/${keyId}`, + options as Sudo & ShowExpanded, + ); } - remove(keyId: number, { userId, ...options }: { userId?: number } & Sudo = {}) { - const kId = encodeURIComponent(keyId); - - return RequestHelper.del()(this, `${url(userId)}/${kId}`, options as Sudo); + remove( + keyId: number, + { userId, ...options }: { userId?: number } & Sudo & ShowExpanded = {}, + ): Promise> { + return RequestHelper.del()(this, `${url(userId)}/${keyId}`, options as Sudo & ShowExpanded); } } diff --git a/packages/core/src/resources/UserStarredMetricsDashboard.ts b/packages/core/src/resources/UserStarredMetricsDashboard.ts new file mode 100644 index 000000000..6c00c6175 --- /dev/null +++ b/packages/core/src/resources/UserStarredMetricsDashboard.ts @@ -0,0 +1,38 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface StarredDashboardSchema extends Record { + id: number; + dashboard_path: string; + user_id: number; + project_id: number; +} + +export class UserStarredMetricsDashboard extends BaseResource { + create( + projectId: string | number, + dashboardPath: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`projects/${projectId}/metrics/user_starred_dashboards`, + { + dashboardPath, + ...options, + }, + ); + } + + remove( + projectId: string | number, + options?: { dashboard_path?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del<{ deleted_rows: number }>()( + this, + endpoint`projects/${projectId}/metrics/user_starred_dashboards`, + options, + ); + } +} diff --git a/packages/core/src/resources/Users.ts b/packages/core/src/resources/Users.ts index e947c3923..06ecff903 100644 --- a/packages/core/src/resources/Users.ts +++ b/packages/core/src/resources/Users.ts @@ -1,12 +1,16 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - PaginatedRequestOptions, - RequestHelper, +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; -import { ProjectExtendedSchema } from './Projects'; -import { EventOptions, EventSchema } from './Events'; +import type { ExpandedProjectSchema } from './Projects'; +import type { AllEventOptions, EventSchema } from './Events'; +import type { AccessLevel } from '../templates/ResourceAccessRequests'; +import type { PersonalAccessTokenSchema } from './PersonalAccessTokens'; export interface UserSchema extends Record { id: number; @@ -18,8 +22,9 @@ export interface UserSchema extends Record { created_at?: string; } -export interface UserExtendedSchema extends UserSchema { +export interface ExpandedUserSchema extends UserSchema { bio?: string; + bot: boolean; location?: string; public_email: string; skype: string; @@ -27,6 +32,14 @@ export interface UserExtendedSchema extends UserSchema { twitter: string; website_url: string; organization?: string; + job_title?: string; + prnouns?: string; + work_information?: string; + followers?: number; + following?: number; + local_time?: string; + is_followed?: boolean; + last_sign_in_at: string; confirmed_at: string; last_activity_on: string; @@ -35,12 +48,23 @@ export interface UserExtendedSchema extends UserSchema { color_scheme_id: number; projects_limit: number; current_sign_in_at?: string; - identities?: string[]; + note?: string; + identities?: { provider: string; extern_uid: string; saml_provider_id?: number }[]; can_create_group: boolean; can_create_project: boolean; two_factor_enabled: boolean; external: boolean; private_profile?: string; + current_sign_in_ip: string; + last_sign_in_ip: string; + namespace_id?: number; + created_by?: string; + + shared_runners_minutes_limit?: number; + extra_shared_runners_minutes_limit?: number; + is_auditor?: boolean; + using_license_seat?: boolean; + provisioned_by_group_id?: number; } export interface UserActivitySchema extends Record { @@ -49,62 +73,395 @@ export interface UserActivitySchema extends Record { last_activity_at: string; } +export interface UserStatusSchema extends Record { + emoji: string; + availability: string; + message: string; + message_html: string; + clear_status_at: string; +} + +export interface UserPreferenceSchema extends Record { + id: number; + user_id: number; + view_diffs_file_by_file: boolean; + show_whitespace_in_diffs: boolean; +} + +export interface UserCountSchema extends Record { + merge_requests: number; + assigned_issues: number; + assigned_merge_requests: number; + review_requested_merge_requests: number; + todos: number; +} + +export interface UserAssociationCountSchema extends Record { + groups_count: number; + projects_count: number; + issues_count: number; + merge_requests_count: number; +} + +export interface UserMembershipSchema extends Record { + source_id: number; + source_name: string; + source_type: 'Project' | 'Namespace'; + access_level: AccessLevel; +} + +export interface UserRunnerSchema extends Record { + id: number; + token: string; + token_expires_at?: string; +} + +export type AllUsersOptions = { + orderBy?: 'name' | 'username' | 'created_at' | 'updated_at'; + sort?: 'asc' | 'desc'; + twoFactor?: string; + withoutProjects?: boolean; + admins?: boolean; + samlProviderId?: number; +}; + +export type CreateUserOptions = { + admin?: boolean; + auditor?: boolean; + avatar?: { contenxt: Blob; filepath?: string }; + bio?: string; + canCreateGroup?: boolean; + colorSchemeId?: number; + email?: string; + externUid?: number; + external?: boolean; + extraSharedRunnersMinutesLimit?: number; + forceRandomPassword?: string; + groupIdForSaml?: number; + linkedin?: string; + location?: string; + name?: string; + note?: string; + organization?: string; + password?: string; + privateProfile?: string; + projectsLimit?: boolean; + provider?: string; + resetPassword?: boolean; + sharedRunnersMinutesLimit?: number; + skipConfirmation?: boolean; + skype?: string; + themeId?: number; + twitter?: string; + discord?: string; + username?: string; + viewDiffsFileByFile?: boolean; + websiteUrl?: string; +}; + +export type EditUserOptions = CreateUserOptions; + +export type CreateUserCIRunnerOptions = { + groupId?: number; + projectId?: number; + description?: string; + paused?: boolean; + locked?: boolean; + runUntagged?: boolean; + tagList?: string[]; + accessLevel?: 'not_protected' | 'ref_protected'; + maximumTimeout?: number; + maintenanceNote?: string; +}; + export class Users extends BaseResource { - all(options?: PaginatedRequestOptions) { - return RequestHelper.get()(this, 'users', options); + activate( + userId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`users/${userId}/activate`, options); + } + + all( + options?: AllUsersOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get<(UserSchema | ExpandedUserSchema)[]>()(this, 'users', options); + } + + allActivities( + options?: { from?: string } & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'user/activities', options); + } + + allEvents( + userId: number, + options?: AllEventOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ) { + return RequestHelper.get()(this, endpoint`users/${userId}/events`, options); + } + + allFollowers( + userId: number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, endpoint`users/${userId}/followers`, options); + } + + allFollowing( + userId: number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, endpoint`users/${userId}/following`, options); + } + + allMemberships( + userId: number, + options?: { type?: 'Project' | 'Namespace' } & PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`users/${userId}/memberships`, + options, + ); } - activities(options?: Sudo) { - return RequestHelper.get()(this, 'users/activities', options); + allProjects( + userId: number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`users/${userId}/projects`, + options, + ); } - projects(userId: number, options?: Sudo) { - return RequestHelper.get()(this, `users/${userId}/projects`, options); + // Convenience method - Functionality already present in the all method in the Projects wrapper + allStarredProjects( + userId: number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`users/${userId}/starred_projects`, + options, + ); } - block(userId: number, options?: Sudo) { - return RequestHelper.post()(this, `users/${userId}/block`, options); + approve( + userId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post<{ message: string }>()( + this, + endpoint`users/${userId}/approve`, + options, + ); } - create(options?: BaseRequestOptions) { + ban( + userId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`users/${userId}/ban`, options); + } + + block( + userId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`users/${userId}/block`, options); + } + + deactivate( + userId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`users/${userId}/deactivate`, options); + } + + disableTwoFactor( + userId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.patch()(this, endpoint`users/${userId}/disable_two_factor`, options); + } + + follow( + userId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`users/${userId}/follow`, options); + } + + create( + options?: CreateUserOptions & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()(this, 'users', options); } - current(options?: Sudo) { - return RequestHelper.get()(this, 'user', options); + createPersonalAccessToken( + userId: number, + name: string, + scopes: string[], + options?: { expiresAt?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`users/${userId}/personal_access_tokens`, + { + name, + scopes, + ...options, + }, + ); + } + + createCIRunner( + runnerType: 'instance_type' | 'group_type' | 'project_type', + options?: CreateUserCIRunnerOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, 'user/runners', { + ...options, + runnerType, + }); } - edit(userId: number, options?: BaseRequestOptions) { - return RequestHelper.put()(this, `users/${userId}`, options); + edit( + userId: number, + options?: EditUserOptions & Sudo & ShowExpanded, + ) { + return RequestHelper.put()(this, endpoint`users/${userId}`, options); } - events(userId: number, options?: BaseRequestOptions & EventOptions) { - return RequestHelper.get()(this, `users/${userId}/events`, options); + editStatus( + options?: { + emoji?: string; + message?: string; + clearStatusAfter?: + | '30_minutes' + | '3_hours' + | '8_hours' + | '1_day' + | '3_days' + | '7_days' + | '30_days'; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.put()(this, 'user/status', options); } - search(emailOrUsername: string, options?: Sudo) { - return RequestHelper.get()(this, 'users', { - search: emailOrUsername, + editCurrentUserPreferences( + viewDiffsFileByFile: boolean, + showWhitespaceInDiffs: boolean, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'user/preferences', { + viewDiffsFileByFile, + showWhitespaceInDiffs, ...options, }); } - show(userId: number, options?: BaseRequestOptions) { - return RequestHelper.get()(this, `users/${userId}`, options); + reject( + userId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post<{ message: string }>()( + this, + endpoint`users/${userId}/reject`, + options, + ); } - remove(userId: number, options?: Sudo) { - return RequestHelper.del()(this, `users/${userId}`, options); + show( + userId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`users/${userId}`, + options, + ); } - unblock(userId: number, options?: Sudo) { - return RequestHelper.post()(this, `users/${userId}/unblock`, options); + showCount( + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'user_counts', options); } - username(username: string, options?: Sudo) { - return RequestHelper.get()(this, 'users', { - username, - ...options, - }); + showAssociationsCount( + userId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + `users/${userId}/associations_count`, + options, + ); + } + + showCurrentUser( + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'user', options); + } + + showCurrentUserPreferences( + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, 'user/preferences', options); + } + + showStatus( + options?: { iDOrUsername?: string | number } & Sudo & ShowExpanded, + ): Promise> { + let url: string; + + if (options?.iDOrUsername) url = `users/${options?.iDOrUsername}/status`; + else url = 'user/status'; + + return RequestHelper.get()(this, url, options); + } + + remove( + userId: number, + options?: { hardDelete?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`users/${userId}`, options); + } + + removeAuthenticationIdentity( + userId: number, + provider: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`users/${userId}/identities/${provider}`, options); + } + + unban( + userId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`users/${userId}/unban`, options); + } + + unblock( + userId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`users/${userId}/unblock`, options); + } + + unfollow( + userId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`users/${userId}/unfollow`, options); } } diff --git a/packages/core/src/resources/Version.ts b/packages/core/src/resources/Version.ts deleted file mode 100644 index 61d9f95d6..000000000 --- a/packages/core/src/resources/Version.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { BaseResource } from '@gitbeaker/requester-utils'; -import { RequestHelper, Sudo } from '../infrastructure'; - -export interface VersionSchema extends Record { - version: string; - revision: string; -} - -export class Version extends BaseResource { - show(options?: Sudo) { - return RequestHelper.get()(this, 'version', options); - } -} diff --git a/packages/core/src/resources/VulnerabilityFindings.ts b/packages/core/src/resources/VulnerabilityFindings.ts deleted file mode 100644 index fbd65d08a..000000000 --- a/packages/core/src/resources/VulnerabilityFindings.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { BaseResource } from '@gitbeaker/requester-utils'; -import { endpoint, PaginatedRequestOptions, RequestHelper } from '../infrastructure'; - -export interface VulnerabilityFindingIdentifier { - external_type: string; - external_id: string; - name: string; - url: string; -} -export interface VulnerabilityFindingDetailItem { - type: string; - href: string; -} - -export interface VulnerabilityFindingSchema extends Record { - id: number; - report_type: string; - name: string; - severity: string; - confidence: string; - scanner: { - external_id: string; - name: string; - }; - identifiers?: VulnerabilityFindingIdentifier[]; - project_fingerprint: string; - uuid: string; - create_vulnerability_feedback_issue_path: string; - create_vulnerability_feedback_merge_request_path: string; - create_vulnerability_feedback_dismissal_path: string; - project: { - id: number; - name: string; - full_path: string; - full_name: string; - }; - dismissal_feedback?: string; - issue_feedback?: string; - merge_request_feedback?: string; - description: string; - links?: { - url: string; - }[]; - location: { - file: string; - dependency: { - package: { - name: string; - }; - version: string; - }; - }; - details: { - [custom_field: string]: { - name: string; - type: string; - items?: VulnerabilityFindingDetailItem[]; - }; - }; - solution: string; - blob_path: string; -} - -export class VulnerabilityFindings extends BaseResource { - all( - projectId: string | number, - options?: { - reportType?: string[]; - scope?: string; - severity?: string[]; - confidence?: string[]; - pipelineId?: string | number; - } & PaginatedRequestOptions, - ) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/vulnerability_findings`, - options, - ); - } -} diff --git a/packages/core/src/resources/Wikis.ts b/packages/core/src/resources/Wikis.ts deleted file mode 100644 index 0a8cb2b09..000000000 --- a/packages/core/src/resources/Wikis.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { BaseResource } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, - Sudo, -} from '../infrastructure'; - -export interface WikiSchema extends Record { - content: string; - format: string; - slug: string; - title: string; -} - -export class Wikis extends BaseResource { - all(projectId: string | number, options?: PaginatedRequestOptions) { - return RequestHelper.get()(this, endpoint`projects/${projectId}/wikis`, options); - } - - create(projectId: string | number, options?: BaseRequestOptions) { - return RequestHelper.post()(this, endpoint`projects/${projectId}/wikis`, options); - } - - edit(projectId: string | number, slug: string, options?: BaseRequestOptions) { - return RequestHelper.put()( - this, - endpoint`projects/${projectId}/wikis/${slug}`, - options, - ); - } - - show(projectId: string | number, slug: string, options?: Sudo) { - return RequestHelper.get()( - this, - endpoint`projects/${projectId}/wikis/${slug}`, - options, - ); - } - - remove(projectId: string | number, slug: string, options?: Sudo) { - return RequestHelper.del()(this, endpoint`projects/${projectId}/wikis/${slug}`, options); - } -} diff --git a/packages/core/src/resources/index.ts b/packages/core/src/resources/index.ts index 6bd94817c..68ee51f3f 100644 --- a/packages/core/src/resources/index.ts +++ b/packages/core/src/resources/index.ts @@ -1,107 +1,189 @@ -// Groups -export { Groups } from './Groups'; -export { GroupAccessRequests } from './GroupAccessRequests'; -export { GroupBadges } from './GroupBadges'; -export { GroupCustomAttributes } from './GroupCustomAttributes'; -export { GroupIssueBoards } from './GroupIssueBoards'; -export { GroupMembers } from './GroupMembers'; -export { GroupMilestones } from './GroupMilestones'; -export { GroupRunners } from './GroupRunners'; -export { GroupVariables } from './GroupVariables'; -export { GroupLabels } from './GroupLabels'; -export { GroupDeployTokens } from './GroupDeployTokens'; -export { Epics } from './Epics'; -export { EpicIssues } from './EpicIssues'; -export { EpicNotes } from './EpicNotes'; -export { EpicDiscussions } from './EpicDiscussions'; - -// Users -export { Users } from './Users'; -export { UserCustomAttributes } from './UserCustomAttributes'; -export { UserEmails } from './UserEmails'; -export { UserImpersonationTokens } from './UserImpersonationTokens'; -export { UserSSHKeys } from './UserSSHKeys'; -export { UserGPGKeys } from './UserGPGKeys'; +// General +export { Agents } from './Agents'; +export { AlertManagement } from './AlertManagement'; +export { ApplicationAppearance } from './ApplicationAppearance'; +export { ApplicationPlanLimits } from './ApplicationPlanLimits'; +export { Applications } from './Applications'; +export { ApplicationSettings } from './ApplicationSettings'; +export { ApplicationStatistics } from './ApplicationStatistics'; +export { AuditEvents } from './AuditEvents'; +export { Avatar } from './Avatar'; +export { BroadcastMessages } from './BroadcastMessages'; +export { Composer } from './Composer'; +export { Conan } from './Conan'; +export { DashboardAnnotations } from './DashboardAnnotations'; +export { Debian } from './Debian'; +export { DependencyProxy } from './DependencyProxy'; +export { DeployKeys } from './DeployKeys'; +export { DeployTokens } from './DeployTokens'; +export { DockerfileTemplates } from './DockerfileTemplates'; +export { Events } from './Events'; +export { Experiments } from './Experiments'; +export { GeoNodes } from './GeoNodes'; +export { GitignoreTemplates } from './GitignoreTemplates'; +export { GitLabCIYMLTemplates } from './GitLabCIYMLTemplates'; +export { Import } from './Import'; +export { InstanceLevelCICDVariables } from './InstanceLevelCICDVariables'; +export { Keys } from './Keys'; +export { License } from './License'; +export { LicenseTemplates } from './LicenseTemplates'; +export { Lint } from './Lint'; +export { Markdown } from './Markdown'; +export { Maven } from './Maven'; +export { Metadata } from './Metadata'; +export { Migrations } from './Migrations'; +export { Namespaces } from './Namespaces'; +export { NotificationSettings } from './NotificationSettings'; +export { NPM } from './NPM'; +export { NuGet } from './NuGet'; +export { PersonalAccessTokens } from './PersonalAccessTokens'; +export { PyPI } from './PyPI'; +export { RubyGems } from './RubyGems'; +export { Search } from './Search'; +export { ServiceData } from './ServiceData'; +export { SidekiqMetrics } from './SidekiqMetrics'; +export { SidekiqQueues } from './SidekiqQueues'; +export { SnippetRepositoryStorageMoves } from './SnippetRepositoryStorageMoves'; +export { Snippets } from './Snippets'; +export { Suggestions } from './Suggestions'; +export { SystemHooks } from './SystemHooks'; +export { TodoLists } from './TodoLists'; +export { Topics } from './Topics'; // Projects export { Branches } from './Branches'; -export { Commits } from './Commits'; export { CommitDiscussions } from './CommitDiscussions'; +export { Commits } from './Commits'; export { ContainerRegistry } from './ContainerRegistry'; export { Deployments } from './Deployments'; -export { DeployKeys } from './DeployKeys'; export { Environments } from './Environments'; +export { ErrorTrackingClientKeys } from './ErrorTrackingClientKeys'; +export { ErrorTrackingSettings } from './ErrorTrackingSettings'; +export { ExternalStatusChecks } from './ExternalStatusChecks'; +export { FeatureFlags } from './FeatureFlags'; +export { FeatureFlagUserLists } from './FeatureFlagUserLists'; export { FreezePeriods } from './FreezePeriods'; +export { GitlabPages } from './GitlabPages'; +export { GoProxy } from './GoProxy'; +export { Helm } from './Helm'; +export { Integrations } from './Integrations'; +export { IssueAwardEmojis } from './IssueAwardEmojis'; +export { IssueDiscussions } from './IssueDiscussions'; +export { IssueIterationEvents } from './IssueIterationEvents'; +export { IssueLabelEvents } from './IssueLabelEvents'; +export { IssueLinks } from './IssueLinks'; +export { IssueMilestoneEvents } from './IssueMilestoneEvents'; +export { IssueNoteAwardEmojis } from './IssueNoteAwardEmojis'; +export { IssueNotes } from './IssueNotes'; export { Issues } from './Issues'; export { IssuesStatistics } from './IssuesStatistics'; -export { IssueNotes } from './IssueNotes'; -export { IssueNoteAwardEmojis } from './IssueNoteAwardEmojis'; -export { IssueDiscussions } from './IssueDiscussions'; -export { IssueAwardEmojis } from './IssueAwardEmojis'; +export { IssueStateEvents } from './IssueStateEvents'; +export { IssueWeightEvents } from './IssueWeightEvents'; +export { JobArtifacts } from './JobArtifacts'; export { Jobs } from './Jobs'; -export { Labels } from './Labels'; -export { MergeRequests } from './MergeRequests'; export { MergeRequestApprovals } from './MergeRequestApprovals'; export { MergeRequestAwardEmojis } from './MergeRequestAwardEmojis'; +export { MergeRequestContextCommits } from './MergeRequestContextCommits'; export { MergeRequestDiscussions } from './MergeRequestDiscussions'; +export { MergeRequestLabelEvents } from './MergeRequestLabelEvents'; +export { MergeRequestMilestoneEvents } from './MergeRequestMilestoneEvents'; +export { MergeRequestDraftNotes } from './MergeRequestDraftNotes'; export { MergeRequestNotes } from './MergeRequestNotes'; -export { Packages } from './Packages'; +export { MergeRequests } from './MergeRequests'; +export { MergeTrains } from './MergeTrains'; export { PackageRegistry } from './PackageRegistry'; +export { Packages } from './Packages'; +export { PagesDomains } from './PagesDomains'; export { Pipelines } from './Pipelines'; export { PipelineSchedules } from './PipelineSchedules'; export { PipelineScheduleVariables } from './PipelineScheduleVariables'; -export { Projects } from './Projects'; +export { PipelineTriggerTokens } from './PipelineTriggerTokens'; +export { ProductAnalytics } from './ProductAnalytics'; export { ProjectAccessRequests } from './ProjectAccessRequests'; +export { ProjectAccessTokens } from './ProjectAccessTokens'; +export { ProjectAliases } from './ProjectAliases'; export { ProjectBadges } from './ProjectBadges'; export { ProjectCustomAttributes } from './ProjectCustomAttributes'; +export { ProjectDORA4Metrics } from './ProjectDORA4Metrics'; +export { ProjectHooks } from './ProjectHooks'; export { ProjectImportExport } from './ProjectImportExport'; +export { ProjectInvitations } from './ProjectInvitations'; export { ProjectIssueBoards } from './ProjectIssueBoards'; -export { ProjectHooks } from './ProjectHooks'; +export { ProjectIterations } from './ProjectIterations'; +export { ProjectLabels } from './ProjectLabels'; export { ProjectMembers } from './ProjectMembers'; export { ProjectMilestones } from './ProjectMilestones'; -export { ProjectSnippets } from './ProjectSnippets'; -export { ProjectSnippetNotes } from './ProjectSnippetNotes'; -export { ProjectSnippetDiscussions } from './ProjectSnippetDiscussions'; +export { ProjectProtectedEnvironments } from './ProjectProtectedEnvironments'; +export { ProjectPushRules } from './ProjectPushRules'; +export { ProjectRelationsExport } from './ProjectRelationsExport'; +export { ProjectReleases } from './ProjectReleases'; +export { ProjectRemoteMirrors } from './ProjectRemoteMirrors'; +export { ProjectRepositoryStorageMoves } from './ProjectRepositoryStorageMoves'; +export { Projects } from './Projects'; export { ProjectSnippetAwardEmojis } from './ProjectSnippetAwardEmojis'; +export { ProjectSnippetDiscussions } from './ProjectSnippetDiscussions'; +export { ProjectSnippetNotes } from './ProjectSnippetNotes'; +export { ProjectSnippets } from './ProjectSnippets'; +export { ProjectStatistics } from './ProjectStatistics'; +export { ProjectTemplates } from './ProjectTemplates'; +export { ProjectVariables } from './ProjectVariables'; +export { ProjectVulnerabilities } from './ProjectVulnerabilities'; +export { ProjectWikis } from './ProjectWikis'; export { ProtectedBranches } from './ProtectedBranches'; export { ProtectedTags } from './ProtectedTags'; -export { ProjectVariables } from './ProjectVariables'; -export { ProjectDeployTokens } from './ProjectDeployTokens'; -export { PushRules } from './PushRules'; -export { Releases } from './Releases'; export { ReleaseLinks } from './ReleaseLinks'; export { Repositories } from './Repositories'; export { RepositoryFiles } from './RepositoryFiles'; export { RepositorySubmodules } from './RepositorySubmodules'; +export { ResourceGroups } from './ResourceGroups'; export { Runners } from './Runners'; -export { Services } from './Services'; +export { SecureFiles } from './SecureFiles'; export { Tags } from './Tags'; -export { Todos } from './Todos'; -export { Triggers } from './Triggers'; -export { VulnerabilityFindings } from './VulnerabilityFindings'; +export { UserStarredMetricsDashboard } from './UserStarredMetricsDashboard'; -// General -export { ApplicationSettings } from './ApplicationSettings'; -export { BroadcastMessages } from './BroadcastMessages'; -export { Events } from './Events'; -export { FeatureFlags } from './FeatureFlags'; -export { GeoNodes } from './GeoNodes'; -export { GitignoreTemplates } from './GitignoreTemplates'; -export { GitLabCIYMLTemplates } from './GitLabCIYMLTemplates'; -export { Keys } from './Keys'; -export { License } from './License'; -export { LicenseTemplates } from './LicenseTemplates'; -export { Lint } from './Lint'; -export { Namespaces } from './Namespaces'; -export { NotificationSettings } from './NotificationSettings'; -export { Markdown } from './Markdown'; -export { PagesDomains } from './PagesDomains'; -export { Search } from './Search'; -export { SidekiqMetrics } from './SidekiqMetrics'; -export { Snippets } from './Snippets'; -export { SystemHooks } from './SystemHooks'; -export { Version } from './Version'; -export { Wikis } from './Wikis'; +// Groups +export { EpicAwardEmojis } from './EpicAwardEmojis'; +export { EpicDiscussions } from './EpicDiscussions'; +export { EpicIssues } from './EpicIssues'; +export { EpicLabelEvents } from './EpicLabelEvents'; +export { EpicLinks } from './EpicLinks'; +export { EpicNotes } from './EpicNotes'; +export { Epics } from './Epics'; +export { GroupAccessRequests } from './GroupAccessRequests'; +export { GroupAccessTokens } from './GroupAccessTokens'; +export { GroupActivityAnalytics } from './GroupActivityAnalytics'; +export { GroupBadges } from './GroupBadges'; +export { GroupCustomAttributes } from './GroupCustomAttributes'; +export { GroupDORA4Metrics } from './GroupDORA4Metrics'; +export { GroupHooks } from './GroupHooks'; +export { GroupImportExports } from './GroupImportExports'; +export { GroupInvitations } from './GroupInvitations'; +export { GroupIssueBoards } from './GroupIssueBoards'; +export { GroupIterations } from './GroupIterations'; +export { GroupLabels } from './GroupLabels'; +export { GroupLDAPLinks } from './GroupLDAPLinks'; +export { GroupMembers } from './GroupMembers'; +export { GroupMemberRoles } from './GroupMemberRoles'; +export { GroupMilestones } from './GroupMilestones'; +export { GroupProtectedEnvironments } from './GroupProtectedEnvironments'; +export { GroupPushRules } from './GroupPushRules'; +export { GroupRelationExports } from './GroupRelationExports'; +export { GroupReleases } from './GroupReleases'; +export { GroupRepositoryStorageMoves } from './GroupRepositoryStorageMoves'; +export { Groups } from './Groups'; +export { GroupSAMLIdentities } from './GroupSAMLIdentities'; +export { GroupSCIMIdentities } from './GroupSCIMIdentities'; +export { GroupVariables } from './GroupVariables'; +export { GroupWikis } from './GroupWikis'; +export { LinkedEpics } from './LinkedEpics'; + +// Users +export { UserCustomAttributes } from './UserCustomAttributes'; +export { UserEmails } from './UserEmails'; +export { UserGPGKeys } from './UserGPGKeys'; +export { UserImpersonationTokens } from './UserImpersonationTokens'; +export { Users } from './Users'; +export { UserSSHKeys } from './UserSSHKeys'; // Bundle export { Gitlab } from './Gitlab'; diff --git a/packages/core/src/resources/types.ts b/packages/core/src/resources/types.ts deleted file mode 100644 index 1b61fef11..000000000 --- a/packages/core/src/resources/types.ts +++ /dev/null @@ -1,149 +0,0 @@ -// Groups -export { GroupSchema, GroupDetailSchema } from './Groups'; -export { GroupBadgeSchema } from './GroupBadges'; -export { GroupIssueBoardSchema } from './GroupIssueBoards'; -export { EpicSchema } from './Epics'; -export { EpicIssueSchema } from './EpicIssues'; -export { EpicNoteSchema } from './EpicNotes'; - -// Users -export { UserSchema, UserExtendedSchema, UserActivitySchema } from './Users'; -export { UserEmailSchema } from './UserEmails'; -export { - UserImpersonationTokenSchema, - ImpersonationTokenScope, - ImpersonationTokenState, -} from './UserImpersonationTokens'; -export { UserSSHKeySchema } from './UserSSHKeys'; -export { UserGPGKeySchema } from './UserGPGKeys'; - -// Projects -export { BranchSchema } from './Branches'; -export { - CommitAction, - CommitSchema, - CommitExtendedSchema, - GPGSignatureSchema, - X509SignatureSchema, - MissingSignatureSchema, - CommitSignatureSchema, - CommentSchema, - CommitDiffSchema, - CommitStatusSchema, - CommitReferenceSchema, -} from './Commits'; -export { RegistryRepositoryTagSchema, RegistryRepositorySchema } from './ContainerRegistry'; -export { DeploymentStatus, DeployableSchema, DeploymentSchema } from './Deployments'; -export { DeployKeySchema } from './DeployKeys'; -export { EnvironmentSchema } from './Environments'; -export { FreezePeriodSchema } from './FreezePeriods'; -export { TimeStatsSchema, IssueSchema } from './Issues'; -export { StatisticsSchema } from './IssuesStatistics'; -export { IssueNoteSchema } from './IssueNotes'; -export { JobScope, ArtifactSchema, JobSchema, BridgeSchema } from './Jobs'; -export { - AcceptMergeRequestOptions, - ShowMergeRequestOptions, - CreateMergeRequestOptions, - UpdateMergeRequestOptions, - AllMergeRequestsOptions, - ReferenceSchema, - TaskCompletionStatusSchema, - RebaseSchema, - DiffSchema, - MergeRequestSchema, -} from './MergeRequests'; -export { - ProjectLevelMergeRequestApprovalSchema, - ApprovedByEntity, - MergeRequestLevelMergeRequestApprovalSchema, - ApprovalRulesRequestOptions, - ApprovalRuleSchema, - ProjectLevelApprovalRuleSchema, - MergeRequestLevelApprovalRuleSchema, -} from './MergeRequestApprovals'; -export { MergeRequestNoteSchema } from './MergeRequestNotes'; -export { PackageSchema, PackageFileSchema } from './Packages'; -export { - PipelineStatus, - PipelineSchema, - PipelineExtendedSchema, - PipelineVariableSchema, -} from './Pipelines'; -export { PipelineScheduleSchema } from './PipelineSchedules'; -export { - ProjectSchema, - ProjectExtendedSchema, - ProjectFileUploadSchema, - AccessSchema, - SharedWithGroupSchema, -} from './Projects'; -export { ProjectBadgeSchema } from './ProjectBadges'; -export { - ExportStatusSchema, - FailedRelationSchema, - ImportStatusSchema, - UploadMetadata, -} from './ProjectImportExport'; -export { ProjectIssueBoardSchema } from './ProjectIssueBoards'; -export { ProjectHookSchema } from './ProjectHooks'; -export { ProjectSnippetSchema } from './ProjectSnippets'; -export { SnippetNoteSchema } from './ProjectSnippetNotes'; -export { ProtectedBranchAccessLevel, ProtectedBranchSchema } from './ProtectedBranches'; -export { ProtectedTagSchema, ProtectedTagAccessLevel } from './ProtectedTags'; -export { PushRulesSchema } from './PushRules'; -export { ReleaseEvidence, ReleaseAssetSource, ReleaseAssetLink, ReleaseSchema } from './Releases'; -export { ReleaseLinkSchema } from './ReleaseLinks'; -export { - RepositoryCompareSchema, - RepositoryContributorSchema, - RepositoryTreeSchema, -} from './Repositories'; -export { - RepositoryFileExtendedSchema, - RepositoryFileBlameSchema, - RepositoryFileSchema, -} from './RepositoryFiles'; -export { RepositorySubmoduleSchema } from './RepositorySubmodules'; -export { RunnerSchema, RunnerExtendedSchema } from './Runners'; -export { SupportedService, ServiceSchema } from './Services'; -export { TagSchema } from './Tags'; -export { TodoSchema } from './Todos'; -export { PipelineTriggerSchema } from './Triggers'; -export { - VulnerabilityFindingSchema, - VulnerabilityFindingDetailItem, - VulnerabilityFindingIdentifier, -} from './VulnerabilityFindings'; - -// General -export { ApplicationSettingsSchema } from './ApplicationSettings'; -export { BroadcastMessageSchema } from './BroadcastMessages'; -export { EventOptions, EventSchema } from './Events'; -export { FeatureFlagSchema, FeatureFlagStrategy, FeatureFlagStrategyScope } from './FeatureFlags'; -export { GeoNodeSchema, GeoNodeFailureSchema, GeoNodeStatusSchema } from './GeoNodes'; -export { KeySchema } from './Keys'; -export { LicenseSchema } from './License'; -export { LicenseTemplateSchema } from './LicenseTemplates'; -export { LintSchema } from './Lint'; -export { NamespaceSchema } from './Namespaces'; -export { NotificationSettingSchema, NotificationSettingLevel } from './NotificationSettings'; -export { MarkdownSchema } from './Markdown'; -export { PagesDomainSchema } from './PagesDomains'; -export { SearchResultSchema } from './Search'; -export { - SidekickProcessMetricsSchema, - ProcessMetricSchema, - SidekickQueueMetricsSchema, - SidekickJobStatsSchema, - SidekickCompoundMetricsSchema, -} from './SidekiqMetrics'; -export { - SnippetVisibility, - SnippetSchema, - SnippetExtendedSchema, - UserAgentDetailSchema, -} from './Snippets'; -export { SystemHookSchema } from './SystemHooks'; -export { VersionSchema } from './Version'; -export { WikiSchema } from './Wikis'; diff --git a/packages/core/src/templates/ResourceAccessRequests.ts b/packages/core/src/templates/ResourceAccessRequests.ts index 4ab4f7cf5..963301fe2 100644 --- a/packages/core/src/templates/ResourceAccessRequests.ts +++ b/packages/core/src/templates/ResourceAccessRequests.ts @@ -1,5 +1,13 @@ -import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { endpoint, RequestHelper, Sudo } from '../infrastructure'; +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export type AccessLevel = 0 | 5 | 10 | 20 | 30 | 40 | 50; @@ -17,22 +25,33 @@ export class ResourceAccessRequests extends BaseResou super({ prefixUrl: resourceType, ...options }); } - all(resourceId: string | number) { + all( + resourceId: string | number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`${resourceId}/access_requests`, + options, ); } - request(resourceId: string | number) { - return RequestHelper.post()(this, endpoint`${resourceId}/access_requests`); + request( + resourceId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`${resourceId}/access_requests`, + options, + ); } - approve( + approve( resourceId: string | number, userId: number, - options?: { accessLevel?: AccessLevel } & Sudo, - ) { + options?: { accessLevel?: AccessLevel } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`${resourceId}/access_requests/${userId}/approve`, @@ -40,7 +59,11 @@ export class ResourceAccessRequests extends BaseResou ); } - deny(resourceId: string | number, userId: number) { - return RequestHelper.del()(this, endpoint`${resourceId}/access_requests/${userId}`); + deny( + resourceId: string | number, + userId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`${resourceId}/access_requests/${userId}`, options); } } diff --git a/packages/core/src/templates/ResourceAccessTokens.ts b/packages/core/src/templates/ResourceAccessTokens.ts new file mode 100644 index 000000000..133034c8d --- /dev/null +++ b/packages/core/src/templates/ResourceAccessTokens.ts @@ -0,0 +1,81 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { AccessLevel } from './ResourceAccessRequests'; + +export type AccessTokenScopes = + | 'api' + | 'read_api' + | 'read_registry' + | 'write_registry' + | 'read_repository' + | 'write_repository'; + +export interface AccessTokenSchema extends Record { + user_id: number; + scopes?: AccessTokenScopes[]; + name: string; + expires_at: string; + id: number; + active: boolean; + created_at: string; + revoked: boolean; + access_level: AccessLevel; +} + +export class ResourceAccessTokens extends BaseResource { + constructor(resourceType: string, options: BaseResourceOptions) { + super({ prefixUrl: resourceType, ...options }); + } + + all( + resourceId: string | number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/access_tokens`, + options, + ); + } + + create( + resourceId: string | number, + name: string, + scopes: AccessTokenScopes[], + options?: { accessLevel?: AccessLevel; expiresAt?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`${resourceId}/access_tokens`, { + name, + scopes, + ...options, + }); + } + + revoke( + resourceId: string | number, + tokenId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`${resourceId}/access_tokens/${tokenId}`, options); + } + + show( + resourceId: string | number, + tokenId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/access_tokens/${tokenId}`, + options, + ); + } +} diff --git a/packages/core/src/templates/ResourceAwardEmojis.ts b/packages/core/src/templates/ResourceAwardEmojis.ts index de90c9f5e..ca7c3c413 100644 --- a/packages/core/src/templates/ResourceAwardEmojis.ts +++ b/packages/core/src/templates/ResourceAwardEmojis.ts @@ -1,6 +1,14 @@ -import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { UserSchema } from '../resources/Users'; -import { PaginatedRequestOptions, RequestHelper, Sudo } from '../infrastructure'; +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { UserSchema } from '../resources/Users'; export interface AwardEmojiSchema extends Record { id: number; @@ -12,46 +20,52 @@ export interface AwardEmojiSchema extends Record { awardable_type: string; } -export function url( - projectId: number | string, - resourceType: string, +function url( resourceId: number | string, - awardId?: number | null, - noteId?: number, + resourceType2: string, + resourceId2: number | string, + awardId?: number, ) { - const [pId, rId] = [projectId, resourceId].map(encodeURIComponent); - const output = [pId, resourceType, rId]; - - if (noteId) output.push('notes', encodeURIComponent(noteId)); + const [rId, rId2] = [resourceId, resourceId2].map(encodeURIComponent); + const output: (string | number)[] = [rId, resourceType2, rId2]; output.push('award_emoji'); - if (awardId) output.push(encodeURIComponent(awardId)); + if (awardId) output.push(awardId); return output.join('/'); } export class ResourceAwardEmojis extends BaseResource { - protected resourceType: string; + protected resourceType2: string; - constructor(resourceType: string, options: BaseResourceOptions) { - super({ prefixUrl: 'projects', ...options }); + constructor(resourceType1: string, resourceType2: string, options: BaseResourceOptions) { + super({ prefixUrl: resourceType1, ...options }); - this.resourceType = resourceType; + this.resourceType2 = resourceType2; } - all(projectId: string | number, resourceIId: number, options?: PaginatedRequestOptions) { + all( + resourceId: string | number, + resourceIId: number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, - url(projectId, this.resourceType, resourceIId), + url(resourceId, this.resourceType2, resourceIId), options, ); } - award(projectId: string | number, resourceIId: number, name: string, options?: Sudo) { + award( + resourceId: string | number, + resourceIId: number, + name: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, - url(projectId, this.resourceType, resourceIId), + url(resourceId, this.resourceType2, resourceIId), { name, ...options, @@ -59,18 +73,28 @@ export class ResourceAwardEmojis extends BaseResource ); } - remove(projectId: string | number, resourceIId: number, awardId: number, options?: Sudo) { + remove( + resourceId: string | number, + resourceIId: number, + awardId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, - url(projectId, this.resourceType, resourceIId, awardId), + url(resourceId, this.resourceType2, resourceIId, awardId), options, ); } - show(projectId: string | number, resourceIId: number, awardId: number, options?: Sudo) { + show( + resourceId: string | number, + resourceIId: number, + awardId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, - url(projectId, this.resourceType, resourceIId, awardId), + url(resourceId, this.resourceType2, resourceIId, awardId), options, ); } diff --git a/packages/core/src/templates/ResourceBadges.ts b/packages/core/src/templates/ResourceBadges.ts index 67359214d..875f3cb12 100644 --- a/packages/core/src/templates/ResourceBadges.ts +++ b/packages/core/src/templates/ResourceBadges.ts @@ -1,36 +1,63 @@ -import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; -export interface BadgeSchema extends Record { - name: string; - id: number; +export interface CondensedBadgeSchema extends Record { link_url: string; image_url: string; rendered_link_url: string; rendered_image_url: string; +} + +export interface BadgeSchema extends CondensedBadgeSchema { + name: string; + id: number; kind: 'project' | 'group'; } +export interface EditBadgeOptions { + name?: string; + linkUrl?: string; + imageUrl?: string; +} + export class ResourceBadges extends BaseResource { constructor(resourceType: string, options: BaseResourceOptions) { super({ prefixUrl: resourceType, ...options }); } - add(resourceId: string | number, options?: BaseRequestOptions) { - return RequestHelper.post()(this, endpoint`${resourceId}/badges`, options); + add( + resourceId: string | number, + linkUrl: string, + imageUrl: string, + options?: { name?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`${resourceId}/badges`, { + linkUrl, + imageUrl, + ...options, + }); } - all(resourceId: string | number, options?: PaginatedRequestOptions) { + all( + resourceId: string | number, + options?: { name?: string } & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()(this, endpoint`${resourceId}/badges`, options); } - edit(resourceId: string | number, badgeId: number, options?: BaseRequestOptions) { + edit( + resourceId: string | number, + badgeId: number, + options?: EditBadgeOptions & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.put()( this, endpoint`${resourceId}/badges/${badgeId}`, @@ -38,19 +65,32 @@ export class ResourceBadges extends BaseResource { ); } - preview(resourceId: string | number, linkUrl: string, imageUrl: string, options?: Sudo) { - return RequestHelper.get>()( - this, - endpoint`${resourceId}/badges/render`, - { linkUrl, imageUrl, ...options }, - ); + preview( + resourceId: string | number, + linkUrl: string, + imageUrl: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, endpoint`${resourceId}/badges/render`, { + linkUrl, + imageUrl, + ...options, + }); } - remove(resourceId: string | number, badgeId: number, options?: Sudo) { + remove( + resourceId: string | number, + badgeId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()(this, endpoint`${resourceId}/badges/${badgeId}`, options); } - show(resourceId: string | number, badgeId: number, options?: Sudo) { + show( + resourceId: string | number, + badgeId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`${resourceId}/badges/${badgeId}`, diff --git a/packages/core/src/templates/ResourceCustomAttributes.ts b/packages/core/src/templates/ResourceCustomAttributes.ts index 7b37d5aa1..360f35a37 100644 --- a/packages/core/src/templates/ResourceCustomAttributes.ts +++ b/packages/core/src/templates/ResourceCustomAttributes.ts @@ -1,5 +1,13 @@ -import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { endpoint, PaginatedRequestOptions, RequestHelper, Sudo } from '../infrastructure'; +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface CustomAttributeSchema extends Record { key: string; @@ -11,7 +19,10 @@ export class ResourceCustomAttributes extends BaseRes super({ prefixUrl: resourceType, ...options }); } - all(resourceId: string | number, options?: PaginatedRequestOptions) { + all( + resourceId: string | number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`${resourceId}/custom_attributes`, @@ -19,26 +30,39 @@ export class ResourceCustomAttributes extends BaseRes ); } - set(resourceId: string | number, customAttributeId: number, value: string, options?: Sudo) { - return RequestHelper.put()( + remove( + resourceId: string | number, + customAttributeId: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()( this, endpoint`${resourceId}/custom_attributes/${customAttributeId}`, - { - value, - ...options, - }, + options, ); } - remove(resourceId: string | number, customAttributeId: number, options?: Sudo) { - return RequestHelper.del()( + set( + resourceId: string | number, + customAttributeId: string, + value: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( this, endpoint`${resourceId}/custom_attributes/${customAttributeId}`, - options, + { + value, + ...options, + }, ); } - show(resourceId: string | number, customAttributeId: number, options?: Sudo) { + show( + resourceId: string | number, + customAttributeId: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`${resourceId}/custom_attributes/${customAttributeId}`, diff --git a/packages/core/src/templates/ResourceDORA4Metrics.ts b/packages/core/src/templates/ResourceDORA4Metrics.ts new file mode 100644 index 000000000..7fa7d048a --- /dev/null +++ b/packages/core/src/templates/ResourceDORA4Metrics.ts @@ -0,0 +1,37 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { BaseRequestOptions, GitlabAPIResponse } from '../infrastructure'; + +export type MetricType = + | 'deployment_frequency' + | 'lead_time_for_changes' + | 'time_to_restore_service' + | 'change_failure_rate'; + +export interface DORA4MetricSchema extends Record { + date: string; + value: number; +} + +export class ResourceDORA4Metrics extends BaseResource { + constructor(resourceType: string, options: BaseResourceOptions) { + super({ prefixUrl: resourceType, ...options }); + } + + all( + resourceId: string | number, + metric: MetricType, + options?: { + startDate?: string; + endDate?: string; + interval?: 'all' | 'monthly' | 'daily'; + environmentTiers?: string[]; + } & BaseRequestOptions, + ): Promise> { + return RequestHelper.get()(this, endpoint`${resourceId}/dora/metrics`, { + metric, + ...options, + }); + } +} diff --git a/packages/core/src/templates/ResourceDeployTokens.ts b/packages/core/src/templates/ResourceDeployTokens.ts deleted file mode 100644 index ce7102147..000000000 --- a/packages/core/src/templates/ResourceDeployTokens.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, - Sudo, -} from '../infrastructure'; - -export type DeployTokenScope = - | 'read_repository' - | 'read_registry' - | 'write_registry' - | 'read_package_registry' - | 'write_package_registry'; - -export interface DeployTokenSchema extends Record { - id: number; - name: string; - username: string; - expires_at: string; - scopes?: string[]; -} - -// https://docs.gitlab.com/ee/api/deploy_tokens.html -export class ResourceDeployTokens extends BaseResource { - constructor(resourceType: string, options: BaseResourceOptions) { - super({ prefixUrl: resourceType, ...options }); - } - - add( - resourceId: string | number, - tokenName: string, - tokenScopes: DeployTokenScope[], - options?: BaseRequestOptions, - ) { - return RequestHelper.post()(this, endpoint`${resourceId}/deploy_tokens`, { - name: tokenName, - scopes: tokenScopes, - ...options, - }); - } - - all({ - resourceId, - projectId, - groupId, - ...options - }: { - resourceId?: string | number; - projectId?: string | number; - groupId?: string | number; - } & PaginatedRequestOptions = {}) { - const prefix = - resourceId || projectId || groupId - ? endpoint`${(resourceId || projectId || groupId) as string}/` - : ''; - - return RequestHelper.get()(this, `${prefix}deploy_tokens`, options); - } - - remove(resourceId: string | number, tokenId: number, options?: Sudo) { - return RequestHelper.del()(this, endpoint`${resourceId}/deploy_tokens/${tokenId}`, options); - } -} diff --git a/packages/core/src/templates/ResourceDiscussions.ts b/packages/core/src/templates/ResourceDiscussions.ts index d0bf3ba7c..0a1cf8226 100644 --- a/packages/core/src/templates/ResourceDiscussions.ts +++ b/packages/core/src/templates/ResourceDiscussions.ts @@ -1,26 +1,44 @@ import { decamelizeKeys } from 'xcase'; -import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { UserSchema } from '../resources/Users'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; +import type { UserSchema } from '../resources/Users'; -export interface DiscussionNotePosition { +export interface DiscussionNotePositionBaseSchema extends Record { base_sha: string; start_sha: string; head_sha: string; - old_path: string; - new_path: string; - position_type: string; - old_line: number; - new_line: number; + position_type: 'text' | 'image'; + old_path?: string; + new_path?: string; } -export interface DiscussionNote { +export type DiscussionNotePositionTextSchema = DiscussionNotePositionBaseSchema & { + position_type: 'text'; + new_line?: string; + old_line?: string; +}; + +export type DiscussionNotePositionImageSchema = DiscussionNotePositionBaseSchema & { + position_type: 'image'; + width?: string; + height?: string; + x?: number; + y?: number; +}; + +export type DiscussionNotePositionSchema = + | DiscussionNotePositionTextSchema + | DiscussionNotePositionImageSchema; + +export interface DiscussionNoteSchema extends Record { id: number; type?: string; body: string; @@ -32,15 +50,13 @@ export interface DiscussionNote { noteable_id: number; noteable_type: string; noteable_iid?: number; - resolvable: boolean; - resolved?: boolean; - position?: DiscussionNotePosition; + resolvable?: boolean; } export interface DiscussionSchema extends Record { id: string; individual_note: boolean; - notes?: DiscussionNote[]; + notes?: DiscussionNoteSchema[]; } export class ResourceDiscussions extends BaseResource { @@ -52,26 +68,26 @@ export class ResourceDiscussions extends BaseResource this.resource2Type = resource2Type; } - addNote( + addNote( resourceId: string | number, resource2Id: string | number, discussionId: string | number, noteId: number, body: string, - options?: BaseRequestOptions, - ) { - return RequestHelper.post()( + options?: { createdAt?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( this, endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/discussions/${discussionId}/notes`, - { query: { body }, noteId, ...options }, + { searchParams: { body }, noteId, ...options }, ); } - all( + all( resourceId: string | number, resource2Id: string | number, - options?: PaginatedRequestOptions, - ) { + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/discussions`, @@ -79,16 +95,20 @@ export class ResourceDiscussions extends BaseResource ); } - create( + create( resourceId: string | number, resource2Id: string | number, body: string, - { position, ...options }: { position?: DiscussionNotePosition } & BaseRequestOptions = {}, - ) { - const opts = { ...options }; + { + position, + ...options + }: { position?: DiscussionNotePositionSchema; commitId?: string; createdAt?: string } & Sudo & + ShowExpanded = {}, + ): Promise> { + const opts: Record = { ...options }; if (position) { - const p = decamelizeKeys(position); + const p: Record = decamelizeKeys(position); opts.isForm = true; opts.body = body; @@ -97,7 +117,7 @@ export class ResourceDiscussions extends BaseResource opts[`position[${k}]`] = v; }); } else { - opts.query = { body }; + opts.searchParams = { body }; } return RequestHelper.post()( @@ -107,30 +127,30 @@ export class ResourceDiscussions extends BaseResource ); } - editNote( + editNote( resourceId: string | number, resource2Id: string | number, discussionId: string | number, noteId: number, - { body, ...options }: BaseRequestOptions & { body?: string } = {}, - ) { - return RequestHelper.put()( + { body, ...options }: Sudo & ShowExpanded & { body?: string; resolved?: boolean } = {}, + ): Promise> { + return RequestHelper.put()( this, endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/discussions/${discussionId}/notes/${noteId}`, { - query: { body }, + searchParams: { body }, ...options, }, ); } - removeNote( + removeNote( resourceId: string | number, resource2Id: string | number, discussionId: string | number, noteId: number, - options?: Sudo, - ) { + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/discussions/${discussionId}/notes/${noteId}`, @@ -138,12 +158,12 @@ export class ResourceDiscussions extends BaseResource ); } - show( + show( resourceId: string | number, resource2Id: string | number, discussionId: string | number, - options?: Sudo, - ) { + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/discussions/${discussionId}`, diff --git a/packages/core/src/templates/ResourceHooks.ts b/packages/core/src/templates/ResourceHooks.ts new file mode 100644 index 000000000..75bed76b6 --- /dev/null +++ b/packages/core/src/templates/ResourceHooks.ts @@ -0,0 +1,114 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface HookSchema extends Record { + id: number; + url: string; + created_at: string; + push_events: boolean; + tag_push_events: boolean; + merge_requests_events: boolean; + repository_update_events: boolean; // TODO: Does this only exist for system hooks? + enable_ssl_verification: boolean; +} + +export interface ExpandedHookSchema extends HookSchema { + push_events_branch_filter: string; + issues_events: boolean; + confidential_issues_events: boolean; + note_events: boolean; + confidential_note_events: boolean; + job_events: boolean; + pipeline_events: boolean; + wiki_page_events: boolean; + deployment_events: boolean; + releases_events: boolean; + alert_status: string; + disabled_until?: string; + url_variables: string[]; +} + +export interface AddResourceHookOptions { + pushEvents?: boolean; + pushEventsBranchFilter?: string; + issuesEvents?: boolean; + confidentialIssuesEvents?: boolean; + mergeRequestsEvents?: boolean; + tagPushEvents?: boolean; + noteEvents?: boolean; + confidentialNoteEvents?: boolean; + jobEvents?: boolean; + pipelineEvents?: boolean; + wikiPageEvents?: boolean; + deploymentEvents?: boolean; + releasesEvents?: boolean; + subgroupEvents?: boolean; + enableSslVerification?: boolean; + token?: string; +} + +export type EditResourceHookOptions = AddResourceHookOptions; + +export class ResourceHooks extends BaseResource { + constructor(resourceType: string, options: BaseResourceOptions) { + super({ prefixUrl: resourceType, ...options }); + } + + add( + resourceId: string | number, + url: string, + options?: AddResourceHookOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`${resourceId}/hooks`, { + url, + ...options, + }); + } + + all( + resourceId: string | number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, endpoint`${resourceId}/hooks`, options); + } + + edit( + resourceId: string | number, + hookId: number, + url: string, + options?: EditResourceHookOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()(this, endpoint`${resourceId}/hooks/${hookId}`, { + url, + ...options, + }); + } + + remove( + resourceId: string | number, + hookId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`${resourceId}/hooks/${hookId}`, options); + } + + show( + resourceId: string | number, + hookId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/hooks/${hookId}`, + options, + ); + } +} diff --git a/packages/core/src/templates/ResourceInvitations.ts b/packages/core/src/templates/ResourceInvitations.ts new file mode 100644 index 000000000..b193106e4 --- /dev/null +++ b/packages/core/src/templates/ResourceInvitations.ts @@ -0,0 +1,85 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + Either, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import { AccessLevel } from './ResourceAccessRequests'; + +export interface InvitationSchema extends Record { + id: number; + invite_email: string; + created_at: string; + access_level: AccessLevel; + expires_at: string; + user_name: string; + created_by_name: string; +} + +export class ResourceInvitations extends BaseResource { + constructor(resourceType: string, options: BaseResourceOptions) { + super({ prefixUrl: resourceType, ...options }); + } + + add( + resourceId: string | number, + accessLevel: AccessLevel, + options: Either<{ email: string }, { userId: string }> & { + expiresAt?: string; + inviteSource?: string; + tasksToBeDone?: string[]; + tasksProjectId?: number; + } & Sudo & + ShowExpanded, + ): Promise> { + if (!options?.email && !options?.userId) + throw new Error( + 'Missing required argument. Please supply a email or a userId in the options parameter.', + ); + + return RequestHelper.post()(this, endpoint`${resourceId}/invitations`, { + accessLevel, + ...options, + }); + } + + all( + resourceId: string | number, + options?: PaginationRequestOptions

& { query?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/invitations`, + options, + ); + } + + edit( + resourceId: string | number, + email: string, + options?: { expiresAt?: string; accessLevel?: AccessLevel } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`${resourceId}/invitations/${email}`, + options, + ); + } + + remove( + resourceId: string | number, + email: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`${resourceId}/invitations/${email}`, + options, + ); + } +} diff --git a/packages/core/src/templates/ResourceIssueBoards.ts b/packages/core/src/templates/ResourceIssueBoards.ts index a6bce1bf5..d8a2ad10f 100644 --- a/packages/core/src/templates/ResourceIssueBoards.ts +++ b/packages/core/src/templates/ResourceIssueBoards.ts @@ -1,13 +1,16 @@ -import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { MilestoneSchema } from './ResourceMilestones'; -import { LabelSchema } from './ResourceLabels'; -import { - BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + EitherOrNone3, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; +import { MilestoneSchema } from './ResourceMilestones'; +import { LabelSchema } from './ResourceLabels'; export interface IssueBoardListSchema extends Record { id: number; @@ -30,44 +33,80 @@ export class ResourceIssueBoards extends BaseResource super({ prefixUrl: resourceType, ...options }); } - all(resourceId: string | number, options?: PaginatedRequestOptions) { + all( + resourceId: string | number, + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()(this, endpoint`${resourceId}/boards`, options); } - create(resourceId: string | number, name: string, options?: Sudo) { + allLists( + resourceId: string | number, + boardId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/boards/${boardId}/lists`, + options, + ); + } + + create( + resourceId: string | number, + name: string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()(this, endpoint`${resourceId}/boards`, { name, ...options, }); } - createList( + createList( resourceId: string | number, boardId: number, - labelId: number | string, - options?: Sudo, - ) { + options?: EitherOrNone3< + { labelId?: number }, + { assigneeId?: number }, + { milestoneId?: number } + > & + Sudo & + ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`${resourceId}/boards/${boardId}/lists`, - { - labelId, - ...options, - }, + options, ); } - edit(resourceId: string | number, boardId: number, options?: BaseRequestOptions) { - return RequestHelper.put()(this, endpoint`${resourceId}/boards/${boardId}`, options); + edit( + resourceId: string | number, + boardId: number, + options?: { + name?: string; + assigneeId?: number; + milestoneId?: number; + labels?: string; + weight?: number; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`${resourceId}/boards/${boardId}`, + options, + ); } - editList( + editList( resourceId: string | number, boardId: number, listId: number, position: number, - options?: Sudo, - ) { + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.put()( this, endpoint`${resourceId}/boards/${boardId}/lists/${listId}`, @@ -78,19 +117,20 @@ export class ResourceIssueBoards extends BaseResource ); } - lists(resourceId: string | number, boardId: number, options?: Sudo) { - return RequestHelper.get()( - this, - endpoint`${resourceId}/boards/${boardId}/lists`, - options, - ); - } - - remove(resourceId: string | number, boardId: number, options?: Sudo) { + remove( + resourceId: string | number, + boardId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()(this, endpoint`${resourceId}/boards/${boardId}`, options); } - removeList(resourceId: string | number, boardId: number, listId: number, options?: Sudo) { + removeList( + resourceId: string | number, + boardId: number, + listId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, endpoint`${resourceId}/boards/${boardId}/lists/${listId}`, @@ -98,7 +138,11 @@ export class ResourceIssueBoards extends BaseResource ); } - show(resourceId: string | number, boardId: number, options?: Sudo) { + show( + resourceId: string | number, + boardId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`${resourceId}/boards/${boardId}`, @@ -106,7 +150,12 @@ export class ResourceIssueBoards extends BaseResource ); } - showList(resourceId: string | number, boardId: number, listId: number, options?: Sudo) { + showList( + resourceId: string | number, + boardId: number, + listId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`${resourceId}/boards/${boardId}/lists/${listId}`, diff --git a/packages/core/src/templates/ResourceIterationEvents.ts b/packages/core/src/templates/ResourceIterationEvents.ts new file mode 100644 index 000000000..027cf86d2 --- /dev/null +++ b/packages/core/src/templates/ResourceIterationEvents.ts @@ -0,0 +1,57 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { UserSchema } from '../resources/Users'; +import type { IterationSchema } from './ResourceIterations'; + +export interface IterationEventSchema extends Record { + id: number; + user: Omit; + created_at: string; + resource_type: 'Issue'; + resource_id: number; + iteration: IterationSchema; + action: 'add' | 'remove'; +} + +export class ResourceIterationEvents extends BaseResource { + protected resource2Type: string; + + constructor(resourceType: string, resource2Type: string, options: BaseResourceOptions) { + super({ prefixUrl: resourceType, ...options }); + + this.resource2Type = resource2Type; + } + + all( + resourceId: string | number, + resource2Id: string | number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/resource_iteration_events`, + options, + ); + } + + show( + resourceId: string | number, + resource2Id: string | number, + iterationEventId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/resource_iteration_events/${iterationEventId}`, + options, + ); + } +} diff --git a/packages/core/src/templates/ResourceIterations.ts b/packages/core/src/templates/ResourceIterations.ts new file mode 100644 index 000000000..a618b1e9f --- /dev/null +++ b/packages/core/src/templates/ResourceIterations.ts @@ -0,0 +1,49 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface IterationSchema extends Record { + id: number; + iid: number; + group_id: number; + title: string; + description: string; + state: number; + created_at: string; + updated_at: string; + due_date: string; + start_date: string; + web_url: string; +} + +export interface AllIterationsOptions { + state?: 'opened' | 'upcoming' | 'current' | 'closed' | 'all'; + search?: string; + includeAncestors?: boolean; + updatedBefore?: string; + updatedAfter?: string; +} + +export class ResourceIterations extends BaseResource { + constructor(resourceType: string, options: BaseResourceOptions) { + super({ prefixUrl: resourceType, ...options }); + } + + all( + resourceId: string | number, + options?: AllIterationsOptions & Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/iterations`, + options, + ); + } +} diff --git a/packages/core/src/templates/ResourceLabelEvents.ts b/packages/core/src/templates/ResourceLabelEvents.ts new file mode 100644 index 000000000..b63af7020 --- /dev/null +++ b/packages/core/src/templates/ResourceLabelEvents.ts @@ -0,0 +1,57 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { UserSchema } from '../resources/Users'; +import type { LabelSchema } from './ResourceLabels'; + +export interface LabelEventSchema extends Record { + id: number; + user: Omit; + created_at: string; + resource_type: 'Issue' | 'Epic' | 'MergeRequest'; + resource_id: number; + label: LabelSchema; + action: 'add' | 'remove'; +} + +export class ResourceLabelEvents extends BaseResource { + protected resource2Type: string; + + constructor(resourceType: string, resource2Type: string, options: BaseResourceOptions) { + super({ prefixUrl: resourceType, ...options }); + + this.resource2Type = resource2Type; + } + + all( + resourceId: string | number, + resource2Id: string | number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/resource_label_events`, + options, + ); + } + + show( + resourceId: string | number, + resource2Id: string | number, + labelEventId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/resource_label_events/${labelEventId}`, + options, + ); + } +} diff --git a/packages/core/src/templates/ResourceLabels.ts b/packages/core/src/templates/ResourceLabels.ts index 0c04b0777..ea818ddea 100644 --- a/packages/core/src/templates/ResourceLabels.ts +++ b/packages/core/src/templates/ResourceLabels.ts @@ -1,11 +1,13 @@ -import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { - BaseRequestOptions, - PaginatedRequestOptions, - RequestHelper, - Sudo, +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + Either, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, ShowExpanded, - endpoint, + Sudo, } from '../infrastructure'; export interface LabelSchema extends Record { @@ -28,16 +30,25 @@ export class ResourceLabels extends BaseResource { super({ prefixUrl: resourceType, ...options }); } - all(resourceId: string | number, options?: PaginatedRequestOptions) { + all( + resourceId: string | number, + options?: { + withCounts?: boolean; + includeAncestorGroups?: boolean; + search?: string; + } & PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise> { return RequestHelper.get()(this, endpoint`${resourceId}/labels`, options); } - create( + create( resourceId: string | number, labelName: string, color: string, - options?: BaseRequestOptions, - ) { + options?: { description?: string; priority?: number } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()(this, endpoint`${resourceId}/labels`, { name: labelName, color, @@ -45,7 +56,20 @@ export class ResourceLabels extends BaseResource { }); } - edit(resourceId: string | number, labelId: number | string, options?: BaseRequestOptions) { + edit( + resourceId: number | string, + labelId: number | string, + options: Either<{ newName: string }, { color: string }> & { + description?: string; + priority?: number; + } & Sudo & + ShowExpanded, + ): Promise> { + if (!options?.newName && !options?.color) + throw new Error( + 'Missing required argument. Please supply a color or a newName in the options parameter.', + ); + return RequestHelper.put()( this, endpoint`${resourceId}/labels/${labelId}`, @@ -53,11 +77,43 @@ export class ResourceLabels extends BaseResource { ); } - remove(resourceId: string | number, labelId: number | string, options?: Sudo & ShowExpanded) { + promote( + resourceId: string | number, + labelId: number | string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + endpoint`${resourceId}/labels/${labelId}/promote`, + options, + ); + } + + remove( + resourceId: string | number, + labelId: number | string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()(this, endpoint`${resourceId}/labels/${labelId}`, options); } - subscribe(resourceId: string | number, labelId: number | string, options?: Sudo & ShowExpanded) { + show( + resourceId: string | number, + labelId: number | string, + options?: { includeAncestorGroups?: boolean } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/labels/${labelId}`, + options, + ); + } + + subscribe( + resourceId: string | number, + labelId: number | string, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`${resourceId}/issues/${labelId}/subscribe`, @@ -65,11 +121,11 @@ export class ResourceLabels extends BaseResource { ); } - unsubscribe( + unsubscribe( resourceId: string | number, labelId: number | string, - options?: Sudo & ShowExpanded, - ) { + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`${resourceId}/issues/${labelId}/unsubscribe`, diff --git a/packages/core/src/templates/ResourceMembers.ts b/packages/core/src/templates/ResourceMembers.ts index fcc7ef4da..5a637c8c5 100644 --- a/packages/core/src/templates/ResourceMembers.ts +++ b/packages/core/src/templates/ResourceMembers.ts @@ -1,27 +1,36 @@ -import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { BaseRequestOptions, - endpoint, - PaginatedRequestOptions, - RequestHelper, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, } from '../infrastructure'; -import { AccessLevel } from './ResourceAccessRequests'; +import type { AccessLevel } from './ResourceAccessRequests'; export interface IncludeInherited { includeInherited?: boolean; } -export interface MemberSchema extends Record { +export interface CondensedMemberSchema extends Record { id: number; username: string; name: string; state: string; avatar_url: string; web_url: string; +} + +export interface SimpleMemberSchema extends CondensedMemberSchema { expires_at: string; access_level: AccessLevel; email: string; +} + +export interface MemberSchema extends SimpleMemberSchema { group_saml_identity: { extern_uid: string; provider: string; @@ -29,17 +38,31 @@ export interface MemberSchema extends Record { }; } +export interface AddMemeberOptions { + expiresAt?: string; + inviteSource?: string; + tasksToBeDone?: string[]; + tasksProjectId?: number; +} + +export interface AllMembersOptions { + query?: string; + userIds?: number[]; + skipUsers?: number[]; + showSeatInfo?: boolean; +} + export class ResourceMembers extends BaseResource { constructor(resourceType: string, options: BaseResourceOptions) { super({ prefixUrl: resourceType, ...options }); } - add( + add( resourceId: string | number, userId: number, accessLevel: AccessLevel, - options?: BaseRequestOptions, - ) { + options?: AddMemeberOptions & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()(this, endpoint`${resourceId}/members`, { userId: String(userId), accessLevel, @@ -47,35 +70,40 @@ export class ResourceMembers extends BaseResource }); } - all( + all( resourceId: string | number, - { includeInherited, ...options }: IncludeInherited & PaginatedRequestOptions = {}, - ) { - const rId = encodeURIComponent(resourceId); - const url = [rId, 'members']; + { + includeInherited, + ...options + }: IncludeInherited & + PaginationRequestOptions

& + AllMembersOptions & + BaseRequestOptions = {} as any, + ): Promise> { + let url = endpoint`${resourceId}/members`; - if (includeInherited) url.push('all'); + if (includeInherited) url += '/all'; - return RequestHelper.get()(this, url.join('/'), options); + return RequestHelper.get()(this, url, options); } - edit( + edit( resourceId: string | number, userId: number, accessLevel: AccessLevel, - options?: BaseRequestOptions, - ) { + options?: { expiresAt?: string; memberRoleId?: number } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.put()(this, endpoint`${resourceId}/members/${userId}`, { accessLevel, ...options, }); } - show( + show( resourceId: string | number, userId: number, - { includeInherited, ...options }: IncludeInherited & Sudo = {}, - ) { + { includeInherited, ...options }: IncludeInherited & Sudo & ShowExpanded = {}, + ): Promise> { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); const url = [rId, 'members']; @@ -86,11 +114,15 @@ export class ResourceMembers extends BaseResource return RequestHelper.get()( this, url.join('/'), - options as Record, + options as Sudo & ShowExpanded, ); } - remove(resourceId: string | number, userId: number, options?: Sudo) { + remove( + resourceId: string | number, + userId: number, + options?: { skipSubresourceS?: boolean; unassignIssuables?: boolean } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()(this, endpoint`${resourceId}/members/${userId}`, options); } } diff --git a/packages/core/src/templates/ResourceMilestoneEvents.ts b/packages/core/src/templates/ResourceMilestoneEvents.ts new file mode 100644 index 000000000..bdf3c4db3 --- /dev/null +++ b/packages/core/src/templates/ResourceMilestoneEvents.ts @@ -0,0 +1,57 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { UserSchema } from '../resources/Users'; +import type { MilestoneSchema } from './ResourceMilestones'; + +export interface MilestoneEventSchema extends Record { + id: number; + user: Omit; + created_at: string; + resource_type: 'Issue' | 'MergeRequest'; + resource_id: number; + milestone: MilestoneSchema; + action: 'add' | 'remove'; +} + +export class ResourceMilestoneEvents extends BaseResource { + protected resource2Type: string; + + constructor(resourceType: string, resource2Type: string, options: BaseResourceOptions) { + super({ prefixUrl: resourceType, ...options }); + + this.resource2Type = resource2Type; + } + + all( + resourceId: string | number, + resource2Id: string | number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/resource_milestone_events`, + options, + ); + } + + show( + resourceId: string | number, + resource2Id: string | number, + milestoneEventId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/resource_milestone_events/${milestoneEventId}`, + options, + ); + } +} diff --git a/packages/core/src/templates/ResourceMilestones.ts b/packages/core/src/templates/ResourceMilestones.ts index 9630aff69..cfa0d2f77 100644 --- a/packages/core/src/templates/ResourceMilestones.ts +++ b/packages/core/src/templates/ResourceMilestones.ts @@ -1,13 +1,15 @@ -import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { - RequestHelper, - PaginatedRequestOptions, - BaseRequestOptions, +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - endpoint, } from '../infrastructure'; -import { IssueSchema } from '../resources/Issues'; -import { MergeRequestSchema } from '../resources/MergeRequests'; +import type { IssueSchema } from '../resources/Issues'; +import type { MergeRequestSchema } from '../resources/MergeRequests'; export interface MilestoneSchema extends Record { id: number; @@ -21,7 +23,23 @@ export interface MilestoneSchema extends Record { updated_at: string; created_at: string; expired: boolean; - web_url?: string; + web_url: string; +} + +export interface BurndownChartEventSchema extends Record { + created_at: string; + weight: number; + action: string; +} + +export interface AllMilestonesOptions { + iids?: number[]; + state?: string; + title?: string; + search?: string; + includeParentMilestones?: boolean; + updatedBefore?: string; + updatedAfter?: string; } export class ResourceMilestones extends BaseResource { @@ -29,7 +47,10 @@ export class ResourceMilestones extends BaseResource< super({ prefixUrl: resourceType, ...options }); } - all(resourceId: string | number, options?: PaginatedRequestOptions) { + all( + resourceId: string | number, + options?: AllMilestonesOptions & PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`${resourceId}/milestones`, @@ -37,38 +58,86 @@ export class ResourceMilestones extends BaseResource< ); } - create(resourceId: string | number, title: string, options?: BaseRequestOptions) { - return RequestHelper.post()(this, endpoint`${resourceId}/milestones`, { - title, - ...options, - }); + allAssignedIssues( + resourceId: string | number, + milestoneId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/milestones/${milestoneId}/issues`, + options, + ); } - edit(resourceId: string | number, milestoneId: number, options?: BaseRequestOptions) { - return RequestHelper.put()( + allAssignedMergeRequests( + resourceId: string | number, + milestoneId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`${resourceId}/milestones/${milestoneId}`, + endpoint`${resourceId}/milestones/${milestoneId}/merge_requests`, options, ); } - issues(resourceId: string | number, milestoneId: number, options?: Sudo) { - return RequestHelper.get()( + allBurndownChartEvents( + resourceId: string | number, + milestoneId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( this, - endpoint`${resourceId}/milestones/${milestoneId}/issues`, + endpoint`${resourceId}/milestones/${milestoneId}/burndown_events`, options, ); } - mergeRequests(resourceId: string | number, milestoneId: number, options?: Sudo) { - return RequestHelper.get()( + create( + resourceId: string | number, + title: string, + options?: { description?: string; dueDate?: string; startDate?: string } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`${resourceId}/milestones`, { + title, + ...options, + }); + } + + edit( + resourceId: string | number, + milestoneId: number, + options?: { + title?: string; + description?: string; + dueDate?: string; + startDate?: string; + startEvent?: 'close' | 'activate'; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.put()( this, - endpoint`${resourceId}/milestones/${milestoneId}/merge_requests`, + endpoint`${resourceId}/milestones/${milestoneId}`, options, ); } - show(resourceId: string | number, milestoneId: number, options?: Sudo) { + remove( + resourceId: string | number, + milestoneId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`${resourceId}/milestones/${milestoneId}`, options); + } + + show( + resourceId: string | number, + milestoneId: number, + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`${resourceId}/milestones/${milestoneId}`, diff --git a/packages/core/src/templates/ResourceNoteAwardEmojis.ts b/packages/core/src/templates/ResourceNoteAwardEmojis.ts index 3984d192b..63fde6952 100644 --- a/packages/core/src/templates/ResourceNoteAwardEmojis.ts +++ b/packages/core/src/templates/ResourceNoteAwardEmojis.ts @@ -1,6 +1,34 @@ -import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { PaginatedRequestOptions, RequestHelper, Sudo } from '../infrastructure'; -import { AwardEmojiSchema, url } from './ResourceAwardEmojis'; +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { + BaseRequestOptions, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { AwardEmojiSchema } from './ResourceAwardEmojis'; + +function url( + resourceId: number | string, + resourceType2: string, + resourceId2: number | string, + noteId: number, + awardId?: number, +) { + const [rId, rId2] = [resourceId, resourceId2].map(encodeURIComponent); + const output: (string | number)[] = [rId, resourceType2, rId2]; + + output.push('notes'); + output.push(noteId); + output.push('award_emoji'); + + if (awardId) output.push(awardId); + + return output.join('/'); +} export class ResourceNoteAwardEmojis extends BaseResource { protected resourceType: string; @@ -11,29 +39,29 @@ export class ResourceNoteAwardEmojis extends BaseReso this.resourceType = resourceType; } - all( + all( projectId: string | number, resourceIId: number, noteId: number, - options?: PaginatedRequestOptions, - ) { + options?: PaginationRequestOptions

& BaseRequestOptions, + ): Promise> { return RequestHelper.get()( this, - url(projectId, this.resourceType, resourceIId, null, noteId), + url(projectId, this.resourceType, resourceIId, noteId), options, ); } - award( + award( projectId: string | number, resourceIId: number, noteId: number, name: string, - options?: Sudo, - ) { + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, - url(projectId, this.resourceType, resourceIId, null, noteId), + url(projectId, this.resourceType, resourceIId, noteId), { name, ...options, @@ -41,30 +69,30 @@ export class ResourceNoteAwardEmojis extends BaseReso ); } - remove( + remove( projectId: string | number, resourceIId: number, noteId: number, awardId: number, - options?: Sudo, - ) { + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, - url(projectId, this.resourceType, resourceIId, awardId, noteId), + url(projectId, this.resourceType, resourceIId, noteId, awardId), options, ); } - show( + show( projectId: string | number, resourceIId: number, noteId: number, awardId: number, - options?: Sudo, - ) { + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, - url(projectId, this.resourceType, resourceIId, awardId, noteId), + url(projectId, this.resourceType, resourceIId, noteId, awardId), options, ); } diff --git a/packages/core/src/templates/ResourceNotes.ts b/packages/core/src/templates/ResourceNotes.ts index f5750ca74..009ec8c9a 100644 --- a/packages/core/src/templates/ResourceNotes.ts +++ b/packages/core/src/templates/ResourceNotes.ts @@ -1,20 +1,21 @@ -import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { UserSchema } from '../resources/Users'; -import { - RequestHelper, - PaginatedRequestOptions, - BaseRequestOptions, +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, Sudo, - endpoint, } from '../infrastructure'; +import { UserSchema } from '../resources/Users'; export interface NoteSchema extends Record { id: number; body: string; - author: UserSchema; + author: Omit; created_at: string; updated_at: string; - confidential: boolean; } export class ResourceNotes extends BaseResource { @@ -26,11 +27,16 @@ export class ResourceNotes extends BaseResource { this.resource2Type = resource2Type; } - all( + all( resourceId: string | number, resource2Id: string | number, - options?: PaginatedRequestOptions, - ) { + options?: { + sort?: 'asc' | 'desc'; + orderBy?: 'created_at' | 'updated_at'; + } & PaginationRequestOptions

& + Sudo & + ShowExpanded, + ): Promise> { return RequestHelper.get()( this, endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/notes`, @@ -38,12 +44,12 @@ export class ResourceNotes extends BaseResource { ); } - create( + create( resourceId: string | number, resource2Id: string | number, body: string, - options?: BaseRequestOptions, - ) { + options?: { internal?: boolean; createdAt?: string } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.post()( this, endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/notes`, @@ -54,29 +60,25 @@ export class ResourceNotes extends BaseResource { ); } - edit( + edit( resourceId: string | number, resource2Id: string | number, noteId: number, - body: string, - options?: BaseRequestOptions, - ) { + options?: { body?: string } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.put()( this, endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/notes/${noteId}`, - { - body, - ...options, - }, + options, ); } - remove( + remove( resourceId: string | number, resource2Id: string | number, noteId: number, - options?: Sudo, - ) { + options?: Sudo & ShowExpanded, + ): Promise> { return RequestHelper.del()( this, endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/notes/${noteId}`, @@ -84,7 +86,12 @@ export class ResourceNotes extends BaseResource { ); } - show(resourceId: string | number, resource2Id: string | number, noteId: number, options?: Sudo) { + show( + resourceId: string | number, + resource2Id: string | number, + noteId: number, + options?: Sudo & ShowExpanded, + ) { return RequestHelper.get()( this, endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/notes/${noteId}`, diff --git a/packages/core/src/templates/ResourceProtectedEnvironments.ts b/packages/core/src/templates/ResourceProtectedEnvironments.ts new file mode 100644 index 000000000..76c75bc0b --- /dev/null +++ b/packages/core/src/templates/ResourceProtectedEnvironments.ts @@ -0,0 +1,107 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { + Either3, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export type ProtectedEnvironmentAccessLevel = 30 | 40 | 60; + +export interface ProtectedEnvironmentAccessLevelSummarySchema { + access_level: ProtectedEnvironmentAccessLevel; + access_level_description: string; + user_id?: number; + group_id?: number; +} + +export interface ProtectedEnvironmentSchema extends Record { + name: string; + deploy_access_levels?: ProtectedEnvironmentAccessLevelSummarySchema[]; + required_approval_count: number; +} + +export type ProtectedEnvironmentAccessLevelEntity = Either3< + { userId: number }, + { groupId: number }, + { accessLevel: number } +>; + +export class ResourceProtectedEnvironments extends BaseResource { + constructor(resourceType: string, options: BaseResourceOptions) { + super({ prefixUrl: resourceType, ...options }); + } + + all( + resourceId: string | number, + options?: { search?: string } & Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + `${resourceId}/protected_environments`, + options, + ); + } + + create( + resourceId: string | number, + name: string, + deployAccessLevel: ProtectedEnvironmentAccessLevelEntity[], + options?: { + requiredApprovalCount?: number; + approvalRules?: ProtectedEnvironmentAccessLevelEntity[]; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + `${resourceId}/protected_environments`, + { + name, + deployAccessLevel, + ...options, + }, + ); + } + + edit( + resourceId: string | number, + name: string, + options?: { + deployAccessLevels?: ProtectedEnvironmentAccessLevelEntity[]; + requiredApprovalCount?: number; + approvalRules?: ProtectedEnvironmentAccessLevelEntity[]; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.put()( + this, + `${resourceId}/protected_environments/${name}`, + options, + ); + } + + show( + resourceId: string | number, + name: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + `${resourceId}/protected_environments/${name}`, + options, + ); + } + + remove( + resourceId: string | number, + name: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, `${resourceId}/protected_environments/${name}`, options); + } +} diff --git a/packages/core/src/templates/ResourcePushRules.ts b/packages/core/src/templates/ResourcePushRules.ts new file mode 100644 index 000000000..56e27883f --- /dev/null +++ b/packages/core/src/templates/ResourcePushRules.ts @@ -0,0 +1,66 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; + +export interface PushRuleSchema extends Record { + id: number; + commit_message_regex: string; + commit_message_negative_regex: string; + branch_name_regex: string; + deny_delete_tag: boolean; + created_at: string; + member_check: boolean; + prevent_secrets: boolean; + author_email_regex: string; + file_name_regex: string; + max_file_size: number; +} + +export interface CreateAndEditPushRuleOptions { + denyDeleteTag?: boolean; + memberCheck?: boolean; + preventSecrets?: boolean; + commitMessageRegex?: string; + commitMessagNegativeRegex?: string; + branchNameRegex?: string; + authorEmailRegex?: string; + fileNameRegex?: string; + maxFileSize?: number; + commitCommitterCheck?: boolean; + rejectUnsignedCommits?: boolean; +} + +export class ResourcePushRules extends BaseResource { + constructor(resourceType: string, options: BaseResourceOptions) { + super({ prefixUrl: resourceType, ...options }); + } + + create( + resourceId: string | number, + options?: CreateAndEditPushRuleOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`${resourceId}/push_rule`, options); + } + + edit( + resourceId: string | number, + options?: CreateAndEditPushRuleOptions & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.put()(this, endpoint`${resourceId}/push_rule`, options); + } + + remove( + resourceId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`${resourceId}/push_rule`, options); + } + + show( + resourceId: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, endpoint`${resourceId}/push_rule`, options); + } +} diff --git a/packages/core/src/templates/ResourceRepositoryStorageMoves.ts b/packages/core/src/templates/ResourceRepositoryStorageMoves.ts new file mode 100644 index 000000000..4591f28e9 --- /dev/null +++ b/packages/core/src/templates/ResourceRepositoryStorageMoves.ts @@ -0,0 +1,80 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface RepositoryStorageMoveSchema extends Record { + id: number; + created_at: string; + state: + | 'initial' + | 'scheduled' + | 'started' + | 'replicated' + | 'failed' + | 'finished' + | 'cleanup failed'; + source_storage_name: string; + destination_storage_name: string; +} + +export class ResourceRepositoryStorageMoves extends BaseResource { + protected resourceType: string; + + protected resourceTypeSingular: string; + + constructor(resourceType: string, options: BaseResourceOptions) { + super(options); + + this.resourceType = resourceType; + this.resourceTypeSingular = resourceType.substring(0, resourceType.length - 1); + } + + all( + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + const resourceId = options?.[`${this.resourceTypeSingular}Id`] as string | number; + const url = resourceId + ? endpoint`${this.resourceType}/${resourceId}/repository_storage_moves` + : `${this.resourceTypeSingular}_repository_storage_moves`; + + return RequestHelper.get()(this, url, options); + } + + show( + repositoryStorageId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + const resourceId = options?.[`${this.resourceTypeSingular}Id`] as string | number; + const url = resourceId + ? endpoint`${this.resourceType}/${resourceId}/repository_storage_moves` + : `${this.resourceTypeSingular}_repository_storage_moves`; + + return RequestHelper.get()( + this, + `${url}/${repositoryStorageId}`, + options as Sudo & ShowExpanded, + ); + } + + schedule( + sourceStorageName: string, + options?: { destinationStorageName?: string } & Sudo & ShowExpanded, + ): Promise> { + const resourceId = options?.[`${this.resourceTypeSingular}Id`] as string | number; + const url = resourceId + ? endpoint`${this.resourceType}/${resourceId}/repository_storage_moves` + : `${this.resourceTypeSingular}_repository_storage_moves`; + + return RequestHelper.post()(this, url, { + sourceStorageName, + ...(options as Sudo & ShowExpanded), + }); + } +} diff --git a/packages/core/src/templates/ResourceStateEvents.ts b/packages/core/src/templates/ResourceStateEvents.ts new file mode 100644 index 000000000..8328df242 --- /dev/null +++ b/packages/core/src/templates/ResourceStateEvents.ts @@ -0,0 +1,56 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { UserSchema } from '../resources/Users'; + +export interface StateEventSchema extends Record { + id: number; + user: Omit; + created_at: string; + resource_type: 'Issue'; + resource_id: number; + action: 'add' | 'remove'; + state: 'opened' | 'closed'; +} + +export class ResourceStateEvents extends BaseResource { + protected resource2Type: string; + + constructor(resourceType: string, resource2Type: string, options: BaseResourceOptions) { + super({ prefixUrl: resourceType, ...options }); + + this.resource2Type = resource2Type; + } + + all( + resourceId: string | number, + resource2Id: string | number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/resource_state_events`, + options, + ); + } + + show( + resourceId: string | number, + resource2Id: string | number, + stateEventId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/resource_state_events/${stateEventId}`, + options, + ); + } +} diff --git a/packages/core/src/templates/ResourceTemplates.ts b/packages/core/src/templates/ResourceTemplates.ts index d2c399b47..aebb06eeb 100644 --- a/packages/core/src/templates/ResourceTemplates.ts +++ b/packages/core/src/templates/ResourceTemplates.ts @@ -1,5 +1,13 @@ -import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { RequestHelper, PaginatedRequestOptions, Sudo } from '../infrastructure'; +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; export interface TemplateSchema extends Record { name: string; @@ -11,11 +19,26 @@ export class ResourceTemplates extends BaseResource( + options?: PaginationRequestOptions

& Sudo & ShowExpanded, + ): Promise> { + process.emitWarning( + 'This API will be deprecated as of Gitlabs v5 API. Please make the switch to "ProjectTemplates".', + 'DeprecationWarning', + ); + return RequestHelper.get()(this, '', options); } - show(key: string | number, options?: Sudo) { + show( + key: string | number, + options?: Sudo & ShowExpanded, + ): Promise> { + process.emitWarning( + 'This API will be deprecated as of Gitlabs v5 API. Please make the switch to "ProjectTemplates".', + 'DeprecationWarning', + ); + return RequestHelper.get()(this, encodeURIComponent(key), options); } } diff --git a/packages/core/src/templates/ResourceVariables.ts b/packages/core/src/templates/ResourceVariables.ts index f6db1950c..3b7d32f43 100644 --- a/packages/core/src/templates/ResourceVariables.ts +++ b/packages/core/src/templates/ResourceVariables.ts @@ -1,45 +1,91 @@ -import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; -import { RequestHelper, Sudo, PaginatedRequestOptions, endpoint } from '../infrastructure'; +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +export type VariableType = 'env_var' | 'file'; export interface VariableSchema extends Record { - variable_type: 'env_var' | 'file'; + variable_type: VariableType; value: string; protected: boolean; masked: boolean; - environment_scope?: string; // Environment scope is only available for projects. key: string; } +export type VariableFilter = Record<'environment_scope', number | string>; export class ResourceVariables extends BaseResource { constructor(resourceType: string, options: BaseResourceOptions) { super({ prefixUrl: resourceType, ...options }); } - all(resourceId: string | number, options?: PaginatedRequestOptions) { + all( + resourceId: string | number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { return RequestHelper.get()(this, endpoint`${resourceId}/variables`, options); } - create(resourceId: string | number, options?: VariableSchema) { - return RequestHelper.post()(this, endpoint`${resourceId}/variables`, options); + create( + resourceId: string | number, + key: string, + value: string, + options?: { + variableType?: VariableType; + protected?: boolean; + masked?: boolean; + environmentScope?: string; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`${resourceId}/variables`, { + key, + value, + ...options, + }); } - edit(resourceId: string | number, keyId: string, options?: Omit) { - return RequestHelper.put()( - this, - endpoint`${resourceId}/variables/${keyId}`, - options, - ); + edit( + resourceId: string | number, + key: string, + value: string, + options?: { + variableType?: VariableType; + protected?: boolean; + masked?: boolean; + environmentScope?: string; + filter: VariableFilter; + } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.put()(this, endpoint`${resourceId}/variables/${key}`, { + value, + ...options, + }); } - show(resourceId: string | number, keyId: string, options?: PaginatedRequestOptions) { + show( + resourceId: string | number, + key: string, + options?: { filter?: VariableFilter } & Sudo & ShowExpanded, + ): Promise> { return RequestHelper.get()( this, - endpoint`${resourceId}/variables/${keyId}`, + endpoint`${resourceId}/variables/${key}`, options, ); } - remove(resourceId: string | number, keyId: string, options?: Sudo) { - return RequestHelper.del()(this, endpoint`${resourceId}/variables/${keyId}`, options); + remove( + resourceId: string | number, + key: string, + options?: { filter?: VariableFilter } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`${resourceId}/variables/${key}`, options); } } diff --git a/packages/core/src/templates/ResourceWeightEvents.ts b/packages/core/src/templates/ResourceWeightEvents.ts new file mode 100644 index 000000000..01ed88234 --- /dev/null +++ b/packages/core/src/templates/ResourceWeightEvents.ts @@ -0,0 +1,54 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; +import type { UserSchema } from '../resources/Users'; + +export interface WeightEventSchema extends Record { + id: number; + user: Omit; + created_at: string; + issue_id: number; + weight: number; +} + +export class ResourceWeightEvents extends BaseResource { + protected resource2Type: string; + + constructor(resourceType: string, resource2Type: string, options: BaseResourceOptions) { + super({ prefixUrl: resourceType, ...options }); + + this.resource2Type = resource2Type; + } + + all( + resourceId: string | number, + resource2Id: string | number, + options?: Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/resource_weight_events`, + options, + ); + } + + show( + resourceId: string | number, + resource2Id: string | number, + weightEventId: number, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()( + this, + endpoint`${resourceId}/${this.resource2Type}/${resource2Id}/resource_weight_events/${weightEventId}`, + options, + ); + } +} diff --git a/packages/core/src/templates/ResourceWikis.ts b/packages/core/src/templates/ResourceWikis.ts new file mode 100644 index 000000000..a67115371 --- /dev/null +++ b/packages/core/src/templates/ResourceWikis.ts @@ -0,0 +1,96 @@ +import { BaseResource } from '@gitbeaker/requester-utils'; +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import { RequestHelper, endpoint } from '../infrastructure'; +import type { + Either, + GitlabAPIResponse, + PaginationRequestOptions, + PaginationTypes, + ShowExpanded, + Sudo, +} from '../infrastructure'; + +export interface WikiSchema extends Record { + content: string; + format: string; + slug: string; + title: string; + encoding: string; +} + +export interface WikiAttachmentSchema extends Record { + file_name: string; + file_path: string; + branch: string; + link: { + url: string; + markdown: string; + }; +} + +export class ResourceWikis extends BaseResource { + constructor(resourceType: string, options: BaseResourceOptions) { + super({ prefixUrl: resourceType, ...options }); + } + + all( + resourceId: string | number, + options?: { withContent?: boolean } & Sudo & ShowExpanded & PaginationRequestOptions

, + ): Promise> { + return RequestHelper.get()(this, endpoint`${resourceId}/wikis`, options); + } + + create( + resourceId: string | number, + content: string, + title: string, + options?: { format?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()(this, endpoint`${resourceId}/wikis`, { + content, + title, + ...options, + }); + } + + edit( + resourceId: string | number, + slug: string, + options?: Either<{ content: string }, { title: string }> & { format?: string } & Sudo & + ShowExpanded, + ): Promise> { + return RequestHelper.put()(this, endpoint`${resourceId}/wikis/${slug}`, options); + } + + remove( + resourceId: string | number, + slug: string, + options?: Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.del()(this, endpoint`${resourceId}/wikis/${slug}`, options); + } + + show( + resourceId: string | number, + slug: string, + options?: { renderHtml?: boolean; version?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.get()(this, endpoint`${resourceId}/wikis/${slug}`, options); + } + + uploadAttachment( + resourceId: string | number, + file: { content: Blob; filename: string }, + options?: { branch?: string } & Sudo & ShowExpanded, + ): Promise> { + return RequestHelper.post()( + this, + endpoint`${resourceId}/wikis/attachments`, + { + ...options, + isForm: true, + file: [file.content, file.filename], + }, + ); + } +} diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index d5749fe7b..18420dc69 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -1,9 +1,10 @@ export { ResourceAccessRequests } from './ResourceAccessRequests'; +export { ResourceAccessTokens } from './ResourceAccessTokens'; export { ResourceAwardEmojis } from './ResourceAwardEmojis'; export { ResourceNoteAwardEmojis } from './ResourceNoteAwardEmojis'; export { ResourceBadges } from './ResourceBadges'; export { ResourceCustomAttributes } from './ResourceCustomAttributes'; -export { ResourceDeployTokens } from './ResourceDeployTokens'; +export { ResourceDORA4Metrics } from './ResourceDORA4Metrics'; export { ResourceDiscussions } from './ResourceDiscussions'; export { ResourceIssueBoards } from './ResourceIssueBoards'; export { ResourceLabels } from './ResourceLabels'; @@ -12,3 +13,15 @@ export { ResourceMilestones } from './ResourceMilestones'; export { ResourceNotes } from './ResourceNotes'; export { ResourceTemplates } from './ResourceTemplates'; export { ResourceVariables } from './ResourceVariables'; +export { ResourceWikis } from './ResourceWikis'; +export { ResourceHooks } from './ResourceHooks'; +export { ResourcePushRules } from './ResourcePushRules'; +export { ResourceRepositoryStorageMoves } from './ResourceRepositoryStorageMoves'; +export { ResourceInvitations } from './ResourceInvitations'; +export { ResourceIterations } from './ResourceIterations'; +export { ResourceProtectedEnvironments } from './ResourceProtectedEnvironments'; +export { ResourceIterationEvents } from './ResourceIterationEvents'; +export { ResourceLabelEvents } from './ResourceLabelEvents'; +export { ResourceMilestoneEvents } from './ResourceMilestoneEvents'; +export { ResourceStateEvents } from './ResourceStateEvents'; +export { ResourceWeightEvents } from './ResourceWeightEvents'; diff --git a/packages/core/src/templates/types.ts b/packages/core/src/templates/types.ts deleted file mode 100644 index b0050a337..000000000 --- a/packages/core/src/templates/types.ts +++ /dev/null @@ -1,13 +0,0 @@ -export { AccessRequestSchema, AccessLevel } from './ResourceAccessRequests'; -export { AwardEmojiSchema } from './ResourceAwardEmojis'; -export { BadgeSchema } from './ResourceBadges'; -export { CustomAttributeSchema } from './ResourceCustomAttributes'; -export { DeployTokenScope, DeployTokenSchema } from './ResourceDeployTokens'; -export { DiscussionSchema, DiscussionNote, DiscussionNotePosition } from './ResourceDiscussions'; -export { IssueBoardListSchema, IssueBoardSchema } from './ResourceIssueBoards'; -export { LabelSchema } from './ResourceLabels'; -export { MemberSchema, IncludeInherited } from './ResourceMembers'; -export { MilestoneSchema } from './ResourceMilestones'; -export { NoteSchema } from './ResourceNotes'; -export { TemplateSchema } from './ResourceTemplates'; -export { VariableSchema } from './ResourceVariables'; diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts deleted file mode 100644 index 1c3544016..000000000 --- a/packages/core/src/types.ts +++ /dev/null @@ -1,13 +0,0 @@ -export * from './resources/types'; -export * from './templates/types'; -export { - Sudo, - ShowExpanded, - BaseRequestOptions, - BasePaginationRequestOptions, - OffsetPaginationRequestOptions, - PaginatedRequestOptions, - ExpandedResponse, - PaginationResponse, - CamelizedRecord, -} from './infrastructure'; diff --git a/packages/core/test/__mocks__/RequestHelper.ts b/packages/core/test/__mocks__/RequestHelper.ts index 9484d2028..848473c11 100644 --- a/packages/core/test/__mocks__/RequestHelper.ts +++ b/packages/core/test/__mocks__/RequestHelper.ts @@ -6,6 +6,5 @@ export default { get: () => mockHelperFn, put: () => mockHelperFn, del: () => mockHelperFn, - stream: mockHelperFn, }, }; diff --git a/packages/core/test/e2e/map.ts b/packages/core/test/e2e/map.ts new file mode 100644 index 000000000..0819a0264 --- /dev/null +++ b/packages/core/test/e2e/map.ts @@ -0,0 +1,190 @@ +describe('API Map', () => { + it('should return object representing all resources in JSON format', async () => { + const keys = [ + 'Agents', + 'AlertManagement', + 'ApplicationAppearance', + 'ApplicationPlanLimits', + 'Applications', + 'ApplicationSettings', + 'ApplicationStatistics', + 'AuditEvents', + 'Avatar', + 'BroadcastMessages', + 'Composer', + 'Conan', + 'DashboardAnnotations', + 'Debian', + 'DependencyProxy', + 'DeployKeys', + 'DeployTokens', + 'DockerfileTemplates', + 'Events', + 'Experiments', + 'GeoNodes', + 'GitignoreTemplates', + 'GitLabCIYMLTemplates', + 'Import', + 'InstanceLevelCICDVariables', + 'Keys', + 'License', + 'LicenseTemplates', + 'Lint', + 'Markdown', + 'Maven', + 'Metadata', + 'Migrations', + 'Namespaces', + 'NotificationSettings', + 'NPM', + 'NuGet', + 'PersonalAccessTokens', + 'PyPI', + 'RubyGems', + 'Search', + 'ServiceData', + 'SidekiqMetrics', + 'SidekiqQueues', + 'SnippetRepositoryStorageMoves', + 'Snippets', + 'Suggestions', + 'SystemHooks', + 'TodoLists', + 'Topics', + 'Branches', + 'CommitDiscussions', + 'Commits', + 'ContainerRegistry', + 'Deployments', + 'Environments', + 'ErrorTrackingClientKeys', + 'ErrorTrackingSettings', + 'ExternalStatusChecks', + 'FeatureFlags', + 'FeatureFlagUserLists', + 'FreezePeriods', + 'GitlabPages', + 'GoProxy', + 'Helm', + 'Integrations', + 'IssueAwardEmojis', + 'IssueDiscussions', + 'IssueIterationEvents', + 'IssueLabelEvents', + 'IssueLinks', + 'IssueMilestoneEvents', + 'IssueNoteAwardEmojis', + 'IssueNotes', + 'Issues', + 'IssuesStatistics', + 'IssueStateEvents', + 'IssueWeightEvents', + 'JobArtifacts', + 'Jobs', + 'MergeRequestApprovals', + 'MergeRequestAwardEmojis', + 'MergeRequestContextCommits', + 'MergeRequestDiscussions', + 'MergeRequestLabelEvents', + 'MergeRequestMilestoneEvents', + 'MergeRequestDraftNotes', + 'MergeRequestNotes', + 'MergeRequests', + 'MergeTrains', + 'PackageRegistry', + 'Packages', + 'PagesDomains', + 'Pipelines', + 'PipelineSchedules', + 'PipelineScheduleVariables', + 'PipelineTriggerTokens', + 'ProductAnalytics', + 'ProjectAccessRequests', + 'ProjectAccessTokens', + 'ProjectAliases', + 'ProjectBadges', + 'ProjectCustomAttributes', + 'ProjectDORA4Metrics', + 'ProjectHooks', + 'ProjectImportExport', + 'ProjectInvitations', + 'ProjectIssueBoards', + 'ProjectIterations', + 'ProjectLabels', + 'ProjectMembers', + 'ProjectMilestones', + 'ProjectProtectedEnvironments', + 'ProjectPushRules', + 'ProjectRelationsExport', + 'ProjectReleases', + 'ProjectRemoteMirrors', + 'ProjectRepositoryStorageMoves', + 'Projects', + 'ProjectSnippetAwardEmojis', + 'ProjectSnippetDiscussions', + 'ProjectSnippetNotes', + 'ProjectSnippets', + 'ProjectStatistics', + 'ProjectTemplates', + 'ProjectVariables', + 'ProjectVulnerabilities', + 'ProjectWikis', + 'ProtectedBranches', + 'ProtectedTags', + 'ReleaseLinks', + 'Repositories', + 'RepositoryFiles', + 'RepositorySubmodules', + 'ResourceGroups', + 'Runners', + 'SecureFiles', + 'Tags', + 'UserStarredMetricsDashboard', + 'EpicAwardEmojis', + 'EpicDiscussions', + 'EpicIssues', + 'EpicLabelEvents', + 'EpicLinks', + 'EpicNotes', + 'Epics', + 'GroupAccessRequests', + 'GroupAccessTokens', + 'GroupActivityAnalytics', + 'GroupBadges', + 'GroupCustomAttributes', + 'GroupDORA4Metrics', + 'GroupHooks', + 'GroupImportExports', + 'GroupInvitations', + 'GroupIssueBoards', + 'GroupIterations', + 'GroupLabels', + 'GroupLDAPLinks', + 'GroupMembers', + 'GroupMemberRoles', + 'GroupMilestones', + 'GroupProtectedEnvironments', + 'GroupPushRules', + 'GroupRelationExports', + 'GroupReleases', + 'GroupRepositoryStorageMoves', + 'Groups', + 'GroupSAMLIdentities', + 'GroupSCIMIdentities', + 'GroupVariables', + 'GroupWikis', + 'LinkedEpics', + 'UserCustomAttributes', + 'UserEmails', + 'UserGPGKeys', + 'UserImpersonationTokens', + 'Users', + 'UserSSHKeys', + ]; + // eslint-disable-next-line + const map: Record = await import('../../dist/map.json'); + + expect(map).toBeInstanceOf(Object); + expect(Object.keys(map)).toIncludeAllMembers(keys); + }); +}); diff --git a/packages/core/test/integration/infratructure/Utils.ts b/packages/core/test/integration/infratructure/Utils.ts deleted file mode 100644 index aa21629ef..000000000 --- a/packages/core/test/integration/infratructure/Utils.ts +++ /dev/null @@ -1,11 +0,0 @@ -import 'jest-extended'; -import { getAPIMap, Resources } from '../../../src'; - -describe('getAPIMap', () => { - it('should return object representing all resources in JSON format', () => { - const map = getAPIMap(); - - expect(map).toBeInstanceOf(Object); - expect(Object.keys(map)).toIncludeAllMembers(Object.keys(Resources)); - }); -}); diff --git a/packages/core/test/unit/infrastructure/RequestHelper.ts b/packages/core/test/unit/infrastructure/RequestHelper.ts index 4a566acfe..759b5e2b0 100644 --- a/packages/core/test/unit/infrastructure/RequestHelper.ts +++ b/packages/core/test/unit/infrastructure/RequestHelper.ts @@ -1,5 +1,3 @@ -import 'jest-extended'; -import FormData from 'form-data'; import { BaseResource, RequesterType } from '@gitbeaker/requester-utils'; import { RequestHelper } from '../../../src/infrastructure/RequestHelper'; @@ -22,32 +20,35 @@ function mockLink(url: string, page: number, perPage: number, maxPages: number) return { link: links.join(','), pagination: type }; } -function mockedGetMany(url: string, { query }, maxPages = 10) { - const { - page = 1, - perPage = 2, - }: { - perPage: number; - page: number; - } = query; +function mockedGetMany( + url: string, + rawRequestOptions: { searchParams?: Record } = {}, + maxPages = 10, +) { + const page = rawRequestOptions?.searchParams?.page || 1; + const perPage = rawRequestOptions?.searchParams?.perPage || 2; // Only load pages needed for the test - const { link, pagination } = mockLink(url, page, perPage, maxPages); + const { link, pagination } = mockLink(url, +page, +perPage, +maxPages); + + const headers = { + link, + 'x-page': page.toString(), + 'x-per-page': perPage.toString(), + 'x-total': (maxPages * perPage).toString(), + 'x-total-pages': maxPages.toString(), + }; + + if (pagination.next) headers['x-next-page'] = pagination.next.toString(); + if (pagination.prev) headers['x-prev-page'] = pagination.prev.toString(); return { - body: new Array(perPage).fill(null).map((_, i) => ({ - prop1: (page - 1) * perPage + i + 1, // Index from 1, not 0 + status: 200, + body: new Array(+perPage).fill(null).map((_, i) => ({ + prop1: (+page - 1) * +perPage + i + 1, // Index from 1, not 0 prop2: `test property ${(page - 1) * perPage + i + 1}`, })), - headers: { - link, - 'x-next-page': pagination.next, - 'x-page': page, - 'x-per-page': perPage, - 'x-prev-page': pagination.prev, - 'x-total': maxPages * perPage, - 'x-total-pages': maxPages, - }, + headers, }; } @@ -59,17 +60,25 @@ function mockedGetOne() { prop2: 'test property', }, headers: { - 'X-Page': 1, - 'X-Total-Pages': 1, + 'x-page': (1).toString(), + 'x-total-pages': (1).toString(), }, }; } +const mockedRequester: jest.Mocked = { + get: jest.fn(), + post: jest.fn(), + delete: jest.fn(), + put: jest.fn(), + patch: jest.fn(), +}; + let service: BaseResource; beforeEach(() => { service = new BaseResource({ - requesterFn: () => ({} as RequesterType), + requesterFn: () => mockedRequester, host: 'https://testing.com', token: 'token', }); @@ -77,18 +86,18 @@ beforeEach(() => { describe('RequestHelper.get()', () => { it('should respond with the proper get url without pagination', async () => { - service.requester.get = jest.fn(() => Promise.resolve(mockedGetOne())); + mockedRequester.get.mockReturnValueOnce(Promise.resolve(mockedGetOne())); await RequestHelper.get()(service, 'test'); expect(service.requester.get).toHaveBeenCalledWith('test', { - query: {}, + searchParams: {}, sudo: undefined, }); }); it('should respond with the a wrapped body', async () => { - service.requester.get = jest.fn(() => Promise.resolve(mockedGetOne())); + mockedRequester.get.mockReturnValueOnce(Promise.resolve(mockedGetOne())); const response = await RequestHelper.get()(service, 'test', { showExpanded: true }); @@ -98,56 +107,60 @@ describe('RequestHelper.get()', () => { prop2: 'test property', }, headers: { - 'X-Page': 1, + 'x-page': '1', }, status: 200, }); }); it('should respond with an object', async () => { - service.requester.get = jest.fn(() => Promise.resolve(mockedGetOne())); + mockedRequester.get.mockReturnValueOnce(Promise.resolve(mockedGetOne())); - const response = await RequestHelper.get()(service, 'test'); + const response = await RequestHelper.get>()(service, 'test'); expect(response.prop1).toBe(5); expect(response.prop2).toBe('test property'); }); it('should be paginated when links are present', async () => { - service.requester.get = jest.fn((endpoint, options = {}) => - Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, { query: options.query })), + mockedRequester.get.mockImplementation((endpoint, options) => + Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, options)), ); const response = await RequestHelper.get[]>()(service, 'test'); - response.forEach((l, index) => { - expect(l.prop1).toBe(1 + index); - expect(l.prop2).toBe(`test property ${1 + index}`); + response.forEach((l, index: number) => { + const value = 1 + index; + + expect(l.prop1).toBe(value); + expect(l.prop2).toBe(`test property ${value.toString()}`); }); expect(response).toHaveLength(20); }); it('should handle large paginated (50 pages) results when links are present', async () => { - service.requester.get = jest.fn((endpoint, options = {}) => - Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, { query: options.query }, 50)), + mockedRequester.get.mockImplementation((endpoint, options) => + Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, options, 51)), ); const response = await RequestHelper.get[]>()(service, 'test', { maxPages: 50, }); - response.forEach((l, index) => { - expect(l.prop1).toBe(1 + index); - expect(l.prop2).toBe(`test property ${1 + index}`); + response.forEach((l, index: number) => { + const value = 1 + index; + + expect(l.prop1).toBe(value); + expect(l.prop2).toBe(`test property ${value.toString()}`); }); expect(response).toHaveLength(100); }); it('should be paginated but limited by the maxPages option', async () => { - service.requester.get = jest.fn((endpoint, options = {}) => - Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, { query: options.query }, 3)), + mockedRequester.get.mockImplementation((endpoint, options) => + Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, options, 5)), ); const response = await RequestHelper.get[]>()(service, 'test', { @@ -156,15 +169,17 @@ describe('RequestHelper.get()', () => { expect(response).toHaveLength(6); - response.forEach((l, index) => { - expect(l.prop1).toBe(1 + index); - expect(l.prop2).toBe(`test property ${1 + index}`); + response.forEach((l, index: number) => { + const value = 1 + index; + + expect(l.prop1).toBe(value); + expect(l.prop2).toBe(`test property ${value.toString()}`); }); }); it('should be paginated but limited by the page option', async () => { - service.requester.get = jest.fn((endpoint, options = {}) => - Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, { query: options.query })), + mockedRequester.get.mockImplementation((endpoint, options) => + Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, options)), ); const response = await RequestHelper.get[]>()(service, 'test', { @@ -173,27 +188,35 @@ describe('RequestHelper.get()', () => { expect(response).toHaveLength(2); - response.forEach((l, index) => { - expect(l.prop1).toBe(3 + index); - expect(l.prop2).toBe(`test property ${3 + index}`); + response.forEach((l, index: number) => { + const value = 3 + index; + + expect(l.prop1).toBe(value); + expect(l.prop2).toBe(`test property ${value.toString()}`); }); }); it('should show the pagination information when the showExpanded option is given', async () => { - service.requester.get = jest.fn((endpoint, options = {}) => - Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, { query: options.query })), + mockedRequester.get.mockImplementation((endpoint, options) => + Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, options)), ); - const response = await RequestHelper.get[]>()(service, 'test', { - page: 2, - showExpanded: true, - }); + const response = await RequestHelper.get[]>()( + service, + 'test', + { + page: 2, + showExpanded: true, + }, + ); expect(response.data).toHaveLength(2); - response.data.forEach((l, index) => { - expect(l.prop1).toBe(3 + index); - expect(l.prop2).toBe(`test property ${3 + index}`); + response.data.forEach((l, index: number) => { + const value = 3 + index; + + expect(l.prop1).toBe(value); + expect(l.prop2).toBe(`test property ${value.toString()}`); }); expect(response.paginationInfo).toMatchObject({ @@ -207,8 +230,8 @@ describe('RequestHelper.get()', () => { }); it('should not show the pagination information when the showExpanded option is undefined or false', async () => { - service.requester.get = jest.fn((endpoint, options = {}) => - Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, { query: options.query })), + mockedRequester.get.mockImplementation((endpoint, options) => + Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, options)), ); const response = await RequestHelper.get[]>()(service, 'test', { @@ -218,15 +241,17 @@ describe('RequestHelper.get()', () => { expect(response).toHaveLength(2); - response.forEach((l, index) => { - expect(l.prop1).toBe(3 + index); - expect(l.prop2).toBe(`test property ${3 + index}`); + response.forEach((l, index: number) => { + const value = 3 + index; + + expect(l.prop1).toBe(value); + expect(l.prop2).toBe(`test property ${value.toString()}`); }); }); it('should not show the pagination information when using keyset pagination', async () => { - service.requester.get = jest.fn((endpoint, options = {}) => - Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, { query: options.query })), + mockedRequester.get.mockImplementation((endpoint, options) => + Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, options)), ); const response = await RequestHelper.get[]>()(service, 'test', { @@ -235,15 +260,17 @@ describe('RequestHelper.get()', () => { expect(response).toHaveLength(20); - response.forEach((l, index) => { - expect(l.prop1).toBe(1 + index); - expect(l.prop2).toBe(`test property ${1 + index}`); + response.forEach((l, index: number) => { + const value = 1 + index; + + expect(l.prop1).toBe(value); + expect(l.prop2).toBe(`test property ${value.toString()}`); }); }); it('should support maxPages when using keyset pagination', async () => { - service.requester.get = jest.fn((endpoint, options = {}) => - Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, { query: options.query }, 2)), + mockedRequester.get.mockImplementation((endpoint, options) => + Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, options, 3)), ); const response = await RequestHelper.get[]>()(service, 'test', { @@ -253,15 +280,17 @@ describe('RequestHelper.get()', () => { expect(response).toHaveLength(4); - response.forEach((l, index) => { - expect(l.prop1).toBe(1 + index); - expect(l.prop2).toBe(`test property ${1 + index}`); + response.forEach((l, index: number) => { + const value = 1 + index; + + expect(l.prop1).toBe(value); + expect(l.prop2).toBe(`test property ${value.toString()}`); }); }); - it('should not show the pagination information when using keyset pagination and showExpanded is given', async () => { - service.requester.get = jest.fn((endpoint, options = {}) => - Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, { query: options.query })), + it('should show the pagination information when using keyset pagination and showExpanded is given', async () => { + mockedRequester.get.mockImplementation((endpoint, options) => + Promise.resolve(mockedGetMany(`${service.url}${endpoint}`, options)), ); const response = await RequestHelper.get[]>()(service, 'test', { @@ -269,27 +298,33 @@ describe('RequestHelper.get()', () => { showExpanded: true, }); - expect(response).toHaveLength(20); + expect(response.data).toHaveLength(20); + + response.data.forEach((l, index: number) => { + const value = 1 + index; - response.forEach((l, index) => { - expect(l.prop1).toBe(1 + index); - expect(l.prop2).toBe(`test property ${1 + index}`); + expect(l.prop1).toBe(value); + expect(l.prop2).toBe(`test property ${value.toString()}`); }); }); it('should return simple response with camelized keys when using the camelize option', async () => { - const s = new BaseResource({ - requesterFn: () => ({} as RequesterType), + class ExtendedResource extends BaseResource { + show() { + return RequestHelper.get()(this, 'dummyendpoint'); + } + } + + const s = new ExtendedResource({ + requesterFn: () => mockedRequester, host: 'https://testing.com', token: 'token', camelize: true, }); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - s.show = jest.fn(() => RequestHelper.get()(s, 'test')); - s.requester.get = jest.fn(() => + mockedRequester.get.mockReturnValueOnce( Promise.resolve({ + status: 200, body: [ { id: 3, gravatar_enable: true }, // eslint-disable-line { id: 4, gravatar_enable: false }, // eslint-disable-line @@ -298,8 +333,6 @@ describe('RequestHelper.get()', () => { }), ); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore const results = await s.show(); expect(results).toIncludeSameMembers([ @@ -309,20 +342,21 @@ describe('RequestHelper.get()', () => { }); it('should return simple response with default keys without camelize option', async () => { - class SpecialService extends BaseResource { + class SpecialService extends BaseResource { show() { return RequestHelper.get()(this, 'test'); } } const specialService = new SpecialService({ - requesterFn: () => ({} as RequesterType), + requesterFn: () => mockedRequester, host: 'https://testing.com', token: 'token', }); - specialService.requester.get = jest.fn(() => + mockedRequester.get.mockReturnValueOnce( Promise.resolve({ + status: 200, body: { id: 3, gravatar_enable: true }, headers: {}, }), @@ -332,38 +366,62 @@ describe('RequestHelper.get()', () => { expect(results).toMatchObject({ id: 3, gravatar_enable: true }); // eslint-disable-line }); -}); -describe('RequestHelper.stream()', () => { - it('should throw an error when the stream function isnt available', () => { - service.requester.stream = undefined; + it('should return a stream if asStream is passed', async () => { + const readableStream = new ReadableStream(); - expect(() => RequestHelper.stream(service, 'test')).toThrow( - 'Stream method is not implementated in requester!', + mockedRequester.get.mockReturnValueOnce( + Promise.resolve({ + status: 200, + body: readableStream, + headers: {}, + }), ); + + const response = await RequestHelper.get()(service, 'test', { asStream: true }); + + expect(response).toBe(readableStream); }); - it('should not throw an error when the stream function is available', () => { - service.requester.stream = jest.fn(); + it('should return a wrapped stream if showExpanded and asStream flags are passed', async () => { + const readableStream = new ReadableStream(); - RequestHelper.stream(service, 'test'); + mockedRequester.get.mockReturnValueOnce( + Promise.resolve({ + body: readableStream, + status: 200, + headers: { test: 'string' }, + }), + ); + + const response = await RequestHelper.get()(service, 'test', { + showExpanded: true, + asStream: true, + }); - expect(service.requester.stream).toBeCalled(); + expect(response).toMatchObject({ + data: readableStream, + headers: { test: 'string' }, + status: 200, + }); }); }); describe('RequestHelper.post()', () => { it('should pass the correct arguments to the Requester', async () => { - service.requester.post = jest.fn(() => Promise.resolve({ body: '' })); + mockedRequester.post.mockReturnValueOnce( + Promise.resolve({ body: '', status: 200, headers: {} }), + ); await RequestHelper.post()(service, 'test', { sudo: 'yes' }); - expect(service.requester.post).toBeCalledWith('test', { body: {}, sudo: 'yes' }); + expect(service.requester.post).toHaveBeenCalledWith('test', { body: {}, sudo: 'yes' }); }); it('should respond with the a wrapped body', async () => { - const responseTemplate = { status: 200, headers: { test: 1 }, body: '' }; - service.requester.post = jest.fn(() => Promise.resolve(responseTemplate)); + const responseTemplate = { status: 200, headers: { test: '1' }, body: '' }; + + mockedRequester.post.mockReturnValueOnce(Promise.resolve(responseTemplate)); const response = await RequestHelper.post()(service, 'test', { showExpanded: true }); @@ -375,29 +433,39 @@ describe('RequestHelper.post()', () => { }); it('should pass arguments as form arguments if the isForm flag is passed', async () => { - service.requester.post = jest.fn(() => Promise.resolve({ body: '' })); + mockedRequester.post.mockReturnValueOnce( + Promise.resolve({ + body: '', + status: 200, + headers: {}, + }), + ); await RequestHelper.post()(service, 'test', { isForm: true, test: 3 }); - expect(service.requester.post).toBeCalledWith('test', { + expect(service.requester.post).toHaveBeenCalledWith('test', { body: expect.any(FormData), sudo: undefined, + searchParams: undefined, }); }); }); describe('RequestHelper.put()', () => { it('should pass the correct arguments to the Requester', async () => { - service.requester.put = jest.fn(() => Promise.resolve({ body: '' })); + mockedRequester.put.mockReturnValueOnce( + Promise.resolve({ body: '', status: 200, headers: {} }), + ); await RequestHelper.put()(service, 'test', { sudo: 'yes' }); - expect(service.requester.put).toBeCalledWith('test', { body: {}, sudo: 'yes' }); + expect(service.requester.put).toHaveBeenCalledWith('test', { body: {}, sudo: 'yes' }); }); it('should respond with the a wrapped body', async () => { - const responseTemplate = { status: 200, headers: { test: 1 }, body: '' }; - service.requester.put = jest.fn(() => Promise.resolve(responseTemplate)); + const responseTemplate = { status: 200, headers: { test: '1' }, body: '' }; + + mockedRequester.put.mockReturnValueOnce(Promise.resolve(responseTemplate)); const response = await RequestHelper.put()(service, 'test', { showExpanded: true }); @@ -411,10 +479,12 @@ describe('RequestHelper.put()', () => { describe('RequestHelper.del()', () => { it('should pass the correct arguments to the Requester', async () => { - service.requester.delete = jest.fn(() => Promise.resolve({ body: '' })); + mockedRequester.delete.mockReturnValueOnce( + Promise.resolve({ body: '', status: 200, headers: {} }), + ); await RequestHelper.del()(service, 'test', { sudo: 'yes' }); - expect(service.requester.delete).toBeCalledWith('test', { body: {}, sudo: 'yes' }); + expect(service.requester.delete).toHaveBeenCalledWith('test', { body: {}, sudo: 'yes' }); }); }); diff --git a/packages/core/test/unit/infrastructure/Utils.ts b/packages/core/test/unit/infrastructure/Utils.ts index d0ce41d9c..ef5228c33 100644 --- a/packages/core/test/unit/infrastructure/Utils.ts +++ b/packages/core/test/unit/infrastructure/Utils.ts @@ -1,21 +1,4 @@ -import FormData from 'form-data'; -import { getAPIMap, appendFormFromObject, endpoint } from '../../../src/infrastructure'; - -jest.mock( - '../../../dist/map.json', - () => { - throw new Error(); - }, - { virtual: true }, -); - -describe('getAPIMap', () => { - it('should throw error if file DNE', () => { - expect(() => { - getAPIMap(); - }).toThrow(); - }); -}); +import { appendFormFromObject, endpoint } from '../../../src/infrastructure'; describe('appendFormFromObject', () => { it('should convert object key/values to formdata instance', () => { @@ -26,7 +9,10 @@ describe('appendFormFromObject', () => { }); it('should convert object key/values with metadata to formdata instance', () => { - const data = { a: 5, b: ['test', { filename: 'name.jpg' }] }; + const data = { + a: 5, + b: [new Blob(['test'], { type: 'text/plain' }), 'name.jpg'], + }; const form = appendFormFromObject(data); expect(form).toBeInstanceOf(FormData); @@ -44,7 +30,6 @@ describe('endpoint', () => { it('should give error if all parameters are number', () => { const projectId = 1; - // @ts-expect-error No need to use `endpoint` if all parameters are number. const url: string = endpoint`/projects/${projectId}`; expect(url).toBe('/projects/1'); diff --git a/packages/core/test/unit/resources/ApplicationSettings.ts b/packages/core/test/unit/resources/ApplicationSettings.ts index db78b8f1a..c7e65f2ee 100644 --- a/packages/core/test/unit/resources/ApplicationSettings.ts +++ b/packages/core/test/unit/resources/ApplicationSettings.ts @@ -16,19 +16,9 @@ beforeEach(() => { }); }); -describe('Instantiating ApplicationSettings service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(ApplicationSettings); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - -describe('ApplicationSettings.all', () => { +describe('ApplicationSettings.show', () => { it('should request GET /application/settings', async () => { - await service.all(); + await service.show(); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'application/settings', undefined); }); diff --git a/packages/core/test/unit/resources/Branches.ts b/packages/core/test/unit/resources/Branches.ts index cfc407210..7352fbdb5 100644 --- a/packages/core/test/unit/resources/Branches.ts +++ b/packages/core/test/unit/resources/Branches.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating Branches service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Branches); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Branches.all', () => { it('should request GET /projects/:id/repository/branches', async () => { await service.all(1); @@ -47,22 +37,6 @@ describe('Branches.create', () => { ref: 'ref', }); }); - - it('should request POST /projects/:id/repository/branches in v3', async () => { - const v3Service = new Branches({ - requesterFn: jest.fn(), - token: 'abcdefg', - requestTimeout: 3000, - version: 3, - }); - - await v3Service.create(1, 'name', 'ref'); - - expect(RequestHelper.post()).toHaveBeenCalledWith(v3Service, 'projects/1/repository/branches', { - branchName: 'name', - ref: 'ref', - }); - }); }); describe('Branches.remove', () => { diff --git a/packages/core/test/unit/resources/BroadcastMessages.ts b/packages/core/test/unit/resources/BroadcastMessages.ts index d0c235c93..0c034396f 100644 --- a/packages/core/test/unit/resources/BroadcastMessages.ts +++ b/packages/core/test/unit/resources/BroadcastMessages.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating BroadcastMessages service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(BroadcastMessages); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('BroadcastMessages.all', () => { it('should request GET /broadcast_messages', async () => { await service.all(); diff --git a/packages/core/test/unit/resources/CommitDiscussions.ts b/packages/core/test/unit/resources/CommitDiscussions.ts deleted file mode 100644 index 6b1816813..000000000 --- a/packages/core/test/unit/resources/CommitDiscussions.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { CommitDiscussions } from '../../../src'; - -jest.mock( - '../../../src/infrastructure/RequestHelper', - () => require('../../__mocks__/RequestHelper').default, -); - -let service: CommitDiscussions; - -beforeEach(() => { - service = new CommitDiscussions({ - requesterFn: jest.fn(), - token: 'abcdefg', - requestTimeout: 3000, - }); -}); - -describe('Instantiating CommitDiscussions service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(CommitDiscussions); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); diff --git a/packages/core/test/unit/resources/Commits.ts b/packages/core/test/unit/resources/Commits.ts index 21b04f509..e806e6ab9 100644 --- a/packages/core/test/unit/resources/Commits.ts +++ b/packages/core/test/unit/resources/Commits.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating Commits service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Commits); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Commits.all', () => { it('should request GET /projects/:id/repository/commits', async () => { await service.all(1); @@ -52,9 +42,9 @@ describe('Commits.cherryPick', () => { }); }); -describe('Commits.comments', () => { +describe('Commits.allComments', () => { it('should request POST projects/:id/repository/commits/:sha/comments', async () => { - await service.comments(1, '5a'); + await service.allComments(1, '5a'); expect(RequestHelper.get()).toHaveBeenCalledWith( service, @@ -110,9 +100,9 @@ describe('Commits.createComment', () => { }); }); -describe('Commits.diff', () => { +describe('Commits.showDiff', () => { it('should request GET projects/:id/repository/commits/:sha/diff', async () => { - await service.diff(1, '5a'); + await service.showDiff(1, '5a'); expect(RequestHelper.get()).toHaveBeenCalledWith( service, @@ -124,15 +114,17 @@ describe('Commits.diff', () => { describe('Commits.editStatus', () => { it('should request POST projects/:id/statuses/:ref', async () => { - await service.editStatus(1, '5a'); + await service.editStatus(1, '5a', 'pending'); - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/statuses/5a', undefined); + expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/statuses/5a', { + state: 'pending', + }); }); }); -describe('Commits.references', () => { +describe('Commits.allReferences', () => { it('should request GET projects/:id/repository/commits/:sha/refs', async () => { - await service.references(1, '5a'); + await service.allReferences(1, '5a'); expect(RequestHelper.get()).toHaveBeenCalledWith( service, @@ -154,9 +146,9 @@ describe('Commits.show', () => { }); }); -describe('Commits.status', () => { +describe('Commits.allStatuses', () => { it('should request GET projects/:id/repository/commits/:sha/statuses', async () => { - await service.statuses(1, '5a'); + await service.allStatuses(1, '5a'); expect(RequestHelper.get()).toHaveBeenCalledWith( service, @@ -166,9 +158,9 @@ describe('Commits.status', () => { }); }); -describe('Commits.mergeRequests', () => { +describe('Commits.allMergeRequests', () => { it('should request GET projects/:id/repository/commits/:sha/statuses', async () => { - await service.mergeRequests(1, '5a'); + await service.allMergeRequests(1, '5a'); expect(RequestHelper.get()).toHaveBeenCalledWith( service, diff --git a/packages/core/test/unit/resources/ContainerRegistry.ts b/packages/core/test/unit/resources/ContainerRegistry.ts index 0639877f9..809503d27 100644 --- a/packages/core/test/unit/resources/ContainerRegistry.ts +++ b/packages/core/test/unit/resources/ContainerRegistry.ts @@ -16,31 +16,21 @@ beforeEach(() => { }); }); -describe('Instantiating ContainerRegistry service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(ContainerRegistry); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - -describe('ContainerRegistry.repositories', () => { +describe('ContainerRegistry.allRepositories', () => { it('should request GET /projects/:id/registry/repositories', async () => { - await service.projectRepositories(1); + await service.allRepositories({ projectId: 1 }); expect(RequestHelper.get()).toHaveBeenCalledWith( service, 'projects/1/registry/repositories', - undefined, + {}, ); }); }); -describe('ContainerRegistry.tags', () => { +describe('ContainerRegistry.allTags', () => { it('should request GET /projects/:id/registry/repositories/:id/tags', async () => { - await service.tags(1, 2); + await service.allTags(1, 2); expect(RequestHelper.get()).toHaveBeenCalledWith( service, @@ -86,6 +76,14 @@ describe('ContainerRegistry.removeTags', () => { }); }); +describe('ContainerRegistry.showRepository', () => { + it('should request GET /registry/repositories/:id', async () => { + await service.showRepository(2); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'registry/repositories/2', undefined); + }); +}); + describe('ContainerRegistry.showTag', () => { it('should request GET /projects/:id/registry/repositories/:id/tags/:id', async () => { await service.showTag(1, 2, 'name'); diff --git a/packages/core/test/unit/resources/DeployKeys.ts b/packages/core/test/unit/resources/DeployKeys.ts index 8ff8355d9..4ce3e85cd 100644 --- a/packages/core/test/unit/resources/DeployKeys.ts +++ b/packages/core/test/unit/resources/DeployKeys.ts @@ -16,21 +16,14 @@ beforeEach(() => { }); }); -describe('Instantiating DeployKeys service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(DeployKeys); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('DeployKeys.add', () => { it('should request POST /projects/:id/deploy_keys', async () => { - await service.add(1); + await service.create(1, 'title', 'key'); - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/deploy_keys', undefined); + expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/deploy_keys', { + title: 'title', + key: 'key', + }); }); }); @@ -50,10 +43,10 @@ describe('DeployKeys.all', () => { describe('DeployKeys.edit', () => { it('should request PUT /projects/:id/deploy_keys/:key', async () => { - await service.edit(1, 2, { prop: 3 }); + await service.edit(1, 2, { title: 'title' }); expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'projects/1/deploy_keys/2', { - prop: 3, + title: 'title', }); }); }); diff --git a/packages/core/test/unit/resources/DeployTokens.ts b/packages/core/test/unit/resources/DeployTokens.ts new file mode 100644 index 000000000..b298e80a1 --- /dev/null +++ b/packages/core/test/unit/resources/DeployTokens.ts @@ -0,0 +1,83 @@ +import { DeployTokens } from '../../../src'; +import { RequestHelper } from '../../../src/infrastructure'; + +jest.mock( + '../../../src/infrastructure/RequestHelper', + () => require('../../__mocks__/RequestHelper').default, +); + +let service: DeployTokens; + +beforeEach(() => { + service = new DeployTokens({ + requesterFn: jest.fn(), + token: 'abcdefg', + requestTimeout: 3000, + }); +}); + +describe('DeployTokens.create', () => { + it('should throw an error when attempting to create a deploy_key without specifying the groupId or projectId', () => { + expect(() => service.create('token', ['read_repository'])).toThrow( + 'Missing required argument. Please supply a projectId or a groupId in the options parameter.', + ); + }); + + it('should request POST groups/5/deploy_tokens with a name and scopes', async () => { + await service.create('token', ['read_repository'], { groupId: 5 }); + + expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'groups/5/deploy_tokens', { + name: 'token', + scopes: ['read_repository'], + }); + }); + + it('should request POST projects/5/deploy_tokens with a name and scopes', async () => { + await service.create('token', ['read_repository'], { projectId: 5 }); + + expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/5/deploy_tokens', { + name: 'token', + scopes: ['read_repository'], + }); + }); +}); + +describe('DeployTokens.all', () => { + it('should request GET /deploy_tokens', async () => { + await service.all(); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'deploy_tokens', {}); + }); + + it('should request GET groups/5/deploy_tokens with groupId', async () => { + await service.all({ groupId: 5 }); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'groups/5/deploy_tokens', {}); + }); + + it('should request GET projects/5/deploy_tokens with projectId', async () => { + await service.all({ projectId: 5 }); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/5/deploy_tokens', {}); + }); +}); + +describe('DeployTokens.remove', () => { + it('should throw an error when attempting to delete a deploy_key without specifying the groupId or projectId', () => { + expect(() => service.remove(6)).toThrow( + 'Missing required argument. Please supply a projectId or a groupId in the options parameter.', + ); + }); + + it('should request DEL groups/5/deploy_tokens with groupId', async () => { + await service.remove(6, { groupId: 5 }); + + expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'groups/5/deploy_tokens/6', {}); + }); + + it('should request DEL projects/5/deploy_tokens with projectId', async () => { + await service.remove(6, { projectId: 5 }); + + expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'projects/5/deploy_tokens/6', {}); + }); +}); diff --git a/packages/core/test/unit/resources/Deployments.ts b/packages/core/test/unit/resources/Deployments.ts index 406bab5fe..1641426b0 100644 --- a/packages/core/test/unit/resources/Deployments.ts +++ b/packages/core/test/unit/resources/Deployments.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating Deployments service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Deployments); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Deployments.all', () => { it('should request GET /projects/:id/deployments', async () => { await service.all(1); @@ -46,9 +36,9 @@ describe('Deployments.show', () => { }); }); -describe('Deployments.mergeRequests', () => { +describe('Deployments.allMergeRequests', () => { it('should request GET /projects/:id/deployments/:id/merge_requests', async () => { - await service.mergeRequests(1, 2); + await service.allMergeRequests(1, 2); expect(RequestHelper.get()).toHaveBeenCalledWith( service, diff --git a/packages/core/test/unit/resources/Environments.ts b/packages/core/test/unit/resources/Environments.ts index 29690846c..d156a4c58 100644 --- a/packages/core/test/unit/resources/Environments.ts +++ b/packages/core/test/unit/resources/Environments.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating Environments service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Environments); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Environments.all', () => { it('should request GET /projects/:id/environments', async () => { await service.all(1); @@ -36,10 +26,11 @@ describe('Environments.all', () => { describe('Environments.create', () => { it('should request POST /projects/:id/environments', async () => { - await service.create(1, { prop: 1 }); + await service.create(1, 'name', { tier: 'production' }); expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/environments', { - prop: 1, + name: 'name', + tier: 'production', }); }); }); diff --git a/packages/core/test/unit/resources/EpicDiscussions.ts b/packages/core/test/unit/resources/EpicDiscussions.ts deleted file mode 100644 index 01a805411..000000000 --- a/packages/core/test/unit/resources/EpicDiscussions.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { EpicDiscussions } from '../../../src'; - -jest.mock( - '../../../src/infrastructure/RequestHelper', - () => require('../../__mocks__/RequestHelper').default, -); - -let service: EpicDiscussions; - -beforeEach(() => { - service = new EpicDiscussions({ - requesterFn: jest.fn(), - token: 'abcdefg', - requestTimeout: 3000, - }); -}); - -describe('Instantiating EpicDiscussions service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(EpicDiscussions); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); diff --git a/packages/core/test/unit/resources/EpicIssues.ts b/packages/core/test/unit/resources/EpicIssues.ts index 83eac7cfd..b2601ccca 100644 --- a/packages/core/test/unit/resources/EpicIssues.ts +++ b/packages/core/test/unit/resources/EpicIssues.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating EpicIssues service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(EpicIssues); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('EpicIssues.all', () => { it('should request GET /groups/:id/epics/:id/issues', async () => { await service.all(1, 2); @@ -36,10 +26,10 @@ describe('EpicIssues.all', () => { describe('EpicIssues.edit', () => { it('should request PUT /groups/:id/epics/:id/issues/:id', async () => { - await service.edit(1, 2, 3, { title: 'Testing terms' }); + await service.edit(1, 2, 3, { moveBeforeId: 3 }); expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'groups/1/epics/2/issues/3', { - title: 'Testing terms', + moveBeforeId: 3, }); }); }); diff --git a/packages/core/test/unit/resources/EpicLinks.ts b/packages/core/test/unit/resources/EpicLinks.ts new file mode 100644 index 000000000..064d314bf --- /dev/null +++ b/packages/core/test/unit/resources/EpicLinks.ts @@ -0,0 +1,73 @@ +import { RequestHelper } from '../../../src/infrastructure'; +import { EpicLinks } from '../../../src'; + +jest.mock( + '../../../src/infrastructure/RequestHelper', + () => require('../../__mocks__/RequestHelper').default, +); + +let service: EpicLinks; + +beforeEach(() => { + service = new EpicLinks({ + requesterFn: jest.fn(), + token: 'abcdefg', + requestTimeout: 3000, + }); +}); + +describe('EpicLinks.all', () => { + it('should request GET /groups/:id/epics/:id/links', async () => { + await service.all(1, 2); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'groups/1/epics/2/links', undefined); + }); +}); + +describe('EpicLinks.assign', () => { + it('should request POST /groups/:id/epics/:id/links/:id', async () => { + await service.assign(1, 2, 3); + + expect(RequestHelper.post()).toHaveBeenCalledWith( + service, + 'groups/1/epics/2/links/3', + undefined, + ); + }); +}); + +describe('EpicLinks.create', () => { + it('should request POST /groups/:id/epics/:id/links', async () => { + await service.create(1, 2, 'Testing epic links', { confidential: false }); + + expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'groups/1/epics/2/links', { + searchParams: { + title: 'Testing epic links', + }, + confidential: false, + }); + }); +}); + +describe('EpicLinks.reorder', () => { + it('should request PUT /groups/:id/epics/:id/links/:id', async () => { + await service.reorder(1, 2, 3, { moveBeforeId: 3, moveAfterId: 1 }); + + expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'groups/1/epics/2/links/3', { + moveBeforeId: 3, + moveAfterId: 1, + }); + }); +}); + +describe('EpicLinks.unassign', () => { + it('should request DEL /groups/:id/epics/:id/links/:id', async () => { + await service.unassign(1, 2, 3); + + expect(RequestHelper.del()).toHaveBeenCalledWith( + service, + 'groups/1/epics/2/links/3', + undefined, + ); + }); +}); diff --git a/packages/core/test/unit/resources/EpicNotes.ts b/packages/core/test/unit/resources/EpicNotes.ts deleted file mode 100644 index 03c0306cf..000000000 --- a/packages/core/test/unit/resources/EpicNotes.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { EpicNotes } from '../../../src'; - -jest.mock( - '../../../src/infrastructure/RequestHelper', - () => require('../../__mocks__/RequestHelper').default, -); - -let service: EpicNotes; - -beforeEach(() => { - service = new EpicNotes({ - requesterFn: jest.fn(), - token: 'abcdefg', - requestTimeout: 3000, - }); -}); - -describe('Instantiating EpicNotes service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(EpicNotes); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); diff --git a/packages/core/test/unit/resources/Epics.ts b/packages/core/test/unit/resources/Epics.ts index 1a033730f..f1618c6d4 100644 --- a/packages/core/test/unit/resources/Epics.ts +++ b/packages/core/test/unit/resources/Epics.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating Epics service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Epics); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Epics.all', () => { it('should request GET /groups/:id/epics', async () => { await service.all(1); diff --git a/packages/core/test/unit/resources/FeatureFlags.ts b/packages/core/test/unit/resources/FeatureFlags.ts index 36a615eba..859cafb25 100644 --- a/packages/core/test/unit/resources/FeatureFlags.ts +++ b/packages/core/test/unit/resources/FeatureFlags.ts @@ -16,28 +16,22 @@ beforeEach(() => { }); }); -describe('Instantiating FeatureFlags service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(FeatureFlags); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('FeatureFlags.all', () => { it('should request GET /projects/:id/feature_flags without options', async () => { await service.all(1); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/feature_flags', {}); + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + 'projects/1/feature_flags', + undefined, + ); }); it('should request GET /projects/:id/feature_flags', async () => { - await service.all(1, { scopes: 'enabled' }); + await service.all(1, { scope: 'enabled' }); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/feature_flags', { - scopes: 'enabled', + scope: 'enabled', }); }); }); @@ -55,10 +49,10 @@ describe('FeatureFlags.create', () => { describe('FeatureFlags.edit', () => { it('should request PUT /projects/:id/feature_flags/:flag_name', async () => { - await service.edit(1, 'name', { test: 1 }); + await service.edit(1, 'name', { description: 'test' }); expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'projects/1/feature_flags/name', { - test: 1, + description: 'test', }); }); }); diff --git a/packages/core/test/unit/resources/FreezePeriods.ts b/packages/core/test/unit/resources/FreezePeriods.ts index 90068bd8a..13330674e 100644 --- a/packages/core/test/unit/resources/FreezePeriods.ts +++ b/packages/core/test/unit/resources/FreezePeriods.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating FreezePeriods service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(FreezePeriods); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('FreezePeriods.all', () => { it('should request GET /projects/:id/freeze_periods', async () => { await service.all(1); @@ -74,7 +64,7 @@ describe('FreezePeriods.edit', () => { describe('FreezePeriods.delete', () => { it('should request DELETE projects/:id/freeze_periods/:freeze_period_id', async () => { - await service.delete(1, 2); + await service.remove(1, 2); expect(RequestHelper.del()).toHaveBeenCalledWith( service, diff --git a/packages/core/test/unit/resources/General.ts b/packages/core/test/unit/resources/General.ts new file mode 100644 index 000000000..8fedc8669 --- /dev/null +++ b/packages/core/test/unit/resources/General.ts @@ -0,0 +1,19 @@ +import * as Resources from '../../../src/resources'; + +describe('Instantiating services', () => { + it('should create a valid service object for each export', () => { + Object.entries(Resources).forEach(([k, V]) => { + const service = new V({ + requesterFn: jest.fn(), + token: 'abcdefg', + requestTimeout: 3000, + }); + + expect(service.constructor.name).toBe(k); + expect(service.url).toBeDefined(); + expect(service.rejectUnauthorized).toBeTruthy(); + expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); + expect(service.requestTimeout).toBe(3000); + }); + }); +}); diff --git a/packages/core/test/unit/resources/GeoNodes.ts b/packages/core/test/unit/resources/GeoNodes.ts index 60c42dc54..acdb543b5 100644 --- a/packages/core/test/unit/resources/GeoNodes.ts +++ b/packages/core/test/unit/resources/GeoNodes.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating GeoNodes service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(GeoNodes); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('GeoNodes.all', () => { it('should request GET /geo_nodes', async () => { await service.all(); @@ -36,9 +26,12 @@ describe('GeoNodes.all', () => { describe('GeoNodes.create', () => { it('should request POST /geo_nodes', async () => { - await service.create(1); + await service.create('name', 'url'); - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'geo_nodes/1', undefined); + expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'geo_nodes', { + name: 'name', + url: 'url', + }); }); }); @@ -48,11 +41,20 @@ describe('GeoNodes.edit', () => { expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'geo_nodes/1', undefined); }); + + it('should request PUT /geo_nodes/:id with options', async () => { + await service.edit(1, { name: 'name', url: 'url' }); + + expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'geo_nodes/1', { + name: 'name', + url: 'url', + }); + }); }); -describe('GeoNodes.failures', () => { +describe('GeoNodes.allFailures', () => { it('should request POST /geo_nodes/current/failures', async () => { - await service.failures(); + await service.allFailures(); expect(RequestHelper.post()).toHaveBeenCalledWith( service, @@ -63,10 +65,10 @@ describe('GeoNodes.failures', () => { }); describe('GeoNodes.repair', () => { - it('should request DELETE /geo_nodes/:id', async () => { + it('should request POST /geo_nodes/:id/repair', async () => { await service.repair(1); - expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'geo_nodes/1', undefined); + expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'geo_nodes/1/repair', undefined); }); }); @@ -78,17 +80,17 @@ describe('GeoNodes.show', () => { }); }); -describe('GeoNodes.status', () => { +describe('GeoNodes.showStatus', () => { it('should request GET /geo_nodes/:id/status', async () => { - await service.status(1); + await service.showStatus(1); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'geo_nodes/1/status', undefined); }); }); -describe('GeoNodes.statuses', () => { +describe('GeoNodes.allStatuses', () => { it('should request GET /geo_nodes/statuses', async () => { - await service.statuses(); + await service.allStatuses(); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'geo_nodes/statuses', undefined); }); diff --git a/packages/core/test/unit/resources/GitignoreTemplates.ts b/packages/core/test/unit/resources/GitignoreTemplates.ts deleted file mode 100644 index f4fe17727..000000000 --- a/packages/core/test/unit/resources/GitignoreTemplates.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { GitignoreTemplates } from '../../../src'; - -jest.mock( - '../../../src/infrastructure/RequestHelper', - () => require('../../__mocks__/RequestHelper').default, -); - -let service: GitignoreTemplates; - -beforeEach(() => { - service = new GitignoreTemplates({ - requesterFn: jest.fn(), - token: 'abcdefg', - requestTimeout: 3000, - }); -}); - -describe('Instantiating GitignoreTemplates service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(GitignoreTemplates); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); diff --git a/packages/core/test/unit/resources/Gitlab.ts b/packages/core/test/unit/resources/Gitlab.ts index 594c006c5..0287f39d6 100644 --- a/packages/core/test/unit/resources/Gitlab.ts +++ b/packages/core/test/unit/resources/Gitlab.ts @@ -1,4 +1,3 @@ -import 'jest-extended'; import * as Resources from '../../../src/resources'; const { Gitlab, ...resources } = Resources; diff --git a/packages/core/test/unit/resources/GroupBadges.ts b/packages/core/test/unit/resources/GroupBadges.ts deleted file mode 100644 index d32c01187..000000000 --- a/packages/core/test/unit/resources/GroupBadges.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { GroupBadges } from '../../../src'; - -jest.mock( - '../../../src/infrastructure/RequestHelper', - () => require('../../__mocks__/RequestHelper').default, -); - -let service: GroupBadges; - -beforeEach(() => { - service = new GroupBadges({ - requesterFn: jest.fn(), - token: 'abcdefg', - requestTimeout: 3000, - }); -}); - -describe('Instantiating GroupBadges service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(GroupBadges); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); diff --git a/packages/core/test/unit/resources/GroupHooks.ts b/packages/core/test/unit/resources/GroupHooks.ts new file mode 100644 index 000000000..1add80508 --- /dev/null +++ b/packages/core/test/unit/resources/GroupHooks.ts @@ -0,0 +1,91 @@ +import { RequestHelper } from '../../../src/infrastructure'; +import { GroupHooks } from '../../../src'; + +jest.mock( + '../../../src/infrastructure/RequestHelper', + () => require('../../__mocks__/RequestHelper').default, +); + +let service: GroupHooks; + +beforeEach(() => { + service = new GroupHooks({ + requesterFn: jest.fn(), + token: 'abcdefg', + requestTimeout: 3000, + }); +}); + +describe('Instantiating GroupHooks service', () => { + it('should create a valid service object', () => { + expect(service).toBeInstanceOf(GroupHooks); + expect(service.url).toBeDefined(); + expect(service.rejectUnauthorized).toBeTruthy(); + expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); + expect(service.requestTimeout).toBe(3000); + }); + + it('should call /groups prefix', () => { + expect(service.url.includes('groups')).toBeTruthy(); + }); +}); + +describe('GroupHooks.all', () => { + it('should request GET /groups/:id/hooks without options', async () => { + await service.all(1); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '1/hooks', undefined); + }); + + it('should request GET /groups/:id/hooks with options', async () => { + await service.all(1, { sudo: 'sudo' }); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '1/hooks', { sudo: 'sudo' }); + }); +}); + +describe('GroupHooks.add', () => { + it('should request POST /groups/:id/hooks', async () => { + await service.add(1, 'url'); + + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '1/hooks', { + url: 'url', + }); + }); +}); + +describe('GroupHooks.edit', () => { + it('should request PUT /groups/:id/hooks/:hook_id', async () => { + await service.edit(1, 2, 'url'); + + expect(RequestHelper.put()).toHaveBeenCalledWith(service, '1/hooks/2', { url: 'url' }); + }); +}); + +describe('GroupHooks.show', () => { + it('should request GET /groups/:id/hooks/:hook_id without options', async () => { + await service.show(1, 2); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '1/hooks/2', undefined); + }); + + it('should request GET /groups/:id/hooks/:hook_id with options', async () => { + await service.show(1, 2, { sudo: 1 }); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '1/hooks/2', { sudo: 1 }); + }); +}); + +describe('GroupHooks.remove', () => { + it('should request DEL /groups/:id/hooks/:hook_id with options', async () => { + await service.remove(1, 2, { sudo: 1 }); + + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '1/hooks/2', { sudo: 1 }); + }); + + it('should request DEL /groups/:id/hooks/:hook_id without options', async () => { + await service.remove(1, 2); + + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '1/hooks/2', undefined); + }); +}); diff --git a/packages/core/test/unit/resources/GroupMembers.ts b/packages/core/test/unit/resources/GroupMembers.ts index 726a1f95e..89f73a4fe 100644 --- a/packages/core/test/unit/resources/GroupMembers.ts +++ b/packages/core/test/unit/resources/GroupMembers.ts @@ -16,13 +16,9 @@ beforeEach(() => { }); }); -describe('Instantiating GroupMembers service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(GroupMembers); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); +describe('GroupMembers General', () => { + it('should call /groups prefix', () => { + expect(service.url.includes('groups')).toBeTruthy(); }); }); diff --git a/packages/core/test/unit/resources/GroupRunners.ts b/packages/core/test/unit/resources/GroupRunners.ts deleted file mode 100644 index f1ad26bdd..000000000 --- a/packages/core/test/unit/resources/GroupRunners.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { GroupRunners } from '../../../src'; -import { RequestHelper } from '../../../src/infrastructure'; - -jest.mock( - '../../../src/infrastructure/RequestHelper', - () => require('../../__mocks__/RequestHelper').default, -); - -let service: GroupRunners; - -beforeEach(() => { - service = new GroupRunners({ - requesterFn: jest.fn(), - token: 'abcdefg', - requestTimeout: 3000, - }); -}); - -describe('Instantiating GroupRunners service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(GroupRunners); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - -describe('GroupRunners.all', () => { - it('should request GET /groups/:id/runners', async () => { - await service.all(1, { test: 1 }); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'groups/1/runners', { test: 1 }); - }); - - it('should request GET /groups/:id/runners without options', async () => { - await service.all(1); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'groups/1/runners', undefined); - }); -}); diff --git a/packages/core/test/unit/resources/Groups.ts b/packages/core/test/unit/resources/Groups.ts index adba1c585..b95fbff5c 100644 --- a/packages/core/test/unit/resources/Groups.ts +++ b/packages/core/test/unit/resources/Groups.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating Groups service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Groups); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Groups.all', () => { it('should request GET /groups', async () => { await service.all(); @@ -55,9 +45,9 @@ describe('Groups.edit', () => { }); }); -describe('Groups.projects', () => { +describe('Groups.allProjects', () => { it('should request GET /groups/:id/projects', async () => { - await service.projects(12); + await service.allProjects(12); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'groups/12/projects', undefined); }); @@ -79,24 +69,6 @@ describe('Groups.remove', () => { }); }); -describe('Groups.removeLDAPLink', () => { - it('should request DEL /groups/:id/ldap_group_links/:id without provider', async () => { - await service.removeLDAPLink(1, 'cd'); - - expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'groups/1/ldap_group_links/cd', {}); - }); - - it('should request DEL /groups/:id/ldap_group_links/:provider/:id with provider', async () => { - await service.removeLDAPLink(1, 'cd', { provider: 'test' }); - - expect(RequestHelper.del()).toHaveBeenCalledWith( - service, - 'groups/1/ldap_group_links/test/cd', - {}, - ); - }); -}); - describe('Groups.search', () => { it('should request GET /groups', async () => { await service.search('keywords'); diff --git a/packages/core/test/unit/resources/IssueLinks.ts b/packages/core/test/unit/resources/IssueLinks.ts new file mode 100644 index 000000000..f05668517 --- /dev/null +++ b/packages/core/test/unit/resources/IssueLinks.ts @@ -0,0 +1,29 @@ +import { RequestHelper } from '../../../src/infrastructure'; +import { IssueLinks } from '../../../src'; + +jest.mock( + '../../../src/infrastructure/RequestHelper', + () => require('../../__mocks__/RequestHelper').default, +); + +let service: IssueLinks; + +beforeEach(() => { + service = new IssueLinks({ + requesterFn: jest.fn(), + token: 'abcdefg', + requestTimeout: 3000, + }); +}); + +describe('IssueLinks.all', () => { + it('should request GET projects/:id/issues/:id/links', async () => { + await service.all(8, 3); + + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + 'projects/8/issues/3/links', + undefined, + ); + }); +}); diff --git a/packages/core/test/unit/resources/Issues.ts b/packages/core/test/unit/resources/Issues.ts index dcac70d04..8def307d0 100644 --- a/packages/core/test/unit/resources/Issues.ts +++ b/packages/core/test/unit/resources/Issues.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating Issues service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Issues); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Issues.addSpentTime', () => { it('should request POST projects/:id/issues:id/add_spent_time', async () => { await service.addSpentTime(2, 3, '10m'); @@ -86,32 +76,22 @@ describe('Issues.edit', () => { describe('Issues.create', () => { it('should request POST projects/:id/issues', async () => { - await service.create(2, { - title: 'Issue.create Test', + await service.create(2, 'title', { + assigneeId: 3, description: 'A test issue', }); expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/2/issues', { - title: 'Issue.create Test', + title: 'title', + assigneeId: 3, description: 'A test issue', }); }); }); -describe('Issues.link', () => { - it('should request POST projects/:id/issues/:id/links', async () => { - await service.link(8, 3, 4, 5); - - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/8/issues/3/links', { - targetProjectId: '4', - targetIssueIid: '5', - }); - }); -}); - -describe('Issues.participants', () => { +describe('Issues.allParticipants', () => { it('should request GET /projects/:id/issues/:id/participants', async () => { - await service.participants(1, 2); + await service.allParticipants(1, 2); expect(RequestHelper.get()).toHaveBeenCalledWith( service, @@ -155,7 +135,7 @@ describe('Issues.resetTimeEstimate', () => { describe('Issues.show', () => { it('should request GET /projects/:id/issues/:id', async () => { - await service.show(1, 2); + await service.show(1, { projectId: 2 }); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/issues/2', undefined); }); @@ -173,9 +153,9 @@ describe('Issues.subscribe', () => { }); }); -describe('Issues.timeStats', () => { +describe('Issues.showTimeStats', () => { it('should request GET /projects/:id/issues/:id/time_stats', async () => { - await service.timeStats(1, 2); + await service.showTimeStats(1, 2); expect(RequestHelper.get()).toHaveBeenCalledWith( service, diff --git a/packages/core/test/unit/resources/IssuesStatistics.ts b/packages/core/test/unit/resources/IssuesStatistics.ts index 141faf4fb..6e6775523 100644 --- a/packages/core/test/unit/resources/IssuesStatistics.ts +++ b/packages/core/test/unit/resources/IssuesStatistics.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating IssuesStatistics service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(IssuesStatistics); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('IssuesStatistics.all', () => { it('should request GET /issues_statistics', async () => { await service.all(); diff --git a/packages/core/test/unit/resources/JobArtifacts.ts b/packages/core/test/unit/resources/JobArtifacts.ts new file mode 100644 index 000000000..0db4a2a04 --- /dev/null +++ b/packages/core/test/unit/resources/JobArtifacts.ts @@ -0,0 +1,152 @@ +import { JobArtifacts } from '../../../src'; +import { RequestHelper } from '../../../src/infrastructure'; + +jest.mock( + '../../../src/infrastructure/RequestHelper', + () => require('../../__mocks__/RequestHelper').default, +); + +let service: JobArtifacts; + +beforeEach(() => { + service = new JobArtifacts({ + requesterFn: jest.fn(), + token: 'abcdefg', + requestTimeout: 3000, + }); +}); + +describe('JobArtifacts.downloadArchive', () => { + it('should throw an error if require parameters are not present', () => { + expect(() => service.downloadArchive(1)).toThrow( + 'Missing one of the required parameters. See typing', + ); + }); + + it('should request GET /projects/:id/jobs/:job_id/artifacts, getting the job’s artifacts zipped archive of a project via private token', async () => { + await service.downloadArchive(1, { jobId: 43 }); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, `projects/1/jobs/43/artifacts`, { + searchParams: { + jobToken: undefined, + }, + }); + }); + + it('should request GET /projects/:id/jobs/:job_id/artifacts, getting the job’s artifacts zipped archive of a project via jobToken parameter', async () => { + await service.downloadArchive(1, { jobId: 43, jobToken: 'token' }); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, `projects/1/jobs/43/artifacts`, { + searchParams: { + jobToken: 'token', + }, + }); + }); + + it('should request GET /projects/:id/jobs/artifacts/:ref/download?job=:name getting the job’s artifacts zipped archive from the latest successful pipeline via private token', async () => { + await service.downloadArchive(1, { job: 'job1', ref: 'ref1' }); + + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + `projects/1/jobs/artifacts/ref1/download?job=job1`, + { + searchParams: { + jobToken: undefined, + }, + }, + ); + }); + + it('should request GET /projects/:id/jobs/artifacts/:ref/download?job=:name getting the job’s artifacts zipped archive from the latest successful pipeline via jobToken parameter', async () => { + await service.downloadArchive(1, { job: 'job1', ref: 'ref1', jobToken: 'token' }); + + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + `projects/1/jobs/artifacts/ref1/download?job=job1`, + { + searchParams: { + jobToken: 'token', + }, + }, + ); + }); + + it('should request GET /projects/:id/jobs/:job_id/artifacts/:artifact_path, getting a single artifact file from a job with a specified ID from inside the job’s artifacts zipped archive via private token', async () => { + await service.downloadArchive(1, { jobId: 43, artifactPath: 'path' }); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, `projects/1/jobs/43/artifacts/path`, { + searchParams: { + jobToken: undefined, + }, + }); + }); + + it('should request GET /projects/:id/jobs/:job_id/artifacts, getting a single artifact file from a job with a specified ID from inside the job’s artifacts zipped archive via jobToken parameter', async () => { + await service.downloadArchive(1, { jobId: 43, jobToken: 'token', artifactPath: 'path' }); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, `projects/1/jobs/43/artifacts/path`, { + searchParams: { + jobToken: 'token', + }, + }); + }); + + it('should request GET /projects/:id/jobs/artifacts/:id/:ref/raw/path?job=:job getting a single artifact file for a specific job of the latest successful pipeline via private token', async () => { + await service.downloadArchive(1, { job: 'job1', ref: 'ref1', artifactPath: 'path' }); + + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + `projects/1/jobs/artifacts/ref1/raw/path?job=job1`, + { + searchParams: { + jobToken: undefined, + }, + }, + ); + }); + + it('should request GET /projects/:id/jobs/artifacts/:id/ref/:ref/raw/path?job=:name getting a single artifact file for a specific job of the latest successful pipeline via job token', async () => { + await service.downloadArchive(1, { + job: 'job1', + ref: 'ref1', + artifactPath: 'path', + jobToken: 'token', + }); + + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + `projects/1/jobs/artifacts/ref1/raw/path?job=job1`, + { + searchParams: { + jobToken: 'token', + }, + }, + ); + }); +}); + +describe('JobArtifacts.keep', () => { + it('should request POST /projects/:id/jobs/:id/artifacts/keep', async () => { + await service.keep(1, 2); + + expect(RequestHelper.post()).toHaveBeenCalledWith( + service, + 'projects/1/jobs/2/artifacts/keep', + undefined, + ); + }); +}); + +describe('JobArtifacts.remove', () => { + it('should request DELETE /projects/:id/artifacts', async () => { + await service.remove(1); + + expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'projects/1/artifacts', {}); + }); + + it('should request DELETE /projects/:id/jobs/:id/artifacts', async () => { + await service.remove(1, { jobId: 2 }); + + expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'projects/1/jobs/2/artifacts', {}); + }); +}); diff --git a/packages/core/test/unit/resources/Jobs.ts b/packages/core/test/unit/resources/Jobs.ts index 414413bca..0b6e1a382 100644 --- a/packages/core/test/unit/resources/Jobs.ts +++ b/packages/core/test/unit/resources/Jobs.ts @@ -16,100 +16,40 @@ beforeEach(() => { }); }); -describe('Instantiating Jobs service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Jobs); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Jobs.all', () => { it('should request GET /projects/:id/jobs', async () => { await service.all(1); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/jobs', undefined); - }); -}); - -describe('Jobs.cancel', () => { - it('should request POST /projects/:id/jobs/:id', async () => { - await service.cancel(1, 2); - - expect(RequestHelper.post()).toHaveBeenCalledWith( - service, - 'projects/1/jobs/2/cancel', - undefined, - ); - }); -}); - -describe('Jobs.downloadSingleArtifactFile', () => { - it('should request GET /projects/:id/jobs/:id/artifacts/:path without streaming', async () => { - await service.downloadSingleArtifactFile(1, 2, 'test/path'); - - expect(RequestHelper.get()).toHaveBeenCalledWith( - service, - 'projects/1/jobs/2/artifacts/test/path', - {}, - ); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/jobs', {}); }); - it('should request GET /projects/:id/jobs/:id/artifacts/:path with streaming', async () => { - await service.downloadSingleArtifactFile(1, 2, 'test/path', { stream: true }); + it('should request GET /projects/:id/pipelines/:id/jobs', async () => { + await service.all(1, { pipelineId: 2 }); - expect(RequestHelper.stream).toHaveBeenCalledWith( - service, - 'projects/1/jobs/2/artifacts/test/path', - {}, - ); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/pipelines/2/jobs', {}); }); }); -describe('Jobs.downloadSingleArtifactFileFromRef', () => { - it('should request GET /projects/:id/jobs/artifacts/:id/raw/:path?job=:name without streaming', async () => { - await service.downloadSingleArtifactFileFromRef(1, 'ref', 'test/path', 'name'); +describe('Jobs.allPipelineBridges', () => { + it('should request GET /projects/:id/pipelines/:id/bridges', async () => { + await service.allPipelineBridges(1, 2); expect(RequestHelper.get()).toHaveBeenCalledWith( service, - `projects/1/jobs/artifacts/ref/raw/test/path?job=name`, - {}, - ); - }); - - it('should request GET /projects/:id/jobs/artifacts/:id/raw/:path?job=:name with streaming', async () => { - await service.downloadSingleArtifactFileFromRef(1, 'ref', 'test/path', 'name', { - stream: true, - }); - - expect(RequestHelper.stream).toHaveBeenCalledWith( - service, - `projects/1/jobs/artifacts/ref/raw/test/path?job=name`, - {}, + 'projects/1/pipelines/2/bridges', + undefined, ); }); }); -describe('Jobs.downloadLatestArtifactFile', () => { - it('should request GET /projects/:id/jobs/artifacts/:id/download?job=:name without streaming', async () => { - await service.downloadLatestArtifactFile(1, 'ref', 'name'); - - expect(RequestHelper.get()).toHaveBeenCalledWith( - service, - `projects/1/jobs/artifacts/ref/download?job=name`, - {}, - ); - }); - - it('should request GET /projects/:id/jobs/artifacts/:id/download?job=:name with streaming', async () => { - await service.downloadLatestArtifactFile(1, 'ref', 'name', { stream: true }); +describe('Jobs.cancel', () => { + it('should request POST /projects/:id/jobs/:id/cancel', async () => { + await service.cancel(1, 2); - expect(RequestHelper.stream).toHaveBeenCalledWith( + expect(RequestHelper.post()).toHaveBeenCalledWith( service, - `projects/1/jobs/artifacts/ref/download?job=name`, - {}, + 'projects/1/jobs/2/cancel', + undefined, ); }); }); @@ -134,30 +74,6 @@ describe('Jobs.erase', () => { }); }); -describe('Jobs.eraseArtifacts', () => { - it('should request DELETE /projects/:id/jobs/:id/artifacts', async () => { - await service.eraseArtifacts(1, 2); - - expect(RequestHelper.del()).toHaveBeenCalledWith( - service, - 'projects/1/jobs/2/artifacts', - undefined, - ); - }); -}); - -describe('Jobs.keepArtifacts', () => { - it('should request POST /projects/:id/jobs/:id/artifacts/keep', async () => { - await service.keepArtifacts(1, 2); - - expect(RequestHelper.post()).toHaveBeenCalledWith( - service, - 'projects/1/jobs/2/artifacts/keep', - undefined, - ); - }); -}); - describe('Jobs.play', () => { it('should request POST /projects/:id/jobs/:id/play', async () => { await service.play(1, 2); @@ -186,26 +102,30 @@ describe('Jobs.show', () => { }); }); -describe('Jobs.showPipelineJobs', () => { - it('should request GET /projects/:id/pipelines/:id/jobs', async () => { - await service.showPipelineJobs(1, 2); +describe('Jobs.showConnectedJob', () => { + it('should request GET /job', async () => { + service.headers['job-token'] = 'token'; - expect(RequestHelper.get()).toHaveBeenCalledWith( - service, - 'projects/1/pipelines/2/jobs', - undefined, - ); + await service.showConnectedJob(); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'job', undefined); + }); + + it('should error if job-token isnt present', () => { + expect(() => service.showConnectedJob()).toThrow('Missing required header "job-token"'); }); }); -describe('Jobs.showPipelineBridges', () => { - it('should request GET /projects/:id/pipelines/:id/bridges', async () => { - await service.showPipelineBridges(1, 2); +describe('Jobs.showConnectedJobK8Agents', () => { + it('should request GET /job/allowed_agents', async () => { + service.headers['job-token'] = 'token'; - expect(RequestHelper.get()).toHaveBeenCalledWith( - service, - 'projects/1/pipelines/2/bridges', - undefined, - ); + await service.showConnectedJobK8Agents(); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'job/allowed_agents', undefined); + }); + + it('should error if job-token isnt present', () => { + expect(() => service.showConnectedJobK8Agents()).toThrow('Missing required header "job-token"'); }); }); diff --git a/packages/core/test/unit/resources/License.ts b/packages/core/test/unit/resources/License.ts index ba4ceeae6..55633d94c 100644 --- a/packages/core/test/unit/resources/License.ts +++ b/packages/core/test/unit/resources/License.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating License service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(License); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('License.all', () => { it('should request GET licenses', async () => { await service.all(); @@ -39,7 +29,9 @@ describe('License.add', () => { await service.add('A cool licence'); expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'license', { - license: 'A cool licence', + searchParams: { + license: 'A cool licence', + }, }); }); }); diff --git a/packages/core/test/unit/resources/MergeRequestApprovals.ts b/packages/core/test/unit/resources/MergeRequestApprovals.ts index 708605876..4db947fa3 100644 --- a/packages/core/test/unit/resources/MergeRequestApprovals.ts +++ b/packages/core/test/unit/resources/MergeRequestApprovals.ts @@ -16,36 +16,28 @@ beforeEach(() => { }); }); -describe('Instantiating MergeRequestApprovals service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(MergeRequestApprovals); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - -describe('MergeRequestApprovals.configuration', () => { +describe('MergeRequestApprovals.showConfiguration', () => { it('should request GET /projects/:id/approvals without options', async () => { - await service.configuration(3); + await service.showConfiguration(3); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/3/approvals', {}); }); it('should request GET /projects/:id/approvals', async () => { - await service.configuration(3, { prop: 4 }); + await service.showConfiguration(3, { sudo: 'sudo' }); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/3/approvals', { prop: 4 }); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/3/approvals', { + sudo: 'sudo', + }); }); - it('should request GET /projects/:id/merge_requests/:merge_request_iid/approvals when mergerequestIid Id is passed', async () => { - await service.configuration(3, { mergerequestIid: 1, prop: 4 }); + it('should request GET /projects/:id/merge_requests/:merge_request_iid/approvals when mergerequestIId Id is passed', async () => { + await service.showConfiguration(3, { mergerequestIId: 1 }); expect(RequestHelper.get()).toHaveBeenCalledWith( service, 'projects/3/merge_requests/1/approvals', - { prop: 4 }, + {}, ); }); }); @@ -58,63 +50,53 @@ describe('MergeRequestApprovals.editConfiguration', () => { }); it('should request POST /projects/:id/approvals', async () => { - await service.editConfiguration(3, { prop: 4 }); - - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/3/approvals', { prop: 4 }); - }); - - it('should request POST /projects/:id/merge_requests/:merge_request_iid/approvals when mergerequestIid Id is passed', async () => { - await service.editConfiguration(3, { mergerequestIid: 1, prop: 4 }); + await service.editConfiguration(3, { requirePasswordToApprove: true }); - expect(RequestHelper.post()).toHaveBeenCalledWith( - service, - 'projects/3/merge_requests/1/approvals', - { prop: 4 }, - ); + expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/3/approvals', { + requirePasswordToApprove: true, + }); }); }); -describe('MergeRequestApprovals.approvalRule', () => { +describe('MergeRequestApprovals.showApprovalRule', () => { it('should request GET /projects/:id/approval_rules/:approval_rule_id', async () => { - await service.approvalRule(2, 4, { prop: 3 }); + await service.showApprovalRule(2, 4); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/2/approval_rules/4', { - prop: 3, - }); + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + 'projects/2/approval_rules/4', + undefined, + ); }); }); -describe('MergeRequestApprovals.approvalRules', () => { +describe('MergeRequestApprovals.allApprovalRules', () => { it('should request GET /projects/:id/approval_rules without options', async () => { - await service.approvalRules(2); + await service.allApprovalRules(2); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/2/approval_rules', {}); }); it('should request GET /projects/:id/approval_rules', async () => { - await service.approvalRules(2, { prop: 3 }); + await service.allApprovalRules(2); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/2/approval_rules', { - prop: 3, - }); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/2/approval_rules', {}); }); - it('should request GET /projects/:id/merge_requests/:merge_request_iid/approval_rules when mergerequestIid is passed', async () => { - await service.approvalRules(2, { mergerequestIid: 1, prop: 3 }); + it('should request GET /projects/:id/merge_requests/:merge_request_iid/approval_rules when mergerequestIId is passed', async () => { + await service.allApprovalRules(2, { mergerequestIId: 1 }); expect(RequestHelper.get()).toHaveBeenCalledWith( service, 'projects/2/merge_requests/1/approval_rules', - { - prop: 3, - }, + {}, ); }); }); -describe('MergeRequestApprovals.addApprovalRule', () => { +describe('MergeRequestApprovals.createApprovalRule', () => { it('should request POST /projects/:id/approval_rules without options', async () => { - await service.addApprovalRule(2, 'Some rule', 5); + await service.createApprovalRule(2, 'Some rule', 5); expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/2/approval_rules', { name: 'Some rule', @@ -123,7 +105,7 @@ describe('MergeRequestApprovals.addApprovalRule', () => { }); it('should request POST /projects/:id/approval_rules', async () => { - await service.addApprovalRule(2, 'Some rule', 5, { + await service.createApprovalRule(2, 'Some rule', 5, { userIds: [1, 2], groupIds: [3, 4], protectedBranchIds: [5, 6], @@ -138,9 +120,9 @@ describe('MergeRequestApprovals.addApprovalRule', () => { }); }); - it('should request POST /projects/:id/merge_requests/:merge_request_iid/approval_rules when mergerequestIid is passed', async () => { - await service.addApprovalRule(2, 'Some rule', 5, { - mergerequestIid: 3, + it('should request POST /projects/:id/merge_requests/:merge_request_iid/approval_rules when mergerequestIId is passed', async () => { + await service.createApprovalRule(2, 'Some rule', 5, { + mergerequestIId: 3, userIds: [1, 2], groupIds: [3, 4], }); @@ -184,9 +166,9 @@ describe('MergeRequestApprovals.editApprovalRule', () => { }); }); - it('should request PUT /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id when mergerequestIid is passed', async () => { + it('should request PUT /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id when mergerequestIId is passed', async () => { await service.editApprovalRule(2, 30, 'Some rule', 5, { - mergerequestIid: 3, + mergerequestIId: 3, userIds: [1, 2], groupIds: [3, 4], }); @@ -211,8 +193,8 @@ describe('MergeRequestApprovals.removeApprovalRule', () => { expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'projects/2/approval_rules/30', {}); }); - it('should request DELETE /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id when mergerequestIid is passed', async () => { - await service.removeApprovalRule(2, 30, { mergerequestIid: 3 }); + it('should request DELETE /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id when mergerequestIId is passed', async () => { + await service.removeApprovalRule(2, 30, { mergerequestIId: 3 }); expect(RequestHelper.del()).toHaveBeenCalledWith( service, @@ -222,9 +204,9 @@ describe('MergeRequestApprovals.removeApprovalRule', () => { }); }); -describe('MergeRequestApprovals.approvalState', () => { +describe('MergeRequestApprovals.showApprovalState', () => { it('should request GET /projects/:id/merge_requests/:merge_request_iid/approval_state', async () => { - await service.approvalState(2, 3); + await service.showApprovalState(2, 3); expect(RequestHelper.get()).toHaveBeenCalledWith( service, diff --git a/packages/core/test/unit/resources/MergeRequests.ts b/packages/core/test/unit/resources/MergeRequests.ts index ae340b504..7fdf43853 100644 --- a/packages/core/test/unit/resources/MergeRequests.ts +++ b/packages/core/test/unit/resources/MergeRequests.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating MergeRequests service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(MergeRequests); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('MergeRequests.accept', () => { it('should request PUT projects/:id/merge_requests:id/merge', async () => { await service.accept(2, 3); @@ -52,9 +42,9 @@ describe('MergeRequests.addSpentTime', () => { }); }); -describe('MergeRequests.addTimeEstimate', () => { +describe('MergeRequests.setTimeEstimate', () => { it('should request POST projects/:id/merge_requests:id/add_spent_time', async () => { - await service.addTimeEstimate(2, 3, '10m'); + await service.setTimeEstimate(2, 3, '10m'); expect(RequestHelper.post()).toHaveBeenCalledWith( service, @@ -86,9 +76,9 @@ describe('MergeRequests.all', () => { }); }); -describe('MergeRequests.cancelOnPipelineSucess', () => { +describe('MergeRequests.cancelOnPipelineSuccess', () => { it('should request PUT projects/:id/merge_requests/:id/cancel_merge_when_pipeline_succeeds', async () => { - await service.cancelOnPipelineSucess(2, 3); + await service.cancelOnPipelineSuccess(2, 3); expect(RequestHelper.put()).toHaveBeenCalledWith( service, @@ -98,21 +88,21 @@ describe('MergeRequests.cancelOnPipelineSucess', () => { }); }); -describe('MergeRequests.changes', () => { +describe('MergeRequests.allChanges', () => { it('should request GET projects/:id/merge_requests/:id/changes', async () => { - await service.changes(2, 3); + await service.allDiffs(2, 3); expect(RequestHelper.get()).toHaveBeenCalledWith( service, - 'projects/2/merge_requests/3/changes', + 'projects/2/merge_requests/3/diffs', undefined, ); }); }); -describe('MergeRequests.closesIssues', () => { +describe('MergeRequests.allIssuesClosed', () => { it('should request GET projects/:id/merge_requests/:id/closes_issues', async () => { - await service.closesIssues(2, 3); + await service.allIssuesClosed(2, 3); expect(RequestHelper.get()).toHaveBeenCalledWith( service, @@ -122,9 +112,9 @@ describe('MergeRequests.closesIssues', () => { }); }); -describe('MergeRequests.commits', () => { +describe('MergeRequests.allCommits', () => { it('should request GET projects/:id/merge_requests/:id/commits', async () => { - await service.commits(2, 3); + await service.allCommits(2, 3); expect(RequestHelper.get()).toHaveBeenCalledWith( service, @@ -147,6 +137,18 @@ describe('MergeRequests.create', () => { }); }); +describe('MergeRequests.createPipeline', () => { + it('should request POST /projects/:id/merge_requests/:id/pipelines', async () => { + await service.createPipeline(1, 2); + + expect(RequestHelper.post()).toHaveBeenCalledWith( + service, + 'projects/1/merge_requests/2/pipelines', + undefined, + ); + }); +}); + describe('MergeRequests.edit', () => { it('should request PUT /projects/:id/merge_requests/:iid', async () => { await service.edit(1, 2, { title: 'Testing MR' }); @@ -157,9 +159,9 @@ describe('MergeRequests.edit', () => { }); }); -describe('MergeRequests.participants', () => { +describe('MergeRequests.allParticipants', () => { it('should request GET /projects/:id/merge_requests/:id/participants', async () => { - await service.participants(1, 2); + await service.allParticipants(1, 2); expect(RequestHelper.get()).toHaveBeenCalledWith( service, @@ -169,9 +171,9 @@ describe('MergeRequests.participants', () => { }); }); -describe('MergeRequests.pipelines', () => { +describe('MergeRequests.allPipelines', () => { it('should request GET /projects/:id/merge_requests/:id/pipelines', async () => { - await service.pipelines(1, 2); + await service.allPipelines(1, 2); expect(RequestHelper.get()).toHaveBeenCalledWith( service, @@ -241,9 +243,9 @@ describe('MergeRequests.subscribe', () => { }); }); -describe('MergeRequests.timeStats', () => { +describe('MergeRequests.showTimeStats', () => { it('should request GET /projects/:id/merge_requests/:id/time_stats', async () => { - await service.timeStats(1, 2); + await service.showTimeStats(1, 2); expect(RequestHelper.get()).toHaveBeenCalledWith( service, @@ -253,9 +255,9 @@ describe('MergeRequests.timeStats', () => { }); }); -describe('MergeRequests.version', () => { +describe('MergeRequests.showDiffVersion', () => { it('should request GET /projects/:id/merge_requests/:id/versions/:id', async () => { - await service.version(1, 2, 3); + await service.showDiffVersion(1, 2, 3); expect(RequestHelper.get()).toHaveBeenCalledWith( service, @@ -265,9 +267,9 @@ describe('MergeRequests.version', () => { }); }); -describe('MergeRequests.versions', () => { +describe('MergeRequests.allDiffVersions', () => { it('should request GET /projects/:id/merge_requests/:id/versions', async () => { - await service.versions(1, 2); + await service.allDiffVersions(1, 2); expect(RequestHelper.get()).toHaveBeenCalledWith( service, diff --git a/packages/core/test/unit/resources/NotificationSettings.ts b/packages/core/test/unit/resources/NotificationSettings.ts index f691c5b49..59f47424d 100644 --- a/packages/core/test/unit/resources/NotificationSettings.ts +++ b/packages/core/test/unit/resources/NotificationSettings.ts @@ -16,39 +16,27 @@ beforeEach(() => { }); }); -describe('Instantiating NotificationSettings service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(NotificationSettings); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - -describe('NotificationSettings.all', () => { +describe('NotificationSettings.show', () => { it('should request GET /notification_settings', async () => { - await service.all(); + await service.show(); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'notification_settings', { - sudo: undefined, - }); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'notification_settings', {}); }); it('should request GET /projects/:id/notification_settings when project Id is passed', async () => { - await service.all({ projectId: 1 }); + await service.show({ projectId: 1 }); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/notification_settings', { - sudo: undefined, - }); + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + 'projects/1/notification_settings', + {}, + ); }); it('should request GET /group/:id/notification_settings when group Id is passed', async () => { - await service.all({ groupId: 2 }); + await service.show({ groupId: 2 }); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'groups/2/notification_settings', { - sudo: undefined, - }); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'groups/2/notification_settings', {}); }); }); @@ -57,7 +45,6 @@ describe('NotificationSettings.edit', () => { await service.edit({ level: 'watch' }); expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'notification_settings', { - sudo: undefined, level: 'watch', }); }); @@ -66,7 +53,6 @@ describe('NotificationSettings.edit', () => { await service.edit({ projectId: 1, level: 'watch' }); expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'projects/1/notification_settings', { - sudo: undefined, level: 'watch', }); }); @@ -75,7 +61,6 @@ describe('NotificationSettings.edit', () => { await service.edit({ groupId: 2, level: 'watch' }); expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'groups/2/notification_settings', { - sudo: undefined, level: 'watch', }); }); diff --git a/packages/core/test/unit/resources/PackageRegistry.ts b/packages/core/test/unit/resources/PackageRegistry.ts index f25bf6398..892b60a70 100644 --- a/packages/core/test/unit/resources/PackageRegistry.ts +++ b/packages/core/test/unit/resources/PackageRegistry.ts @@ -16,32 +16,18 @@ beforeEach(() => { }); }); -describe('Instantiating PackageRegistry service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(PackageRegistry); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('PackageRegistry.publish', () => { it('should request PUT projects/:projectId/packages/generic/:packageName/:packageVersion/:filename', async () => { - await service.publish(1, 'name', 'v1.0', 'filename.txt', 'content'); + const content = new Blob(['content'], { type: 'text/plain' }); + + await service.publish(1, 'name', 'v1.0', { content, filename: 'filename.txt' }); expect(RequestHelper.put()).toHaveBeenCalledWith( service, `projects/1/packages/generic/name/v1.0/filename.txt`, { isForm: true, - file: [ - 'content', - { - contentType: 'text/plain', - filename: 'filename.txt', - }, - ], + file: [content, 'filename.txt'], }, ); }); diff --git a/packages/core/test/unit/resources/Packages.ts b/packages/core/test/unit/resources/Packages.ts index 0fd2f4144..2685e3cd2 100644 --- a/packages/core/test/unit/resources/Packages.ts +++ b/packages/core/test/unit/resources/Packages.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating Packages service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Packages); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Packages.all', () => { it('should request GET /projects/:id/packages', async () => { await service.all({ projectId: 1 }); @@ -40,7 +30,9 @@ describe('Packages.all', () => { }); it('should throw an error is neither groupId or projectId is passed', () => { - expect(() => service.all()).toThrow('projectId or groupId must be passed'); + expect(() => service.all()).toThrow( + 'Missing required argument. Please supply a projectId or a groupId in the options parameter.', + ); }); }); @@ -72,9 +64,9 @@ describe('Packages.show', () => { }); }); -describe('Packages.showFiles', () => { +describe('Packages.allFiles', () => { it('should request GET /projects/:id/packages/:id/package_files', async () => { - await service.showFiles(1, 2); + await service.allFiles(1, 2); expect(RequestHelper.get()).toHaveBeenCalledWith( service, diff --git a/packages/core/test/unit/resources/PagesDomains.ts b/packages/core/test/unit/resources/PagesDomains.ts index 8cf8d050f..897199918 100644 --- a/packages/core/test/unit/resources/PagesDomains.ts +++ b/packages/core/test/unit/resources/PagesDomains.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating PagesDomains service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(PagesDomains); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('PagesDomains.all', () => { it('should request GET /projects/:id/pages/domains', async () => { await service.all({ projectId: 1 }); diff --git a/packages/core/test/unit/resources/PipelineScheduleVariables.ts b/packages/core/test/unit/resources/PipelineScheduleVariables.ts index ff5b5868d..93ea9d5dd 100644 --- a/packages/core/test/unit/resources/PipelineScheduleVariables.ts +++ b/packages/core/test/unit/resources/PipelineScheduleVariables.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating PipelineScheduleVariables service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(PipelineScheduleVariables); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('PipelineScheduleVariables.all', () => { it('should request GET /projects/:id/pipeline_schedules/:id/variables', async () => { await service.all(1, 2); @@ -40,13 +30,14 @@ describe('PipelineScheduleVariables.all', () => { describe('PipelineScheduleVariables.create', () => { it('should request POST /projects/:id/pipeline_schedules/:id/variables', async () => { - await service.create(1, 2, { prop: 1 }); + await service.create(1, 2, 'key', 'value'); expect(RequestHelper.post()).toHaveBeenCalledWith( service, 'projects/1/pipeline_schedules/2/variables', { - prop: 1, + key: 'key', + value: 'value', }, ); }); @@ -54,24 +45,14 @@ describe('PipelineScheduleVariables.create', () => { describe('PipelineScheduleVariables.edit', () => { it('should request PUT /projects/:id/pipeline_schedules/:id/variables/:key', async () => { - await service.edit(1, 2, 'key'); + await service.edit(1, 2, 'key', 'value'); expect(RequestHelper.put()).toHaveBeenCalledWith( service, 'projects/1/pipeline_schedules/2/variables/key', - undefined, - ); - }); -}); - -describe('PipelineScheduleVariables.show', () => { - it('should request GET /projects/:id/pipeline_schedules/:id/variables', async () => { - await service.show(1, 2, 'key'); - - expect(RequestHelper.get()).toHaveBeenCalledWith( - service, - 'projects/1/pipeline_schedules/2/variables/key', - undefined, + { + value: 'value', + }, ); }); }); diff --git a/packages/core/test/unit/resources/PipelineSchedules.ts b/packages/core/test/unit/resources/PipelineSchedules.ts index 2efc2feda..3f469d584 100644 --- a/packages/core/test/unit/resources/PipelineSchedules.ts +++ b/packages/core/test/unit/resources/PipelineSchedules.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating PipelineSchedules service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(PipelineSchedules); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('PipelineSchedules.all', () => { it('should request GET /projects/:id/pipeline_schedules/:id', async () => { await service.all(1); diff --git a/packages/core/test/unit/resources/Pipelines.ts b/packages/core/test/unit/resources/Pipelines.ts index 7a096b4c6..cee2b3970 100644 --- a/packages/core/test/unit/resources/Pipelines.ts +++ b/packages/core/test/unit/resources/Pipelines.ts @@ -16,29 +16,25 @@ beforeEach(() => { }); }); -describe('Instantiating Pipelines service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Pipelines); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Projects.create', () => { it('should request POST /projects/user/:id when userId defined', async () => { await service.create(1, 'ci/cd', { - variables: { - PULL_REQUEST_NAME: 'TEST', - }, + variables: [ + { + key: 'PULL_REQUEST_NAME', + value: 'TEST', + }, + ], }); expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/pipeline', { ref: 'ci/cd', - variables: { - PULL_REQUEST_NAME: 'TEST', - }, + variables: [ + { + key: 'PULL_REQUEST_NAME', + value: 'TEST', + }, + ], }); }); }); diff --git a/packages/core/test/unit/resources/ProjectHooks.ts b/packages/core/test/unit/resources/ProjectHooks.ts index 23dac5e79..a30c68e26 100644 --- a/packages/core/test/unit/resources/ProjectHooks.ts +++ b/packages/core/test/unit/resources/ProjectHooks.ts @@ -20,9 +20,7 @@ describe('Instantiating ProjectHooks service', () => { it('should create a valid service object', () => { expect(service).toBeInstanceOf(ProjectHooks); expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); + expect(service.url).toContain('projects'); }); }); @@ -30,13 +28,13 @@ describe('ProjectHooks.all', () => { it('should request GET /projects/:id/hooks without options', async () => { await service.all(1); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/hooks', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '1/hooks', undefined); }); it('should request GET /projects/:id/hooks with options', async () => { - await service.all(1, { test: 1 }); + await service.all(1, { perPage: 1 }); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/hooks', { test: 1 }); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '1/hooks', { perPage: 1 }); }); }); @@ -44,7 +42,7 @@ describe('ProjectHooks.add', () => { it('should request POST /projects/:id/hooks', async () => { await service.add(1, 'url'); - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/hooks', { + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '1/hooks', { url: 'url', }); }); @@ -54,7 +52,7 @@ describe('ProjectHooks.edit', () => { it('should request PUT /projects/:id/hooks/:hook_id', async () => { await service.edit(1, 2, 'url'); - expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'projects/1/hooks/2', { url: 'url' }); + expect(RequestHelper.put()).toHaveBeenCalledWith(service, '1/hooks/2', { url: 'url' }); }); }); @@ -62,13 +60,13 @@ describe('ProjectHooks.show', () => { it('should request GET /projects/:id/hooks/:hook_id without options', async () => { await service.show(1, 2); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/hooks/2', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '1/hooks/2', undefined); }); it('should request GET /projects/:id/hooks/:hook_id with options', async () => { await service.show(1, 2, { sudo: 1 }); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/hooks/2', { sudo: 1 }); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '1/hooks/2', { sudo: 1 }); }); }); @@ -76,12 +74,12 @@ describe('ProjectHooks.remove', () => { it('should request DEL /projects/:id/hooks/:hook_id with options', async () => { await service.remove(1, 2, { sudo: 1 }); - expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'projects/1/hooks/2', { sudo: 1 }); + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '1/hooks/2', { sudo: 1 }); }); it('should request DEL /projects/:id/hooks/:hook_id without options', async () => { await service.remove(1, 2); - expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'projects/1/hooks/2', undefined); + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '1/hooks/2', undefined); }); }); diff --git a/packages/core/test/unit/resources/ProjectImportExport.ts b/packages/core/test/unit/resources/ProjectImportExport.ts index 0638a4927..d1ebf2c19 100644 --- a/packages/core/test/unit/resources/ProjectImportExport.ts +++ b/packages/core/test/unit/resources/ProjectImportExport.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating ProjectImportExport service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(ProjectImportExport); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('ProjectImportExport.download', () => { it('should request GET /projects/:id/export/download', async () => { await service.download(1); @@ -38,9 +28,9 @@ describe('ProjectImportExport.download', () => { }); }); -describe('ProjectImportExport.exportStatus', () => { +describe('ProjectImportExport.showExportStatus', () => { it('should request GET /projects/:id/export', async () => { - await service.exportStatus(1); + await service.showExportStatus(1); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/export', undefined); }); @@ -48,41 +38,33 @@ describe('ProjectImportExport.exportStatus', () => { describe('ProjectImportExport.import', () => { it('should request POST /projects/import', async () => { - await service.import('content', 'path'); - - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/import', { - isForm: true, - file: [ - 'content', - { filename: expect.stringContaining('.tar.gz'), contentType: 'application/gzip' }, - ], - path: 'path', - }); - }); + const content = new Blob(['content'], { type: 'text/plain' }); - it('should request POST /projects/import with metadata', async () => { - await service.import('content', 'path', { metadata: { filename: 'filename.txt' } }); + await service.import({ content, filename: 'test.tar.gz' }, 'path', { name: 'test' }); expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/import', { isForm: true, - file: ['content', { filename: 'filename.txt', contentType: 'text/plain' }], + file: [content, 'test.tar.gz'], + name: 'test', path: 'path', }); }); }); -describe('ProjectImportExport.importStatus', () => { +describe('ProjectImportExport.showImportStatus', () => { it('should request GET /projects/:id/import', async () => { - await service.importStatus(1); + await service.showImportStatus(1); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/import', undefined); }); }); -describe('ProjectImportExport.schedule', () => { +describe('ProjectImportExport.scheduleExport', () => { it('should request POST /projects/:id/export', async () => { - await service.schedule(1); + await service.scheduleExport(1, { url: 'string' }); - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/export', undefined); + expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/export', { + upload: { url: 'string' }, + }); }); }); diff --git a/packages/core/test/unit/resources/Releases.ts b/packages/core/test/unit/resources/ProjectReleases.ts similarity index 67% rename from packages/core/test/unit/resources/Releases.ts rename to packages/core/test/unit/resources/ProjectReleases.ts index bbc06d26f..a1e566f41 100644 --- a/packages/core/test/unit/resources/Releases.ts +++ b/packages/core/test/unit/resources/ProjectReleases.ts @@ -1,32 +1,22 @@ import { RequestHelper } from '../../../src/infrastructure'; -import { Releases } from '../../../src'; +import { ProjectReleases } from '../../../src'; jest.mock( '../../../src/infrastructure/RequestHelper', () => require('../../__mocks__/RequestHelper').default, ); -let service: Releases; +let service: ProjectReleases; beforeEach(() => { - service = new Releases({ + service = new ProjectReleases({ requesterFn: jest.fn(), token: 'abcdefg', requestTimeout: 3000, }); }); -describe('Instantiating Releases service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Releases); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - -describe('Releases.all', () => { +describe('ProjectReleases.all', () => { it('should request GET /projects/:id/releases', async () => { await service.all(1); @@ -34,7 +24,7 @@ describe('Releases.all', () => { }); }); -describe('Releases.create', () => { +describe('ProjectReleases.create', () => { it('should request POST /projects/:id/releases', async () => { await service.create(1, { prop: 1 }); @@ -44,7 +34,7 @@ describe('Releases.create', () => { }); }); -describe('Releases.edit', () => { +describe('ProjectReleases.edit', () => { it('should request PUT /projects/:id/releases', async () => { await service.edit(1, '2'); @@ -52,7 +42,7 @@ describe('Releases.edit', () => { }); }); -describe('Releases.show', () => { +describe('ProjectReleases.show', () => { it('should request GET /projects/:id/releases/:id', async () => { await service.show(1, '2'); @@ -60,7 +50,7 @@ describe('Releases.show', () => { }); }); -describe('Releases.remove', () => { +describe('ProjectReleases.remove', () => { it('should request DEL /projects/:id/releases/:id', async () => { await service.remove(1, '2'); diff --git a/packages/core/test/unit/resources/ProjectSnippets.ts b/packages/core/test/unit/resources/ProjectSnippets.ts index f06d58f8c..0a6466e74 100644 --- a/packages/core/test/unit/resources/ProjectSnippets.ts +++ b/packages/core/test/unit/resources/ProjectSnippets.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating ProjectSnippets service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(ProjectSnippets); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('ProjectSnippets.all', () => { it('should request GET /projects/:id/snippets', async () => { await service.all(1); @@ -34,9 +24,9 @@ describe('ProjectSnippets.all', () => { }); }); -describe('ProjectSnippets.content', () => { +describe('ProjectSnippets.showContent', () => { it('should request GET /projects/:id/snippets/:id/raw', async () => { - await service.content(1, 2); + await service.showContent(1, 2); expect(RequestHelper.get()).toHaveBeenCalledWith( service, @@ -48,14 +38,13 @@ describe('ProjectSnippets.content', () => { describe('ProjectSnippets.create', () => { it('should request POST /projects/:id/snippets', async () => { - await service.create(1, 'This is a snippet', 'test.txt', 'Hello world', 'internal', { + await service.create(1, 'This is a snippet', { description: 'Hello World snippet', + visibility: 'internal', }); expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/snippets', { title: 'This is a snippet', - fileName: 'test.txt', - code: 'Hello world', visibility: 'internal', description: 'Hello World snippet', }); @@ -64,10 +53,10 @@ describe('ProjectSnippets.create', () => { describe('ProjectSnippets.edit', () => { it('should request PUT /projects/:id/snippets', async () => { - await service.edit(1, 2, { name: 'test snippet 2' }); + await service.edit(1, 2, { description: 'test snippet 2' }); expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'projects/1/snippets/2', { - name: 'test snippet 2', + description: 'test snippet 2', }); }); }); @@ -88,9 +77,9 @@ describe('ProjectSnippets.show', () => { }); }); -describe('ProjectSnippets.userAgentDetails', () => { +describe('ProjectSnippets.showUserAgentDetails', () => { it('should request GET /projects/:id/snippets/:id/user_agent_detail', async () => { - await service.userAgentDetails(1, 2); + await service.showUserAgentDetails(1, 2); expect(RequestHelper.get()).toHaveBeenCalledWith( service, diff --git a/packages/core/test/unit/resources/ProjectWikis.ts b/packages/core/test/unit/resources/ProjectWikis.ts new file mode 100644 index 000000000..741cb464f --- /dev/null +++ b/packages/core/test/unit/resources/ProjectWikis.ts @@ -0,0 +1,63 @@ +import { RequestHelper } from '../../../src/infrastructure'; +import { ProjectWikis } from '../../../src'; + +jest.mock( + '../../../src/infrastructure/RequestHelper', + () => require('../../__mocks__/RequestHelper').default, +); + +let service: ProjectWikis; + +beforeEach(() => { + service = new ProjectWikis({ + requesterFn: jest.fn(), + token: 'abcdefg', + requestTimeout: 3000, + }); +}); + +describe('ProjectWikis instantiation', () => { + it('should incude projects as a prefixUrl', () => { + expect(service.url.split('/').pop()).toBe('projects'); + }); +}); + +describe('ProjectWikis.all', () => { + it('should request GET /projects/:id/wikis', async () => { + await service.all(1); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '1/wikis', undefined); + }); +}); + +describe('ProjectWikis.create', () => { + it('should request POST /projects/:id/wikis', async () => { + await service.create(1, 'content', 'title'); + + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '1/wikis', undefined); + }); +}); + +describe('ProjectWikis.edit', () => { + it('should request PUT /projects/:id/wikis/:slug', async () => { + await service.edit(1, 'slug'); + + expect(RequestHelper.put()).toHaveBeenCalledWith(service, '1/wikis/slug', undefined); + }); +}); + +describe('ProjectWikis.show', () => { + it('should request GET /projects/:id/wikis/:slug', async () => { + await service.show(1, 'slug'); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '1/wikis/slug', undefined); + }); +}); + +describe('ProjectWikis.remove', () => { + it('should request DEL /projects/:id/wikis/:slug', async () => { + await service.remove(1, 'slug'); + + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '1/wikis/slug', undefined); + }); +}); diff --git a/packages/core/test/unit/resources/Projects.ts b/packages/core/test/unit/resources/Projects.ts index 361555466..dd7b6dce9 100644 --- a/packages/core/test/unit/resources/Projects.ts +++ b/packages/core/test/unit/resources/Projects.ts @@ -16,20 +16,11 @@ beforeEach(() => { }); }); -describe('Instantiating Projects service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Projects); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - }); -}); - describe('Projects.all', () => { it('should request GET /projects', async () => { await service.all(); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects', {}); }); }); @@ -81,6 +72,6 @@ describe('Projects.fork', () => { it('should request POST /projects/:id/fork', async () => { await service.fork(12); - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/12/fork', {}); + expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/12/fork', undefined); }); }); diff --git a/packages/core/test/unit/resources/ProtectedBranches.ts b/packages/core/test/unit/resources/ProtectedBranches.ts index 1697214b2..f7eaea8e7 100644 --- a/packages/core/test/unit/resources/ProtectedBranches.ts +++ b/packages/core/test/unit/resources/ProtectedBranches.ts @@ -16,45 +16,49 @@ beforeEach(() => { }); }); -describe('Instantiating ProtectedBranches service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(ProtectedBranches); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('ProtectedBranches.all', () => { it('should request GET /projects/:id/protected_branches', async () => { - await service.all(1, { test: 1 }); + await service.all(1, { search: 'dedde' }); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/protected_branches', { - test: 1, + search: 'dedde', }); }); it('should request GET /projects/:id/protected_branches without options', async () => { await service.all(1); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/protected_branches', {}); + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + 'projects/1/protected_branches', + undefined, + ); }); }); -describe('ProtectedBranches.protect', () => { +describe('ProtectedBranches.create', () => { it('should request POST /projects/:id/protected_branches', async () => { - await service.protect(1, 'name', { test: 1 }); + await service.create(1, 'name', { allowForcePush: true }); expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/protected_branches', { - query: { + searchParams: { name: 'name', - test: 1, + allowForcePush: true, }, }); }); }); +describe('ProtectedBranches.protect', () => { + it('should request POST /projects/:id/protected_branches', async () => { + const spy = jest.spyOn(service, 'create'); + + await service.protect(1, 'name', { allowForcePush: true }); + + expect(spy).toHaveBeenCalledWith(1, 'name', { allowForcePush: true }); + }); +}); + describe('ProtectedBranches.show', () => { it('should request GET /projects/:id/protected_branches/:branch_name', async () => { await service.show(1, 'name', { sudo: 1 }); @@ -79,9 +83,9 @@ describe('ProtectedBranches.show', () => { }); }); -describe('ProtectedBranches.unprotect', () => { +describe('ProtectedBranches.remove', () => { it('should request DEL /projects/:id/protected_branches/:branch_name without options', async () => { - await service.unprotect(1, 'name'); + await service.remove(1, 'name'); expect(RequestHelper.del()).toHaveBeenCalledWith( service, @@ -91,7 +95,7 @@ describe('ProtectedBranches.unprotect', () => { }); it('should request DEL /projects/:id/protected_branches/:branch_name', async () => { - await service.unprotect(1, 'name', { sudo: 1 }); + await service.remove(1, 'name', { sudo: 1 }); expect(RequestHelper.del()).toHaveBeenCalledWith( service, @@ -100,3 +104,21 @@ describe('ProtectedBranches.unprotect', () => { ); }); }); + +describe('ProtectedBranches.unprotect', () => { + it('should request DEL /projects/:id/protected_branches/:branch_name without options', async () => { + const spy = jest.spyOn(service, 'remove'); + + await service.unprotect(1, 'name'); + + expect(spy).toHaveBeenCalledWith(1, 'name', undefined); + }); + + it('should request DEL /projects/:id/protected_branches/:branch_name', async () => { + const spy = jest.spyOn(service, 'remove'); + + await service.unprotect(1, 'name', { sudo: 1 }); + + expect(spy).toHaveBeenCalledWith(1, 'name', { sudo: 1 }); + }); +}); diff --git a/packages/core/test/unit/resources/PushRules.ts b/packages/core/test/unit/resources/PushRules.ts deleted file mode 100644 index 24abe45a6..000000000 --- a/packages/core/test/unit/resources/PushRules.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { PushRules } from '../../../src'; -import { RequestHelper } from '../../../src/infrastructure'; - -jest.mock( - '../../../src/infrastructure/RequestHelper', - () => require('../../__mocks__/RequestHelper').default, -); - -let service: PushRules; - -beforeEach(() => { - service = new PushRules({ - requesterFn: jest.fn(), - token: 'abcdefg', - requestTimeout: 3000, - }); -}); - -// the feature is not available for CE users https://gitlab.com/gitlab-org/gitlab-ee/issues/3825 - -describe('Instantiating PushRules service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(PushRules); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - }); -}); - -describe('PushRules.create', () => { - it('should request PUT projects/:id/push_rule', async () => { - await service.create(1, { prop: 1 }); - - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/push_rule', { prop: 1 }); - }); -}); - -describe('PushRules.edit', () => { - it('should request PUT projects/:id/push_rule', async () => { - await service.edit(1, { - memberCheck: true, - }); - - expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'projects/1/push_rule', { - memberCheck: true, - }); - }); -}); - -describe('PushRules.remove', () => { - it('should request DELETE projects/:id/push_rule', async () => { - await service.remove(1); - - expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'projects/1/push_rule', undefined); - }); -}); - -describe('PushRules.show', () => { - it('should request GET projects/:id/push_rule', async () => { - await service.show(1); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/push_rule', undefined); - }); -}); diff --git a/packages/core/test/unit/resources/ReleaseLinks.ts b/packages/core/test/unit/resources/ReleaseLinks.ts index 5bddd4a4b..a8350fca1 100644 --- a/packages/core/test/unit/resources/ReleaseLinks.ts +++ b/packages/core/test/unit/resources/ReleaseLinks.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating ReleaseLinks service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(ReleaseLinks); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('ReleaseLinks.all', () => { it('should request GET /projects/:id/releases/:id/assets/links', async () => { await service.all(1, 'tag'); diff --git a/packages/core/test/unit/resources/RepositoryFiles.ts b/packages/core/test/unit/resources/RepositoryFiles.ts index 9ac93a75e..75dd18fe0 100644 --- a/packages/core/test/unit/resources/RepositoryFiles.ts +++ b/packages/core/test/unit/resources/RepositoryFiles.ts @@ -16,22 +16,12 @@ beforeEach(() => { }); }); -describe('Instantiating RepositoryFiles service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(RepositoryFiles); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('RepositoryFiles.create', () => { it('should request POST /projects/:id/repository/files/:path', async () => { - await service.create(1, 'path', 'master', 'content', 'message'); + await service.create(1, 'path', 'main', 'content', 'message'); expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/repository/files/path', { - branch: 'master', + branch: 'main', content: 'content', commitMessage: 'message', }); @@ -40,10 +30,10 @@ describe('RepositoryFiles.create', () => { describe('RepositoryFiles.edit', () => { it('should request PUT /projects/:id/repository/files/:path', async () => { - await service.edit(1, 'path', 'master', 'content', 'message'); + await service.edit(1, 'path', 'main', 'content', 'message'); expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'projects/1/repository/files/path', { - branch: 'master', + branch: 'main', content: 'content', commitMessage: 'message', }); @@ -52,10 +42,10 @@ describe('RepositoryFiles.edit', () => { describe('RepositoryFiles.remove', () => { it('should request DELETE /projects/:id/repository/files/:path', async () => { - await service.remove(1, 'path', 'master', 'message'); + await service.remove(1, 'path', 'main', 'message'); expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'projects/1/repository/files/path', { - branch: 'master', + branch: 'main', commitMessage: 'message', }); }); @@ -63,34 +53,52 @@ describe('RepositoryFiles.remove', () => { describe('RepositoryFiles.show', () => { it('should request GET /projects/:id/repository/files/:path', async () => { - await service.show(1, 'path', 'master'); + await service.show(1, 'path', 'main'); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/repository/files/path', { - ref: 'master', + ref: 'main', }); }); }); -describe('RepositoryFiles.showBlame', () => { - it('should request GET /projects/:id/repository/files/:path', async () => { - await service.showBlame(1, 'path'); +describe('RepositoryFiles.allFileBlames', () => { + it('should request GET /projects/:id/repository/files/:path/blame?ref=main', async () => { + await service.allFileBlames(1, 'path', 'main'); + + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + 'projects/1/repository/files/path/blame', + { + ref: 'main', + }, + ); + }); + + it('should request GET /projects/:id/repository/files/:path/blame?ref=main&range[start]=1&range[end]=2', async () => { + await service.allFileBlames(1, 'path', 'main', { range: { start: 1, end: 2 } }); expect(RequestHelper.get()).toHaveBeenCalledWith( service, 'projects/1/repository/files/path/blame', - undefined, + { + ref: 'main', + range: { + start: 1, + end: 2, + }, + }, ); }); }); describe('RepositoryFiles.showRaw', () => { it('should request GET /projects/:id/repository/files/:path', async () => { - await service.showRaw(1, 'path', { ref: 'ref' }); + await service.showRaw(1, 'path', 'main'); expect(RequestHelper.get()).toHaveBeenCalledWith( service, 'projects/1/repository/files/path/raw', - { ref: 'ref' }, + { ref: 'main' }, ); }); }); diff --git a/packages/core/test/unit/resources/RepositorySubmodules.ts b/packages/core/test/unit/resources/RepositorySubmodules.ts index 575fbc55c..f60593553 100644 --- a/packages/core/test/unit/resources/RepositorySubmodules.ts +++ b/packages/core/test/unit/resources/RepositorySubmodules.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating Releases service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(RepositorySubmodules); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Releases.edit', () => { it('should request PUT /projects/:id/repository/submodules/:submodule', async () => { await service.edit(1, 'submod', 'branch', 'sha'); @@ -35,7 +25,7 @@ describe('Releases.edit', () => { 'projects/1/repository/submodules/submod', { branch: 'branch', - commit_sha: 'sha', + commitSha: 'sha', }, ); }); diff --git a/packages/core/test/unit/resources/Runners.ts b/packages/core/test/unit/resources/Runners.ts index ddeede6ff..3d1aaa528 100644 --- a/packages/core/test/unit/resources/Runners.ts +++ b/packages/core/test/unit/resources/Runners.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating Runners service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Runners); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Runners.all', () => { it('should request GET /runners/all', async () => { await service.all(); @@ -38,13 +28,17 @@ describe('Runners.all', () => { expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/runners', {}); }); -}); -describe('Runners.allowned', () => { + it('should request GET /groups/:id/runners', async () => { + await service.all({ groupId: 1 }); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'groups/1/runners', {}); + }); + it('should request GET /runners', async () => { - await service.allOwned(); + await service.all({ owned: true }); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'runners', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'runners', {}); }); }); @@ -74,9 +68,9 @@ describe('Runners.disable', () => { }); }); -describe('Runners.jobs', () => { +describe('Runners.allJobs', () => { it('should request GET /runners/:id/jobs', async () => { - await service.jobs(1); + await service.allJobs(1); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'runners/1/jobs', undefined); }); @@ -84,10 +78,16 @@ describe('Runners.jobs', () => { describe('Runners.remove', () => { it('should request DEL /runners/:id', async () => { - await service.remove(2); + await service.remove({ runnerId: 2 }); expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'runners/2', undefined); }); + + it('should request DEL /runners with token', async () => { + await service.remove({ token: 'token' }); + + expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'runners', { token: 'token' }); + }); }); describe('Runners.show', () => { diff --git a/packages/core/test/unit/resources/Search.ts b/packages/core/test/unit/resources/Search.ts index b0f7c5d2c..e3793f0d6 100644 --- a/packages/core/test/unit/resources/Search.ts +++ b/packages/core/test/unit/resources/Search.ts @@ -16,40 +16,30 @@ beforeEach(() => { }); }); -describe('Instantiating Search service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Search); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Search.all', () => { - it('should request GET /search', async () => { - await service.all('scope', 'search terms'); + it('should request GET /search within the users scope', async () => { + await service.all('users', 'search terms'); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'search', { - scope: 'scope', + scope: 'users', search: 'search terms', }); }); it('should request GET /projects/:id/search when project Id is passed', async () => { - await service.all('scope', 'search terms', { projectId: 1 }); + await service.all('projects', 'search terms', { projectId: 1 }); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/search', { - scope: 'scope', + scope: 'projects', search: 'search terms', }); }); it('should request GET /group/:id/search when group Id is passed', async () => { - await service.all('scope', 'search terms', { groupId: 2 }); + await service.all('issues', 'search terms', { groupId: 2 }); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'groups/2/search', { - scope: 'scope', + scope: 'issues', search: 'search terms', }); }); diff --git a/packages/core/test/unit/resources/Snippets.ts b/packages/core/test/unit/resources/Snippets.ts index bbd301af4..4b4b463da 100644 --- a/packages/core/test/unit/resources/Snippets.ts +++ b/packages/core/test/unit/resources/Snippets.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating Snippets service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Snippets); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Snippets.all', () => { it('should request GET /snippets', async () => { await service.all(); @@ -40,9 +30,9 @@ describe('Snippets.all', () => { }); }); -describe('Snippets.content', () => { +describe('Snippets.showContent', () => { it('should request GET /snippets/:id/raw', async () => { - await service.content(12); + await service.showContent(12); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'snippets/12/raw', undefined); }); @@ -50,14 +40,13 @@ describe('Snippets.content', () => { describe('Snippets.create', () => { it('should request POST /snippets', async () => { - await service.create('This is a snippet', 'test.txt', 'Hello world', 'internal', { + await service.create('This is a snippet', { + visibility: 'internal', description: 'Hello World snippet', }); expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'snippets', { title: 'This is a snippet', - fileName: 'test.txt', - content: 'Hello world', visibility: 'internal', description: 'Hello World snippet', }); @@ -66,10 +55,10 @@ describe('Snippets.create', () => { describe('Snippets.edit', () => { it('should request PUT /snippets', async () => { - await service.edit(12, { name: 'test snippet 2' }); + await service.edit(12, { description: 'test snippet 2' }); expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'snippets/12', { - name: 'test snippet 2', + description: 'test snippet 2', }); }); }); @@ -90,9 +79,9 @@ describe('Snippets.remove', () => { }); }); -describe('Snippets.userAgentDetails', () => { +describe('Snippets.showUserAgentDetails', () => { it('should request GET /snippets/:id/user_agent_detail', async () => { - await service.userAgentDetails(12); + await service.showUserAgentDetails(12); expect(RequestHelper.get()).toHaveBeenCalledWith( service, diff --git a/packages/core/test/unit/resources/SystemHooks.ts b/packages/core/test/unit/resources/SystemHooks.ts index 0e7dc0fec..53cc5917c 100644 --- a/packages/core/test/unit/resources/SystemHooks.ts +++ b/packages/core/test/unit/resources/SystemHooks.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating SystemHooks service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(SystemHooks); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('SystemHooks.all', () => { it('should request GET /hooks without options', async () => { await service.all(); @@ -34,9 +24,9 @@ describe('SystemHooks.all', () => { }); it('should request GET /hooks with options', async () => { - await service.all({ test: 1 }); + await service.all(); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'hooks', { test: 1 }); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'hooks', undefined); }); }); @@ -50,14 +40,6 @@ describe('SystemHooks.add', () => { }); }); -describe('SystemHooks.edit', () => { - it('should request PUT /hooks/:hook_id', async () => { - await service.edit(2, 'url'); - - expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'hooks/2', { url: 'url' }); - }); -}); - describe('SystemHooks.remove', () => { it('should request DEL /hooks/:hook_id with options', async () => { await service.remove(2, { sudo: 1 }); diff --git a/packages/core/test/unit/resources/Tags.ts b/packages/core/test/unit/resources/Tags.ts index 72e82f830..0bfded864 100644 --- a/packages/core/test/unit/resources/Tags.ts +++ b/packages/core/test/unit/resources/Tags.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating Tags service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Tags); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Tags.all', () => { it('should request GET /projects/:id/repository/tags', async () => { await service.all(1); @@ -40,11 +30,11 @@ describe('Tags.all', () => { describe('Tags.create', () => { it('should request POST /projects/:id/repository/tags', async () => { - await service.create(1, 'test', 'main', { test: 1 }); + await service.create(1, 'test', 'main', { message: 'test' }); expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/repository/tags', { - test: 1, - query: { + message: 'test', + searchParams: { ref: 'main', tagName: 'test', }, diff --git a/packages/core/test/unit/resources/TodoLists.ts b/packages/core/test/unit/resources/TodoLists.ts new file mode 100644 index 000000000..4b991810c --- /dev/null +++ b/packages/core/test/unit/resources/TodoLists.ts @@ -0,0 +1,45 @@ +import { RequestHelper } from '../../../src/infrastructure'; +import { TodoLists } from '../../../src'; + +jest.mock( + '../../../src/infrastructure/RequestHelper', + () => require('../../__mocks__/RequestHelper').default, +); + +let service: TodoLists; + +beforeEach(() => { + service = new TodoLists({ + requesterFn: jest.fn(), + token: 'abcdefg', + requestTimeout: 3000, + }); +}); + +describe('TodoLists.all', () => { + it('should request GET /todos', async () => { + await service.all({ authorId: 1 }); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'todos', { authorId: 1 }); + }); + + it('should request GET /todos without options', async () => { + await service.all(); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'todos', undefined); + }); +}); + +describe('TodoLists.done', () => { + it('should request POST /todos', async () => { + await service.done(); + + expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'todos/mark_as_done', {}); + }); + + it('should request POST /todos/1', async () => { + await service.done({ todoId: 1 }); + + expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'todos/1/mark_as_done', {}); + }); +}); diff --git a/packages/core/test/unit/resources/Todos.ts b/packages/core/test/unit/resources/Todos.ts deleted file mode 100644 index 27caac441..000000000 --- a/packages/core/test/unit/resources/Todos.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { RequestHelper } from '../../../src/infrastructure'; -import { Todos } from '../../../src'; - -jest.mock( - '../../../src/infrastructure/RequestHelper', - () => require('../../__mocks__/RequestHelper').default, -); - -let service: Todos; - -beforeEach(() => { - service = new Todos({ - requesterFn: jest.fn(), - token: 'abcdefg', - requestTimeout: 3000, - }); -}); - -describe('Instantiating Todos service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Todos); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - -describe('Todos.all', () => { - it('should request GET /todos', async () => { - await service.all({ test: 1 }); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'todos', { test: 1 }); - }); - - it('should request GET /todos without options', async () => { - await service.all(); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'todos', undefined); - }); -}); - -describe('Todos.create', () => { - it('should request POST /projects/:project_id/mergerequests/:merge_request_id/todo', async () => { - await service.create(1, 2, 'mergerequest'); - - expect(RequestHelper.post()).toHaveBeenCalledWith( - service, - 'projects/1/merge_requests/2/todo', - undefined, - ); - }); - - it('should request POST /projects/:project_id/issues/:issue_id/todo', async () => { - await service.create(1, 2, 'issue'); - - expect(RequestHelper.post()).toHaveBeenCalledWith( - service, - 'projects/1/issues/2/todo', - undefined, - ); - }); - - it('should request POST /projects/:project_id/issues/:issue_id/todo with options', async () => { - await service.create(1, 2, 'issue', { sudo: 1 }); - - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/issues/2/todo', { - sudo: 1, - }); - }); - - it('should request POST /projects/:project_id/mergerequests/:merge_request_id/todo with options', async () => { - await service.create(1, 2, 'mergerequest', { sudo: 1 }); - - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/merge_requests/2/todo', { - sudo: 1, - }); - }); -}); - -describe('Todos.done', () => { - it('should request POST /todos', async () => { - await service.done(); - - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'todos/mark_as_done', {}); - }); - - it('should request POST /todos/1', async () => { - await service.done({ todoId: 1 }); - - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'todos/1/mark_as_done', {}); - }); -}); diff --git a/packages/core/test/unit/resources/Triggers.ts b/packages/core/test/unit/resources/Triggers.ts deleted file mode 100644 index 6967bb07f..000000000 --- a/packages/core/test/unit/resources/Triggers.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { Triggers } from '../../../src'; -import { RequestHelper } from '../../../src/infrastructure'; - -jest.mock( - '../../../src/infrastructure/RequestHelper', - () => require('../../__mocks__/RequestHelper').default, -); - -let service: Triggers; - -beforeEach(() => { - service = new Triggers({ - requesterFn: jest.fn(), - token: 'abcdefg', - requestTimeout: 3000, - }); -}); - -describe('Instantiating Triggers service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Triggers); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - -describe('Triggers.all', () => { - it('should request GET /projects/:id/triggers', async () => { - await service.all(1); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/triggers', undefined); - }); -}); - -describe('Triggers.add', () => { - it('should request POST /projects/:id/triggers', async () => { - await service.add(1); - - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/triggers', undefined); - }); -}); - -describe('Triggers.edit', () => { - it('should request PUT /projects/:id/triggers/:id', async () => { - await service.edit(1, 2, { prop: 5 }); - - expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'projects/1/triggers/2', { - prop: 5, - }); - }); -}); - -describe('Triggers.pipeline', () => { - it('should request PUT /projects/:id/trigger/pipeline with variables', async () => { - await service.pipeline(1, 'main', 'abcd', { variables: { VAR_ONE: 'val' } }); - - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/trigger/pipeline', { - isForm: true, - ref: 'main', - token: 'abcd', - 'variables[VAR_ONE]': 'val', - }); - }); - - it('should request PUT /projects/:id/trigger/pipeline without variables', async () => { - await service.pipeline(1, 'main', 'abcd'); - - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/trigger/pipeline', { - isForm: true, - ref: 'main', - token: 'abcd', - }); - }); -}); - -describe('Triggers.show', () => { - it('should request GET /projects/:id/triggers/:id', async () => { - await service.show(1, 2); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/triggers/2', undefined); - }); -}); - -describe('Triggers.remove', () => { - it('should request DELETE /projects/:id/triggers/:id', async () => { - await service.remove(1, 2); - - expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'projects/1/triggers/2', undefined); - }); -}); diff --git a/packages/core/test/unit/resources/UserEmails.ts b/packages/core/test/unit/resources/UserEmails.ts index 189ef9934..dca1bb278 100644 --- a/packages/core/test/unit/resources/UserEmails.ts +++ b/packages/core/test/unit/resources/UserEmails.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating UserEmails service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(UserEmails); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('UserEmails.all', () => { it('should request GET /user/emails', async () => { await service.all(); diff --git a/packages/core/test/unit/resources/UserGPGKeys.ts b/packages/core/test/unit/resources/UserGPGKeys.ts index 18b44b193..765740ead 100644 --- a/packages/core/test/unit/resources/UserGPGKeys.ts +++ b/packages/core/test/unit/resources/UserGPGKeys.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating UserGPGKeys service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(UserGPGKeys); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('UserGPGKeys.add', () => { it('should request POST user/gpg_keys', async () => { await service.add('key'); diff --git a/packages/core/test/unit/resources/UserSSHKeys.ts b/packages/core/test/unit/resources/UserSSHKeys.ts index 06f35d01e..ae46c2d66 100644 --- a/packages/core/test/unit/resources/UserSSHKeys.ts +++ b/packages/core/test/unit/resources/UserSSHKeys.ts @@ -16,35 +16,13 @@ beforeEach(() => { }); }); -describe('Instantiating UserSSHKeys service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(UserSSHKeys); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('UserSSHKeys.all', () => { - it('should request GET user/keys', async () => { - await service.all({ test: 1 }); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'user/keys', { test: 1 }); - }); - it('should request GET user/keys without options', async () => { await service.all(); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'user/keys', {}); }); - it('should request GET users/:id/keys', async () => { - await service.all({ userId: 1, test: 1 }); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'users/1/keys', { test: 1 }); - }); - it('should request GET users/:id/keys without options', async () => { await service.all({ userId: 1 }); @@ -54,12 +32,12 @@ describe('UserSSHKeys.all', () => { describe('UserSSHKeys.create', () => { it('should request POST user/keys', async () => { - await service.create('title', 'key', { test: 1 }); + await service.create('title', 'key', { expiresAt: 'test' }); expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'user/keys', { title: 'title', key: 'key', - test: 1, + expiresAt: 'test', }); }); @@ -71,52 +49,24 @@ describe('UserSSHKeys.create', () => { key: 'key', }); }); - - it('should request POST users/1/keys', async () => { - await service.create('title', 'key', { userId: 1, test: 1 }); - - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'users/1/keys', { - title: 'title', - key: 'key', - test: 1, - }); - }); }); describe('UserSSHKeys.show', () => { - it('should request GET user/keys', async () => { - await service.show(1, { test: 1 }); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'user/keys/1', { test: 1 }); - }); - - it('should request GET user/keys without options', async () => { + it('should request GET user/keys/:key_id without options', async () => { await service.show(1); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'user/keys/1', {}); }); - - it('should request GET users/1/keys', async () => { - await service.show(1, { userId: 1, test: 1 }); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'users/1/keys/1', { test: 1 }); - }); }); describe('UserSSHKeys.remove', () => { - it('should request DEL user/keys', async () => { - await service.remove(1); - - expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'user/keys/1', {}); - }); - - it('should request DEL user/keys without options', async () => { + it('should request DEL user/keys/:key_id', async () => { await service.remove(1); expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'user/keys/1', {}); }); - it('should request DEL users/1/keys', async () => { + it('should request GET users/1/keys/:key_id', async () => { await service.remove(1, { userId: 1 }); expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'users/1/keys/1', {}); diff --git a/packages/core/test/unit/resources/Users.ts b/packages/core/test/unit/resources/Users.ts index e4f161534..4a930d894 100644 --- a/packages/core/test/unit/resources/Users.ts +++ b/packages/core/test/unit/resources/Users.ts @@ -16,16 +16,6 @@ beforeEach(() => { }); }); -describe('Instantiating Users service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Users); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - describe('Users.all', () => { it('should request GET users', async () => { await service.all(); @@ -34,17 +24,49 @@ describe('Users.all', () => { }); }); -describe('Users.activities', () => { +describe('Users.allActivities', () => { + it('should request GET users', async () => { + await service.allActivities(); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'user/activities', undefined); + }); +}); + +describe('Users.showCurrentUserPreferences', () => { it('should request GET users', async () => { - await service.activities(); + await service.showCurrentUserPreferences(); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'user/preferences', undefined); + }); +}); + +describe('Users.allMemberships', () => { + it('should request GET users/:user_id/memberships', async () => { + await service.allMemberships(1); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'users/1/memberships', undefined); + }); +}); - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'users/activities', undefined); +describe('Users.allFollowing', () => { + it('should request GET users/:user_id/following', async () => { + await service.allFollowing(1); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'users/1/following', undefined); + }); +}); + +describe('Users.allFollowers', () => { + it('should request GET users/:user_id/followers', async () => { + await service.allFollowers(1); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'users/1/followers', undefined); }); }); -describe('Users.projects', () => { +describe('Users.allProjects', () => { it('should request GET users/:id/projects', async () => { - await service.projects(1); + await service.allProjects(1); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'users/1/projects', undefined); }); @@ -66,9 +88,9 @@ describe('Users.create', () => { }); }); -describe('Users.current', () => { +describe('Users.showCurrentUser', () => { it('should request GET user', async () => { - await service.current(); + await service.showCurrentUser(); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'user', undefined); }); @@ -82,24 +104,14 @@ describe('Users.edit', () => { }); }); -describe('Users.events', () => { +describe('Users.allEvents', () => { it('should request GET users/:id/projects', async () => { - await service.events(1); + await service.allEvents(1); expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'users/1/events', undefined); }); }); -describe('Users.search', () => { - it('should request GET users', async () => { - await service.search('Erik Killmonger'); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'users', { - search: 'Erik Killmonger', - }); - }); -}); - describe('Users.show', () => { it('should request GET users/:id', async () => { await service.show(1); @@ -123,13 +135,3 @@ describe('Users.unblock', () => { expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'users/1/unblock', undefined); }); }); - -describe('Users.username', () => { - it('should request GET users', async () => { - await service.username('erikkillmonger'); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'users', { - username: 'erikkillmonger', - }); - }); -}); diff --git a/packages/core/test/unit/resources/Wikis.ts b/packages/core/test/unit/resources/Wikis.ts deleted file mode 100644 index 084b32e70..000000000 --- a/packages/core/test/unit/resources/Wikis.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { RequestHelper } from '../../../src/infrastructure'; -import { Wikis } from '../../../src'; - -jest.mock( - '../../../src/infrastructure/RequestHelper', - () => require('../../__mocks__/RequestHelper').default, -); - -let service: Wikis; - -beforeEach(() => { - service = new Wikis({ - requesterFn: jest.fn(), - token: 'abcdefg', - requestTimeout: 3000, - }); -}); - -describe('Instantiating Wikis service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(Wikis); - expect(service.url).toBeDefined(); - expect(service.rejectUnauthorized).toBeTruthy(); - expect(service.headers).toMatchObject({ 'private-token': 'abcdefg' }); - expect(service.requestTimeout).toBe(3000); - }); -}); - -describe('Wikis.all', () => { - it('should request GET /projects/:id/wikis', async () => { - await service.all(1); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/wikis', undefined); - }); -}); - -describe('Wikis.create', () => { - it('should request POST /projects/:id/wikis', async () => { - await service.create(1); - - expect(RequestHelper.post()).toHaveBeenCalledWith(service, 'projects/1/wikis', undefined); - }); -}); - -describe('Wikis.edit', () => { - it('should request PUT /projects/:id/wikis/:slug', async () => { - await service.edit(1, 'slug'); - - expect(RequestHelper.put()).toHaveBeenCalledWith(service, 'projects/1/wikis/slug', undefined); - }); -}); - -describe('Wikis.show', () => { - it('should request GET /projects/:id/wikis/:slug', async () => { - await service.show(1, 'slug'); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/wikis/slug', undefined); - }); -}); - -describe('Wikis.remove', () => { - it('should request DEL /projects/:id/wikis/:slug', async () => { - await service.remove(1, 'slug'); - - expect(RequestHelper.del()).toHaveBeenCalledWith(service, 'projects/1/wikis/slug', undefined); - }); -}); diff --git a/packages/core/test/unit/templates/ResourceAccessRequests.ts b/packages/core/test/unit/templates/ResourceAccessRequests.ts index e8c151587..38e5d90c2 100644 --- a/packages/core/test/unit/templates/ResourceAccessRequests.ts +++ b/packages/core/test/unit/templates/ResourceAccessRequests.ts @@ -31,13 +31,13 @@ describe('ResourceAccessRequests.all', () => { it('should call the correct url for getting all access requests with a string identifer', async () => { await service.all('5'); - expect(RequestHelper.get()).toBeCalledWith(service, '5/access_requests'); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/access_requests', undefined); }); it('should call the correct url for getting all access requests with a number identifer', async () => { await service.all(5); - expect(RequestHelper.get()).toBeCalledWith(service, '5/access_requests'); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/access_requests', undefined); }); }); @@ -45,13 +45,13 @@ describe('ResourceAccessRequests.request', () => { it('should call the correct url for requesting access requests with a string identifer', async () => { await service.request('5'); - expect(RequestHelper.post()).toBeCalledWith(service, '5/access_requests'); + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/access_requests', undefined); }); it('should call the correct url for requesting access requests with a number identifer', async () => { await service.request(5); - expect(RequestHelper.post()).lastCalledWith(service, '5/access_requests'); + expect(RequestHelper.post()).toHaveBeenLastCalledWith(service, '5/access_requests', undefined); }); }); @@ -59,13 +59,17 @@ describe('ResourceAccessRequests.approve', () => { it('should call the correct url for approving access requests with the resource id and user id', async () => { await service.approve('5', 1); - expect(RequestHelper.post()).toBeCalledWith(service, '5/access_requests/1/approve', undefined); + expect(RequestHelper.post()).toHaveBeenCalledWith( + service, + '5/access_requests/1/approve', + undefined, + ); }); it('should accept the correct access levels', async () => { await service.approve(5, 1, { accessLevel: 20 }); - expect(RequestHelper.post()).toBeCalledWith(service, '5/access_requests/1/approve', { + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/access_requests/1/approve', { accessLevel: 20, }); }); @@ -73,7 +77,7 @@ describe('ResourceAccessRequests.approve', () => { it('should allow for sudo calls', async () => { await service.approve(5, 1, { sudo: 'test' }); - expect(RequestHelper.post()).toBeCalledWith(service, '5/access_requests/1/approve', { + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/access_requests/1/approve', { sudo: 'test', }); }); @@ -83,6 +87,6 @@ describe('ResourceAccessRequests.deny', () => { it('should call the correct url denying access requests with the resource id and user id', async () => { await service.deny('5', 1); - expect(RequestHelper.del()).toBeCalledWith(service, '5/access_requests/1'); + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '5/access_requests/1', undefined); }); }); diff --git a/packages/core/test/unit/templates/ResourceAccessTokens.ts b/packages/core/test/unit/templates/ResourceAccessTokens.ts new file mode 100644 index 000000000..c1d6e14f0 --- /dev/null +++ b/packages/core/test/unit/templates/ResourceAccessTokens.ts @@ -0,0 +1,84 @@ +import { ResourceAccessTokens } from '../../../src/templates'; +import { RequestHelper } from '../../../src/infrastructure'; + +jest.mock( + '../../../src/infrastructure/RequestHelper', + () => require('../../__mocks__/RequestHelper').default, +); + +let service: ResourceAccessTokens; + +beforeEach(() => { + service = new ResourceAccessTokens('resource', { + requesterFn: jest.fn(), + token: 'abcdefg', + }); +}); + +afterEach(() => { + jest.clearAllMocks(); +}); + +describe('Instantiating ResourceAccessTokens service', () => { + it('should create a valid service object', () => { + expect(service).toBeInstanceOf(ResourceAccessTokens); + expect(service.url).toBeDefined(); + expect(service.url).toContain('resource'); + }); +}); + +describe('ResourceAccessTokens.all', () => { + it('should call the correct url for getting all access requests with a string identifer', async () => { + await service.all('5'); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/access_tokens', undefined); + }); + + it('should call the correct url for getting all access requests with a number identifer', async () => { + await service.all(5); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/access_tokens', undefined); + }); +}); + +describe('ResourceAccessTokens.create', () => { + it('should call the correct url for creating access token with a string identifer', async () => { + await service.create('5', 'test', ['api']); + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/access_tokens', { + name: 'test', + scopes: ['api'], + }); + }); + + it('should call the correct url for creating access token with a number identifer', async () => { + await service.create(5, 'test', ['api']); + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/access_tokens', { + name: 'test', + scopes: ['api'], + }); + }); +}); + +describe('ResourceAccessTokens.show', () => { + it('should call the correct url with a string identifer', async () => { + await service.show('5', '6'); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/access_tokens/6', undefined); + }); + + it('should call the correct url for creating access token with a number identifer', async () => { + await service.show(5, 6); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/access_tokens/6', undefined); + }); +}); + +describe('ResourceAccessTokens.revoke', () => { + it('should call the correct url with a string identifer', async () => { + await service.revoke('5', '6'); + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '5/access_tokens/6', undefined); + }); + + it('should call the correct url for creating access token with a number identifer', async () => { + await service.revoke(5, 6); + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '5/access_tokens/6', undefined); + }); +}); diff --git a/packages/core/test/unit/templates/ResourceAwardEmojis.ts b/packages/core/test/unit/templates/ResourceAwardEmojis.ts index e97c3fccb..175b2150f 100644 --- a/packages/core/test/unit/templates/ResourceAwardEmojis.ts +++ b/packages/core/test/unit/templates/ResourceAwardEmojis.ts @@ -9,7 +9,7 @@ jest.mock( let service: ResourceAwardEmojis; beforeEach(() => { - service = new ResourceAwardEmojis('resource', { + service = new ResourceAwardEmojis('resource1', 'resource2', { requesterFn: jest.fn(), token: 'abcdefg', }); @@ -23,7 +23,7 @@ describe('Instantiating ResourceAwardEmojis service', () => { it('should create a valid service object', () => { expect(service).toBeInstanceOf(ResourceAwardEmojis); expect(service.url).toBeDefined(); - expect(service.url).toContain('projects'); + expect(service.url).toContain('resource1'); }); }); @@ -31,7 +31,11 @@ describe('ResourceAwardEmojis.all', () => { it('should call the correct url with a project id, resource id, and note id', async () => { await service.all('5', 6); - expect(RequestHelper.get()).toBeCalledWith(service, '5/resource/6/award_emoji', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + '5/resource2/6/award_emoji', + undefined, + ); }); }); @@ -39,7 +43,7 @@ describe('ResourceAccessRequests.award', () => { it('should call the correct url with a project id, name, resource id', async () => { await service.award('5', 6, 'frank'); - expect(RequestHelper.post()).toBeCalledWith(service, '5/resource/6/award_emoji', { + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/resource2/6/award_emoji', { name: 'frank', }); }); @@ -47,7 +51,7 @@ describe('ResourceAccessRequests.award', () => { it('should allow for sudo calls', async () => { await service.award('5', 6, 'frank', { sudo: 'test' }); - expect(RequestHelper.post()).toBeCalledWith(service, '5/resource/6/award_emoji', { + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/resource2/6/award_emoji', { name: 'frank', sudo: 'test', }); @@ -58,13 +62,17 @@ describe('ResourceAccessRequests.remove', () => { it('should call the correct url with a project id, resource id, award_id', async () => { await service.remove('5', 6, 9); - expect(RequestHelper.del()).toBeCalledWith(service, '5/resource/6/award_emoji/9', undefined); + expect(RequestHelper.del()).toHaveBeenCalledWith( + service, + '5/resource2/6/award_emoji/9', + undefined, + ); }); it('should allow for sudo calls', async () => { await service.remove('5', 6, 9, { sudo: 'test' }); - expect(RequestHelper.del()).toBeCalledWith(service, '5/resource/6/award_emoji/9', { + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '5/resource2/6/award_emoji/9', { sudo: 'test', }); }); @@ -74,13 +82,17 @@ describe('ResourceAccessRequests.show', () => { it('should call the correct url with a project id, resource id, award_id', async () => { await service.show('5', 6, 9); - expect(RequestHelper.get()).toBeCalledWith(service, '5/resource/6/award_emoji/9', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + '5/resource2/6/award_emoji/9', + undefined, + ); }); it('should allow for sudo calls', async () => { await service.show('5', 6, 9, { sudo: 'test' }); - expect(RequestHelper.get()).toBeCalledWith(service, '5/resource/6/award_emoji/9', { + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/resource2/6/award_emoji/9', { sudo: 'test', }); }); diff --git a/packages/core/test/unit/templates/ResourceBadges.ts b/packages/core/test/unit/templates/ResourceBadges.ts index 6c2fda2cf..3a0a191f9 100644 --- a/packages/core/test/unit/templates/ResourceBadges.ts +++ b/packages/core/test/unit/templates/ResourceBadges.ts @@ -29,9 +29,12 @@ describe('Instantiating ResourceBadges service', () => { describe('ResourceBadges.add', () => { it('should call the correct url with a resource id', async () => { - await service.add('5'); + await service.add(5, 'link', 'image'); - expect(RequestHelper.post()).toBeCalledWith(service, '5/badges', undefined); + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/badges', { + linkUrl: 'link', + imageUrl: 'image', + }); }); }); @@ -39,7 +42,7 @@ describe('ResourceBadges.all', () => { it('should call the correct url with a resource id', async () => { await service.all('5'); - expect(RequestHelper.get()).toBeCalledWith(service, '5/badges', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/badges', undefined); }); }); @@ -47,7 +50,7 @@ describe('ResourceBadges.edit', () => { it('should call the correct url with a resource id and badge id', async () => { await service.edit('5', 6); - expect(RequestHelper.put()).toBeCalledWith(service, '5/badges/6', undefined); + expect(RequestHelper.put()).toHaveBeenCalledWith(service, '5/badges/6', undefined); }); }); @@ -55,7 +58,7 @@ describe('ResourceBadges.preview', () => { it('should call the correct url with a resource id, linkUrl and imageUrl', async () => { await service.preview('5', 'https://url.com', 'https://image.com'); - expect(RequestHelper.get()).toBeCalledWith(service, '5/badges/render', { + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/badges/render', { linkUrl: 'https://url.com', imageUrl: 'https://image.com', }); @@ -66,7 +69,7 @@ describe('ResourceBadges.remove', () => { it('should call the correct url with a resource id and badge id', async () => { await service.remove('5', 6); - expect(RequestHelper.del()).toBeCalledWith(service, '5/badges/6', undefined); + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '5/badges/6', undefined); }); }); @@ -74,6 +77,6 @@ describe('ResourceBadges.show', () => { it('should call the correct url with a resource id and badge id', async () => { await service.show('5', 6); - expect(RequestHelper.get()).toBeCalledWith(service, '5/badges/6', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/badges/6', undefined); }); }); diff --git a/packages/core/test/unit/templates/ResourceCustomAttributes.ts b/packages/core/test/unit/templates/ResourceCustomAttributes.ts index e5977dc72..af10e4198 100644 --- a/packages/core/test/unit/templates/ResourceCustomAttributes.ts +++ b/packages/core/test/unit/templates/ResourceCustomAttributes.ts @@ -31,15 +31,15 @@ describe('ResourceCustomAttributes.all', () => { it('should call the correct url with a resource id', async () => { await service.all('5'); - expect(RequestHelper.get()).toBeCalledWith(service, '5/custom_attributes', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/custom_attributes', undefined); }); }); describe('ResourceCustomAttributes.set', () => { it('should call the correct url with a resource id', async () => { - await service.set('5', 6, 'on'); + await service.set('5', '6', 'on'); - expect(RequestHelper.put()).toBeCalledWith(service, '5/custom_attributes/6', { + expect(RequestHelper.put()).toHaveBeenCalledWith(service, '5/custom_attributes/6', { value: 'on', }); }); @@ -47,16 +47,16 @@ describe('ResourceCustomAttributes.set', () => { describe('ResourceCustomAttributes.remove', () => { it('should call the correct url with a resource id and custom attribute id', async () => { - await service.remove('5', 6); + await service.remove('5', '6'); - expect(RequestHelper.del()).toBeCalledWith(service, '5/custom_attributes/6', undefined); + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '5/custom_attributes/6', undefined); }); }); describe('ResourceCustomAttributes.show', () => { it('should call the correct url with a resource id and custom attribute id', async () => { - await service.show('5', 6); + await service.show('5', '6'); - expect(RequestHelper.get()).toBeCalledWith(service, '5/custom_attributes/6', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/custom_attributes/6', undefined); }); }); diff --git a/packages/core/test/unit/templates/ResourceDeployTokens.ts b/packages/core/test/unit/templates/ResourceDeployTokens.ts deleted file mode 100644 index 7fd289a44..000000000 --- a/packages/core/test/unit/templates/ResourceDeployTokens.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { ResourceDeployTokens } from '../../../src/templates'; -import { RequestHelper } from '../../../src/infrastructure'; - -jest.mock( - '../../../src/infrastructure/RequestHelper', - () => require('../../__mocks__/RequestHelper').default, -); - -let service: ResourceDeployTokens; - -beforeEach(() => { - service = new ResourceDeployTokens('resource', { - requesterFn: jest.fn(), - token: 'abcdefg', - }); -}); - -afterEach(() => { - jest.clearAllMocks(); -}); - -describe('Instantiating ResourceDeployTokens service', () => { - it('should create a valid service object', () => { - expect(service).toBeInstanceOf(ResourceDeployTokens); - expect(service.url).toBeDefined(); - expect(service.url).toContain('resource'); - }); -}); - -describe('ResourceDeployTokens.add', () => { - it('should call the correct url with a resource id, token name and scope', async () => { - await service.add('5', 'token', ['read_repository']); - - expect(RequestHelper.post()).toBeCalledWith(service, '5/deploy_tokens', { - name: 'token', - scopes: ['read_repository'], - }); - }); -}); - -describe('ResourceDeployTokens.all', () => { - it('should request GET /deploy_tokens', async () => { - await service.all(); - - expect(RequestHelper.get()).toBeCalledWith(service, 'deploy_tokens', {}); - }); - - it('should request GET /5/deploy_tokens with resourceId', async () => { - await service.all({ resourceId: 5 }); - - expect(RequestHelper.get()).toBeCalledWith(service, '5/deploy_tokens', {}); - }); - - it('should request GET /5/deploy_tokens with groupId', async () => { - await service.all({ groupId: 5 }); - - expect(RequestHelper.get()).toBeCalledWith(service, '5/deploy_tokens', {}); - }); - - it('should request GET /5/deploy_tokens with projectId', async () => { - await service.all({ projectId: 5 }); - - expect(RequestHelper.get()).toBeCalledWith(service, '5/deploy_tokens', {}); - }); -}); - -describe('ResourceDeployTokens.remove', () => { - it('should request DEL /5/deploy_tokens/6', async () => { - await service.remove('5', 6); - - expect(RequestHelper.del()).toBeCalledWith(service, '5/deploy_tokens/6', undefined); - }); -}); diff --git a/packages/core/test/unit/templates/ResourceDiscussions.ts b/packages/core/test/unit/templates/ResourceDiscussions.ts index 66ac1e990..5a7a2aba2 100644 --- a/packages/core/test/unit/templates/ResourceDiscussions.ts +++ b/packages/core/test/unit/templates/ResourceDiscussions.ts @@ -33,7 +33,7 @@ describe('ResourceDiscussions.addNote', () => { '1/resource2/2/discussions/3/notes', { noteId: 4, - query: { + searchParams: { body: 'test', }, }, @@ -45,7 +45,11 @@ describe('ResourceCustomAttributes.all', () => { it('should call the correct url with a resource id', async () => { await service.all(1, 2); - expect(RequestHelper.get()).toBeCalledWith(service, '1/resource2/2/discussions', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + '1/resource2/2/discussions', + undefined, + ); }); }); @@ -54,7 +58,7 @@ describe('ResourceDiscussions.create', () => { await service.create(1, 2, 'test'); expect(RequestHelper.post()).toHaveBeenCalledWith(service, '1/resource2/2/discussions', { - query: { + searchParams: { body: 'test', }, }); @@ -62,28 +66,28 @@ describe('ResourceDiscussions.create', () => { }); describe('ResourceDiscussions.editNote', () => { - it('should PUT request 1/resource2/2/discussions/3/notes/4 with a body=test query parameter', async () => { + it('should PUT request 1/resource2/2/discussions/3/notes/4 with a body=test searchParams parameter', async () => { await service.editNote(1, 2, 3, 4, { body: 'test' }); expect(RequestHelper.put()).toHaveBeenCalledWith( service, '1/resource2/2/discussions/3/notes/4', { - query: { + searchParams: { body: 'test', }, }, ); }); - it('should PUT request 1/resource2/2/discussions/3/notes/4 with empty query parameters and a resolved: true body payload', async () => { + it('should PUT request 1/resource2/2/discussions/3/notes/4 with empty searchParams parameters and a resolved: true body payload', async () => { await service.editNote(1, 2, 3, 4, { resolved: true }); expect(RequestHelper.put()).toHaveBeenCalledWith( service, '1/resource2/2/discussions/3/notes/4', { - query: {}, + searchParams: {}, resolved: true, }, ); diff --git a/packages/core/test/unit/templates/ResourceIssueBoards.ts b/packages/core/test/unit/templates/ResourceIssueBoards.ts index cc539abc9..aa1c492b4 100644 --- a/packages/core/test/unit/templates/ResourceIssueBoards.ts +++ b/packages/core/test/unit/templates/ResourceIssueBoards.ts @@ -31,7 +31,7 @@ describe('ResourceIssueBoards.all', () => { it('should call the correct url with a resource id', async () => { await service.all('5'); - expect(RequestHelper.get()).toBeCalledWith(service, '5/boards', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/boards', undefined); }); }); @@ -39,17 +39,39 @@ describe('ResourceIssueBoards.create', () => { it('should call the correct url with a resource id when given new board name', async () => { await service.create('5', 'todo'); - expect(RequestHelper.post()).toBeCalledWith(service, '5/boards', { + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/boards', { name: 'todo', }); }); }); describe('ResourceIssueBoards.createList', () => { + it('should call the correct url with a resource id, board id', async () => { + await service.createList('5', 6); + + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/boards/6/lists', undefined); + }); + + it('should call the correct url with a resource id, board id and milestoneId', async () => { + await service.createList('5', 6, { milestoneId: 1 }); + + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/boards/6/lists', { + milestoneId: 1, + }); + }); + + it('should call the correct url with a resource id, board id and assigneeId', async () => { + await service.createList('5', 6, { assigneeId: 1 }); + + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/boards/6/lists', { + assigneeId: 1, + }); + }); + it('should call the correct url with a resource id, board id and label id', async () => { - await service.createList('5', 6, 1); + await service.createList('5', 6, { labelId: 1 }); - expect(RequestHelper.post()).toBeCalledWith(service, '5/boards/6/lists', { + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/boards/6/lists', { labelId: 1, }); }); @@ -59,7 +81,7 @@ describe('ResourceIssueBoards.edit', () => { it('should call the correct url with a resource id and board id', async () => { await service.edit('5', 6); - expect(RequestHelper.put()).toBeCalledWith(service, '5/boards/6', undefined); + expect(RequestHelper.put()).toHaveBeenCalledWith(service, '5/boards/6', undefined); }); }); @@ -67,7 +89,7 @@ describe('ResourceIssueBoards.editList', () => { it('should call the correct url with a resource id, board id, label id and position', async () => { await service.editList('5', 6, 1, 2); - expect(RequestHelper.put()).toBeCalledWith(service, '5/boards/6/lists/1', { + expect(RequestHelper.put()).toHaveBeenCalledWith(service, '5/boards/6/lists/1', { position: 2, }); }); @@ -75,9 +97,9 @@ describe('ResourceIssueBoards.editList', () => { describe('ResourceIssueBoards.lists', () => { it('should call the correct url with a resource id and board id', async () => { - await service.lists('5', 6); + await service.allLists('5', 6); - expect(RequestHelper.get()).toBeCalledWith(service, '5/boards/6/lists', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/boards/6/lists', undefined); }); }); @@ -85,7 +107,7 @@ describe('ResourceIssueBoards.remove', () => { it('should call the correct url with a resource id and board id', async () => { await service.remove('5', 6); - expect(RequestHelper.del()).toBeCalledWith(service, '5/boards/6', undefined); + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '5/boards/6', undefined); }); }); @@ -93,7 +115,7 @@ describe('ResourceIssueBoards.removeList', () => { it('should call the correct url with a resource id, board id and list id', async () => { await service.removeList('5', 6, 7); - expect(RequestHelper.del()).toBeCalledWith(service, '5/boards/6/lists/7', undefined); + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '5/boards/6/lists/7', undefined); }); }); @@ -101,7 +123,7 @@ describe('ResourceIssueBoards.show', () => { it('should call the correct url with a resource id and board id', async () => { await service.show('5', 6); - expect(RequestHelper.get()).toBeCalledWith(service, '5/boards/6', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/boards/6', undefined); }); }); @@ -109,6 +131,6 @@ describe('ResourceIssueBoards.showList', () => { it('should call the correct url with a resource id, board id and list id', async () => { await service.showList('5', 6, 7); - expect(RequestHelper.get()).toBeCalledWith(service, '5/boards/6/lists/7', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/boards/6/lists/7', undefined); }); }); diff --git a/packages/core/test/unit/templates/ResourceLabels.ts b/packages/core/test/unit/templates/ResourceLabels.ts index 038d0908b..72e21490c 100644 --- a/packages/core/test/unit/templates/ResourceLabels.ts +++ b/packages/core/test/unit/templates/ResourceLabels.ts @@ -31,7 +31,7 @@ describe('ResourceLabels.all', () => { it('should call the correct url with a resource id', async () => { await service.all('5'); - expect(RequestHelper.get()).toBeCalledWith(service, '5/labels', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/labels', undefined); }); }); @@ -39,7 +39,7 @@ describe('ResourceLabels.create', () => { it('should call the correct url with a resource id', async () => { await service.create('5', 'review', '#888888'); - expect(RequestHelper.post()).toBeCalledWith(service, '5/labels', { + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/labels', { name: 'review', color: '#888888', }); @@ -48,9 +48,9 @@ describe('ResourceLabels.create', () => { describe('ResourceLabels.edit', () => { it('should call the correct url with a resource id and label name', async () => { - await service.edit('5', 'review'); + await service.edit(5, 2, { newName: 'review' }); - expect(RequestHelper.put()).toBeCalledWith(service, '5/labels/review', undefined); + expect(RequestHelper.put()).toHaveBeenCalledWith(service, '5/labels/2', { newName: 'review' }); }); }); @@ -58,7 +58,7 @@ describe('ResourceLabels.remove', () => { it('should call the correct url with a resource id and label name', async () => { await service.remove('5', 'review'); - expect(RequestHelper.del()).toBeCalledWith(service, '5/labels/review', undefined); + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '5/labels/review', undefined); }); }); @@ -66,7 +66,7 @@ describe('ResourceLabels.subscribe', () => { it('should call the correct url with a resource id and label id', async () => { await service.subscribe('5', 6); - expect(RequestHelper.post()).toBeCalledWith(service, '5/issues/6/subscribe', undefined); + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/issues/6/subscribe', undefined); }); }); @@ -74,6 +74,6 @@ describe('ResourceLabels.unsubscribe', () => { it('should call the correct url with a resource id and label id', async () => { await service.unsubscribe('5', 6); - expect(RequestHelper.del()).toBeCalledWith(service, '5/issues/6/unsubscribe', undefined); + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '5/issues/6/unsubscribe', undefined); }); }); diff --git a/packages/core/test/unit/templates/ResourceMembers.ts b/packages/core/test/unit/templates/ResourceMembers.ts index dab67e589..29cb4ebc1 100644 --- a/packages/core/test/unit/templates/ResourceMembers.ts +++ b/packages/core/test/unit/templates/ResourceMembers.ts @@ -31,7 +31,7 @@ describe('ResourceMembers.add', () => { it('should call the correct url for adding a member with a resource id, user id and access level', async () => { await service.add('5', 5, 10); - expect(RequestHelper.post()).toBeCalledWith(service, '5/members', { + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/members', { accessLevel: 10, userId: '5', }); @@ -42,13 +42,13 @@ describe('ResourceMembers.all', () => { it('should call the correct url for getting all members for a resource', async () => { await service.all('5'); - expect(RequestHelper.get()).toBeCalledWith(service, '5/members', {}); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/members', {}); }); it('should call the correct url for getting all members for a resource including inherited ones', async () => { await service.all('5', { includeInherited: true }); - expect(RequestHelper.get()).toBeCalledWith(service, '5/members/all', {}); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/members/all', {}); }); }); @@ -56,7 +56,7 @@ describe('ResourceMembers.edit', () => { it('should call the correct url for editing a member with a resource id, user id and access level', async () => { await service.edit('5', 5, 10); - expect(RequestHelper.put()).toBeCalledWith(service, '5/members/5', { + expect(RequestHelper.put()).toHaveBeenCalledWith(service, '5/members/5', { accessLevel: 10, }); }); @@ -66,13 +66,13 @@ describe('ResourceMembers.show', () => { it('should call the correct url for showing a member with a resource id, and user id', async () => { await service.show('5', 5); - expect(RequestHelper.get()).toBeCalledWith(service, '5/members/5', {}); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/members/5', {}); }); it('should call the correct url for showing a member with a resource id, and user id, including inherited ones', async () => { await service.show('5', 5, { includeInherited: true }); - expect(RequestHelper.get()).toBeCalledWith(service, '5/members/all/5', {}); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/members/all/5', {}); }); }); @@ -80,6 +80,6 @@ describe('ResourceMembers.remove', () => { it('should call the correct url for removing a member with a resource id, and user id', async () => { await service.remove('5', 5); - expect(RequestHelper.del()).toBeCalledWith(service, '5/members/5', undefined); + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '5/members/5', undefined); }); }); diff --git a/packages/core/test/unit/templates/ResourceMilestones.ts b/packages/core/test/unit/templates/ResourceMilestones.ts index a5358f9d2..8c2d703f0 100644 --- a/packages/core/test/unit/templates/ResourceMilestones.ts +++ b/packages/core/test/unit/templates/ResourceMilestones.ts @@ -31,7 +31,7 @@ describe('ResourceMilestones.all', () => { it('should call the correct url with a resource id', async () => { await service.all('5'); - expect(RequestHelper.get()).toBeCalledWith(service, '5/milestones', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/milestones', undefined); }); }); @@ -39,7 +39,7 @@ describe('ResourceMilestones.create', () => { it('should call the correct url with a resource id', async () => { await service.create('5', 'sprint'); - expect(RequestHelper.post()).toBeCalledWith(service, '5/milestones', { title: 'sprint' }); + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/milestones', { title: 'sprint' }); }); }); @@ -47,23 +47,27 @@ describe('ResourceMilestones.edit', () => { it('should call the correct url with a resource id and milestone id', async () => { await service.edit('5', 6); - expect(RequestHelper.put()).toBeCalledWith(service, '5/milestones/6', undefined); + expect(RequestHelper.put()).toHaveBeenCalledWith(service, '5/milestones/6', undefined); }); }); -describe('ResourceMilestones.issues', () => { +describe('ResourceMilestones.allAssignedIssues', () => { it('should call the correct url with a resource id', async () => { - await service.issues('5', 6); + await service.allAssignedIssues('5', 6); - expect(RequestHelper.get()).toBeCalledWith(service, '5/milestones/6/issues', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/milestones/6/issues', undefined); }); }); -describe('ResourceMilestones.mergeRequests', () => { +describe('ResourceMilestones.allAssignedMergeRequests', () => { it('should call the correct url with a resource id', async () => { - await service.mergeRequests('5', 6); + await service.allAssignedMergeRequests('5', 6); - expect(RequestHelper.get()).toBeCalledWith(service, '5/milestones/6/merge_requests', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + '5/milestones/6/merge_requests', + undefined, + ); }); }); @@ -71,6 +75,6 @@ describe('ResourceMilestones.show', () => { it('should call the correct url with a resource id and milestone id', async () => { await service.show('5', 6); - expect(RequestHelper.get()).toBeCalledWith(service, '5/milestones/6', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/milestones/6', undefined); }); }); diff --git a/packages/core/test/unit/templates/ResourceNoteAwardEmojis.ts b/packages/core/test/unit/templates/ResourceNoteAwardEmojis.ts index 0f9ce03c5..2154af4b0 100644 --- a/packages/core/test/unit/templates/ResourceNoteAwardEmojis.ts +++ b/packages/core/test/unit/templates/ResourceNoteAwardEmojis.ts @@ -31,7 +31,7 @@ describe('ResourceNoteAwardEmojis.all', () => { it('should call the correct url with a project id, resource id, and note id', async () => { await service.all('5', 6, 7); - expect(RequestHelper.get()).toBeCalledWith( + expect(RequestHelper.get()).toHaveBeenCalledWith( service, '5/resource/6/notes/7/award_emoji', undefined, @@ -43,7 +43,7 @@ describe('ResourceAccessRequests.award', () => { it('should call the correct url with a project id, name, resource id, and note id', async () => { await service.award('5', 6, 7, 'frank'); - expect(RequestHelper.post()).toBeCalledWith(service, '5/resource/6/notes/7/award_emoji', { + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/resource/6/notes/7/award_emoji', { name: 'frank', }); }); @@ -51,7 +51,7 @@ describe('ResourceAccessRequests.award', () => { it('should allow for sudo calls', async () => { await service.award('5', 6, 7, 'frank', { sudo: 'test' }); - expect(RequestHelper.post()).toBeCalledWith(service, '5/resource/6/notes/7/award_emoji', { + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/resource/6/notes/7/award_emoji', { name: 'frank', sudo: 'test', }); @@ -62,7 +62,7 @@ describe('ResourceAccessRequests.remove', () => { it('should call the correct url with a project id, resource id, award_id, and note id', async () => { await service.remove('5', 6, 7, 9); - expect(RequestHelper.del()).toBeCalledWith( + expect(RequestHelper.del()).toHaveBeenCalledWith( service, '5/resource/6/notes/7/award_emoji/9', undefined, @@ -72,9 +72,13 @@ describe('ResourceAccessRequests.remove', () => { it('should allow for sudo calls', async () => { await service.remove('5', 6, 7, 9, { sudo: 'test' }); - expect(RequestHelper.del()).toBeCalledWith(service, '5/resource/6/notes/7/award_emoji/9', { - sudo: 'test', - }); + expect(RequestHelper.del()).toHaveBeenCalledWith( + service, + '5/resource/6/notes/7/award_emoji/9', + { + sudo: 'test', + }, + ); }); }); @@ -82,7 +86,7 @@ describe('ResourceAccessRequests.show', () => { it('should call the correct url with a project id, resource id, award_id, and note id', async () => { await service.show('5', 6, 7, 9); - expect(RequestHelper.get()).toBeCalledWith( + expect(RequestHelper.get()).toHaveBeenCalledWith( service, '5/resource/6/notes/7/award_emoji/9', undefined, @@ -92,8 +96,12 @@ describe('ResourceAccessRequests.show', () => { it('should allow for sudo calls', async () => { await service.show('5', 6, 7, 9, { sudo: 'test' }); - expect(RequestHelper.get()).toBeCalledWith(service, '5/resource/6/notes/7/award_emoji/9', { - sudo: 'test', - }); + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + '5/resource/6/notes/7/award_emoji/9', + { + sudo: 'test', + }, + ); }); }); diff --git a/packages/core/test/unit/templates/ResourceNotes.ts b/packages/core/test/unit/templates/ResourceNotes.ts index 1e0a05f58..7c91f78fe 100644 --- a/packages/core/test/unit/templates/ResourceNotes.ts +++ b/packages/core/test/unit/templates/ResourceNotes.ts @@ -31,7 +31,7 @@ describe('ResourceNotes.all', () => { it('should call the correct url', async () => { await service.all(4, 5); - expect(RequestHelper.get()).toBeCalledWith(service, '4/resource2/5/notes', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '4/resource2/5/notes', undefined); }); }); @@ -39,7 +39,7 @@ describe('ResourceNotes.create', () => { it('should call the correct url creating a note', async () => { await service.create(4, 5, 'test'); - expect(RequestHelper.post()).toBeCalledWith(service, '4/resource2/5/notes', { + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '4/resource2/5/notes', { body: 'test', }); }); @@ -47,9 +47,9 @@ describe('ResourceNotes.create', () => { describe('ResourceNotes.edit', () => { it('should call correct url for editing a note', async () => { - await service.edit(4, 5, 6, 'test'); + await service.edit(4, 5, 6, { body: 'test' }); - expect(RequestHelper.put()).toBeCalledWith(service, '4/resource2/5/notes/6', { + expect(RequestHelper.put()).toHaveBeenCalledWith(service, '4/resource2/5/notes/6', { body: 'test', }); }); @@ -59,7 +59,7 @@ describe('ResourceNotes.show', () => { it('should call correct url for showing a note', async () => { await service.show(4, 5, 6); - expect(RequestHelper.get()).toBeCalledWith(service, '4/resource2/5/notes/6', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '4/resource2/5/notes/6', undefined); }); }); @@ -67,6 +67,6 @@ describe('ResourceNotes.remove', () => { it('should call correct url for removing a note', async () => { await service.remove(4, 5, 6); - expect(RequestHelper.del()).toBeCalledWith(service, '4/resource2/5/notes/6', undefined); + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '4/resource2/5/notes/6', undefined); }); }); diff --git a/packages/core/test/unit/templates/ResourceTemplates.ts b/packages/core/test/unit/templates/ResourceTemplates.ts index 4fb8b0291..0a7204725 100644 --- a/packages/core/test/unit/templates/ResourceTemplates.ts +++ b/packages/core/test/unit/templates/ResourceTemplates.ts @@ -31,7 +31,7 @@ describe('ResourceTemplates.all', () => { it('should call the correct url', async () => { await service.all(); - expect(RequestHelper.get()).toBeCalledWith(service, '', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '', undefined); }); }); @@ -39,6 +39,6 @@ describe('ResourceTemplates.show', () => { it('should call the correct url with a resource id', async () => { await service.show(6); - expect(RequestHelper.get()).toBeCalledWith(service, '6', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '6', undefined); }); }); diff --git a/packages/core/test/unit/templates/ResourceVariables.ts b/packages/core/test/unit/templates/ResourceVariables.ts index 733307537..6108b9d00 100644 --- a/packages/core/test/unit/templates/ResourceVariables.ts +++ b/packages/core/test/unit/templates/ResourceVariables.ts @@ -31,23 +31,28 @@ describe('ResourceVariables.all', () => { it('should call the correct url with a resource id', async () => { await service.all('5'); - expect(RequestHelper.get()).toBeCalledWith(service, '5/variables', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/variables', undefined); }); }); describe('ResourceVariables.create', () => { it('should call the correct url with a resource id', async () => { - await service.create('5'); + await service.create('5', 'key', 'value'); - expect(RequestHelper.post()).toBeCalledWith(service, '5/variables', undefined); + expect(RequestHelper.post()).toHaveBeenCalledWith(service, '5/variables', { + key: 'key', + value: 'value', + }); }); }); describe('ResourceVariables.edit', () => { - it('should call the correct url with a resource id and key id', async () => { - await service.edit('5', '6'); + it('should call the correct url with a resource id and key', async () => { + await service.edit('5', 'key', 'value'); - expect(RequestHelper.put()).toBeCalledWith(service, '5/variables/6', undefined); + expect(RequestHelper.put()).toHaveBeenCalledWith(service, '5/variables/key', { + value: 'value', + }); }); }); @@ -55,7 +60,7 @@ describe('ResourceVariables.remove', () => { it('should call the correct url with a resource id and key id', async () => { await service.remove('5', '6'); - expect(RequestHelper.del()).toBeCalledWith(service, '5/variables/6', undefined); + expect(RequestHelper.del()).toHaveBeenCalledWith(service, '5/variables/6', undefined); }); }); @@ -63,6 +68,6 @@ describe('ResourceVariables.show', () => { it('should call the correct url with a resource id and key id', async () => { await service.show('5', '6'); - expect(RequestHelper.get()).toBeCalledWith(service, '5/variables/6', undefined); + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/variables/6', undefined); }); }); diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index f4467cd87..3b8abba79 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "dist", - "declaration": true, - "declarationDir": "dist/types" + "paths": { + "@gitbeaker/*": ["../*/src"] + } }, - "include": ["src"] + "include": ["./**/*.ts"] } diff --git a/packages/node/CHANGELOG.md b/packages/node/CHANGELOG.md deleted file mode 100644 index d09d13dc3..000000000 --- a/packages/node/CHANGELOG.md +++ /dev/null @@ -1,766 +0,0 @@ -# v35.8.0 (Wed Nov 16 2022) - -#### 🔩 Dependency Updates - -- Bump @types/node from 17.0.15 to 18.0.3 [#2586](https://github.com/jdalrymple/gitbeaker/pull/2586) ([@dependabot[bot]](https://github.com/dependabot[bot])) -- Bump jest-extended from 1.2.0 to 3.0.0 [#2590](https://github.com/jdalrymple/gitbeaker/pull/2590) ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### Authors: 1 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) - ---- - -# v35.6.1 (Mon Jul 11 2022) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Karl Haworth ([@karlhaworth](https://github.com/karlhaworth)), for all your work! - -#### 👷🏼‍♀️ Technical Debt - -- fix: unpin got dependency [#2572](https://github.com/jdalrymple/gitbeaker/pull/2572) ([@karlhaworth](https://github.com/karlhaworth)) - -#### Authors: 1 - -- Karl Haworth ([@karlhaworth](https://github.com/karlhaworth)) - ---- - -# v35.3.0 (Sat Feb 05 2022) - -#### 🐛 Bug Fix - -- Set the minimum supported node version [#2353](https://github.com/jdalrymple/gitbeaker/pull/2353) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v35.2.0 (Sat Feb 05 2022) - -#### 🐛 Bug Fix - -- Bump got from 11.8.3 to 12.0.0 in /packages/node ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### ⚠️ Pushed to `master` - -- Downgrade got until ESM ready ([@jdalrymple](https://github.com/jdalrymple)) -- Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/got-12.0.0' ([@jdalrymple](https://github.com/jdalrymple)) -- Bump got from 11.8.3 to 12.0.0 ([@dependabot[bot]](https://github.com/dependabot[bot])) -- Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/rollup-2.61.1' ([@jdalrymple](https://github.com/jdalrymple)) -- Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/qs-6.10.2' ([@jdalrymple](https://github.com/jdalrymple)) -- Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/packages/requester-utils/types/node-17.0.0' ([@jdalrymple](https://github.com/jdalrymple)) -- Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/packages/node/types/node-17.0.0' ([@jdalrymple](https://github.com/jdalrymple)) -- Bump @types/node from 16.11.14 to 17.0.0 in /packages/node ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### 🔩 Dependency Updates - -- Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/jest-27.4.5' [#2287](https://github.com/jdalrymple/gitbeaker/pull/2287) ([@jdalrymple](https://github.com/jdalrymple)) -- Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/auto-10.32.5' [#2288](https://github.com/jdalrymple/gitbeaker/pull/2288) ([@jdalrymple](https://github.com/jdalrymple)) -- Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/prettier-2.5.1' [#2261](https://github.com/jdalrymple/gitbeaker/pull/2261) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 2 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v34.7.0 (Tue Nov 30 2021) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Martin Howarth ([@MartinHowarth](https://github.com/MartinHowarth)), for all your work! - -#### 💥 Feature - -- Add support for CI lint with namespace context [#2222](https://github.com/jdalrymple/gitbeaker/pull/2222) ([@MartinHowarth](https://github.com/MartinHowarth) [@jdalrymple](https://github.com/jdalrymple)) - -#### 🐛 Bug Fix - -- Fix lintWithNamespace integration test [#2247](https://github.com/jdalrymple/gitbeaker/pull/2247) ([@MartinHowarth](https://github.com/MartinHowarth)) - -#### 🔩 Dependency Updates - -- Bump rollup-plugin-typescript2 from 0.30.0 to 0.31.1 [#2229](https://github.com/jdalrymple/gitbeaker/pull/2229) ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### Authors: 3 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) -- Martin Howarth ([@MartinHowarth](https://github.com/MartinHowarth)) - ---- - -# v34.5.0 (Fri Nov 05 2021) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Martin Howarth ([@MartinHowarth](https://github.com/MartinHowarth)), for all your work! - -#### 💥 Feature - -- Add ability to request merged_yaml from the Gitlab Lint API [#2185](https://github.com/jdalrymple/gitbeaker/pull/2185) ([@MartinHowarth](https://github.com/MartinHowarth) [@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 2 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) -- Martin Howarth ([@MartinHowarth](https://github.com/MartinHowarth)) - ---- - -# v34.3.0 (Sun Oct 17 2021) - -#### 🐛 Bug Fix - -- Fix the typing for the supported links functions [#2154](https://github.com/jdalrymple/gitbeaker/pull/2154) ([@jdalrymple](https://github.com/jdalrymple)) -- Circleci editor/circleci project setup [#2124](https://github.com/jdalrymple/gitbeaker/pull/2124) ([@jdalrymple](https://github.com/jdalrymple)) - -#### 🔩 Dependency Updates - -- Bump jest-extended from 0.11.5 to 1.0.0 in /packages/node [#2139](https://github.com/jdalrymple/gitbeaker/pull/2139) ([@dependabot[bot]](https://github.com/dependabot[bot]) [@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 2 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v34.2.0 (Sat Sep 18 2021) - -#### 🔩 Dependency Updates - -- Bump openpgp from 4.10.10 to 5.0.0 [#2053](https://github.com/jdalrymple/gitbeaker/pull/2053) ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### Authors: 1 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) - ---- - -# v32.3.0 (Fri Aug 27 2021) - -#### 🐛 Bug Fix - -- Adding a core integration test, and fixing the resource imports [#2039](https://github.com/jdalrymple/gitbeaker/pull/2039) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v32.1.1 (Mon Aug 09 2021) - -#### 👷🏼‍♀️ Technical Debt - -- Improved mime handling [#1979](https://github.com/jdalrymple/gitbeaker/pull/1979) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v31.1.0 (Tue Jul 27 2021) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Aliyss Snow ([@Aliyss](https://github.com/Aliyss)), for all your work! - -#### 💥 Feature - -- Added RepositorySubmodules.ts [#1931](https://github.com/jdalrymple/gitbeaker/pull/1931) ([@Aliyss](https://github.com/Aliyss) [@jdalrymple](https://github.com/jdalrymple)) - -#### 🔩 Dependency Updates - -- Bump @types/node from 15.14.0 to 16.0.0 [#1914](https://github.com/jdalrymple/gitbeaker/pull/1914) ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### Authors: 3 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) -- Aliyss Snow ([@Aliyss](https://github.com/Aliyss)) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v31.0.0 (Mon Jul 05 2021) - -#### 💥 Breaking Change - -- Expose typing to consumer and remove export complexity [#1818](https://github.com/jdalrymple/gitbeaker/pull/1818) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v30.0.0 (Mon Jun 07 2021) - -#### 💥 Breaking Change - -- Package Registry Support [#1822](https://github.com/jdalrymple/gitbeaker/pull/1822) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v29.3.0 (Mon Jun 07 2021) - -#### 🐛 Bug Fix - -- Revert build system changes [#1851](https://github.com/jdalrymple/gitbeaker/pull/1851) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v29.2.4 (Sun May 30 2021) - -#### 🐛 Bug Fix - -- Updating browser build and testing [#1780](https://github.com/jdalrymple/gitbeaker/pull/1780) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v29.2.2 (Sat May 29 2021) - -#### ⚠️ Pushed to `master` - -- Merge remote-tracking branch 'origin/master' ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v29.2.1 (Sat May 29 2021) - -#### 🔩 Dependency Updates - -- Bump ts-node from 9.1.1 to 10.0.0 [#1798](https://github.com/jdalrymple/gitbeaker/pull/1798) ([@dependabot[bot]](https://github.com/dependabot[bot])) - -#### Authors: 1 - -- [@dependabot[bot]](https://github.com/dependabot[bot]) - ---- - -# v29.2.0 (Tue May 18 2021) - -#### 🔩 Dependency Updates - -- Updating all dependencies [#1775](https://github.com/jdalrymple/gitbeaker/pull/1775) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v29.0.0 (Fri May 14 2021) - -#### 💥 Breaking Change - -- Update service typing and peripheral endpoints [#1768](https://github.com/jdalrymple/gitbeaker/pull/1768) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v28.4.0 (Tue May 04 2021) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump @types/node from 14.14.41 to 15.0.1 [#1719](https://github.com/jdalrymple/gitbeaker/pull/1719) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 1 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) - ---- - -# v28.2.0 (Sat Mar 20 2021) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Vojtěch Sajdl ([@Pryx](https://github.com/Pryx)), for all your work! - -#### 🐛 Bug Fix - -- Fix #1624 - Fixed mime type handling [#1633](https://github.com/jdalrymple/gitbeaker/pull/1633) ([@Pryx](https://github.com/Pryx)) -- Linting \[skip ci\] ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 2 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) -- Vojtěch Sajdl ([@Pryx](https://github.com/Pryx)) - ---- - -# v28.1.0 (Sun Mar 14 2021) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Clemens Lieb ([@Vogel612](https://github.com/Vogel612)), for all your work! - -#### 🐛 Bug Fix - -- Rewrite HTTP method for `stream` requests in GotRequester [#1602](https://github.com/jdalrymple/gitbeaker/pull/1602) ([@Vogel612](https://github.com/Vogel612)) -- Package updates to fix build pipeline \[skip ci\] ([@jdalrymple](https://github.com/jdalrymple)) -- Merge remote-tracking branch 'origin/stash' \[skip ci\] ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 2 - -- Clemens Lieb ([@Vogel612](https://github.com/Vogel612)) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v28.0.4 (Mon Jan 25 2021) - -#### ⚠️ Pushed to `master` - -- Merge branch 'extend-probe-check' ([@jdalrymple](https://github.com/jdalrymple)) -- Add unique test id and add retry to integration builds ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v28.0.3 (Sun Jan 24 2021) - -#### 🐛 Bug Fix - -- Remove possibility of char type information polluting check of content-type [#1467](https://github.com/jdalrymple/gitbeaker/pull/1467) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# vnull (Sun Jan 03 2021) - -#### ⚠️ Pushed to `master` - -- Merge remote-tracking branch 'origin/master' ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v27.0.0 (Fri Dec 18 2020) - -#### 💥 Breaking Change - -- Removed circular references [#1387](https://github.com/jdalrymple/gitbeaker/pull/1387) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v26.0.0 (Sun Dec 06 2020) - -#### 💥 Breaking Change - -- Export the APIMap through a compile-time replacement [#1352](https://github.com/jdalrymple/gitbeaker/pull/1352) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v25.5.0 (Sun Nov 29 2020) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump rollup-plugin-typescript2 from 0.28.0 to 0.29.0 [#1324](https://github.com/jdalrymple/gitbeaker/pull/1324) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 1 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) - ---- - -# v25.1.0 (Tue Oct 20 2020) - -#### 🐛 Bug Fix - -- RejectUnauthorized being set incorrectly for the NodeJS release [#1252](https://github.com/jdalrymple/gitbeaker/pull/1252) ([@jdalrymple](https://github.com/jdalrymple)) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump rollup-plugin-typescript2 from 0.27.3 to 0.28.0 [#1248](https://github.com/jdalrymple/gitbeaker/pull/1248) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 2 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v25.0.0 (Thu Oct 15 2020) - -#### 💥 Breaking Change - -- Add approval rule management [#1233](https://github.com/jdalrymple/gitbeaker/pull/1233) ([@nlochschmidt](https://github.com/nlochschmidt)) - -#### Authors: 1 - -- Niklas Lochschmidt ([@nlochschmidt](https://github.com/nlochschmidt)) - ---- - -# v24.3.0 (Thu Oct 15 2020) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Niklas Lochschmidt ([@nlochschmidt](https://github.com/nlochschmidt)), for all your work! - -#### 💥 Feature - -- Add support for Freeze Periods [#1231](https://github.com/jdalrymple/gitbeaker/pull/1231) ([@nlochschmidt](https://github.com/nlochschmidt) [@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 2 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) -- Niklas Lochschmidt ([@nlochschmidt](https://github.com/nlochschmidt)) - ---- - -# v24.1.0 (Mon Oct 12 2020) - -#### 🐛 Bug Fix - -- Agent-Type error for GotRequester [#1224](https://github.com/jdalrymple/gitbeaker/pull/1224) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v24.0.3 (Mon Oct 12 2020) - -#### 🐛 Bug Fix - -- Merge branch '1222-integration-stability' \[skip ci\] ([@jdalrymple](https://github.com/jdalrymple)) - -#### ⚠️ Pushed to `master` - -- perform retries on a wider range of error codes ([@jdalrymple](https://github.com/jdalrymple)) -- Wrapping error messages to avoid JSON.parse non json responses ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# vnull (Sun Oct 11 2020) - -#### 🐛 Bug Fix - -- Locate 400 test error \[skip ci\] ([@jdalrymple](https://github.com/jdalrymple)) - -#### ⚠️ Pushed to `master` - -- Merge branch '1222-integration-stability' ([@jdalrymple](https://github.com/jdalrymple)) -- Embedding project creation prior to upload ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# vnull (Sun Oct 11 2020) - -#### 🐛 Bug Fix - -- Adding pagination tests [#1186](https://github.com/jdalrymple/gitbeaker/pull/1186) ([@jdalrymple](https://github.com/jdalrymple)) - -#### ⚠️ Pushed to `master` - -- Merge branch '1222-integration-stability' ([@jdalrymple](https://github.com/jdalrymple)) -- Skip pagination tests until stability is sorted ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v24.0.0 (Mon Oct 05 2020) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Sander Cox ([@sandercox](https://github.com/sandercox)), for all your work! - -#### 💥 Feature - -- feat: Get runners for a group [#1182](https://github.com/jdalrymple/gitbeaker/pull/1182) ([@sandercox](https://github.com/sandercox) [@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 2 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) -- Sander Cox ([@sandercox](https://github.com/sandercox)) - ---- - -# v23.7.0 (Tue Sep 29 2020) - -#### 🐛 Bug Fix - -- Updating changelog \[skip ci\] ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v23.6.0 (Mon Sep 28 2020) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, xieyu ([@Gkxie](https://github.com/Gkxie)), for all your work! - -#### 🚀 Enhancement - -- Restructuring the requester utils and update the related typings [#1163](https://github.com/jdalrymple/gitbeaker/pull/1163) ([@jdalrymple](https://github.com/jdalrymple)) -- Updating terser usage to be only on the browser release [#1163](https://github.com/jdalrymple/gitbeaker/pull/1163) ([@jdalrymple](https://github.com/jdalrymple)) - -#### 💥 Feature - -- Apply exponential backoff for 429 errors ([@max-wittig](https://github.com/max-wittig)) - -#### 🐛 Bug Fix - -- fix(node): Error response body needs parsing first when it's type is json [#1057](https://github.com/jdalrymple/gitbeaker/pull/1057) ([@Gkxie](https://github.com/Gkxie) [@jdalrymple](https://github.com/jdalrymple)) - -#### 🔩 Dependency Updates - -- chore(deps-dev): bump typescript from 3.9.7 to 4.0.3 [#1163](https://github.com/jdalrymple/gitbeaker/pull/1163) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) -- Update ts-node [#1163](https://github.com/jdalrymple/gitbeaker/pull/1163) ([@jdalrymple](https://github.com/jdalrymple)) -- Updating node deps [#1163](https://github.com/jdalrymple/gitbeaker/pull/1163) ([@jdalrymple](https://github.com/jdalrymple)) -- Updating openpgp [#1163](https://github.com/jdalrymple/gitbeaker/pull/1163) ([@jdalrymple](https://github.com/jdalrymple)) -- chore(deps-dev): bump rollup-plugin-terser from 6.1.0 to 7.0.0 [#1058](https://github.com/jdalrymple/gitbeaker/pull/1058) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) [@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 4 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) -- Max Wittig ([@max-wittig](https://github.com/max-wittig)) -- xieyu ([@Gkxie](https://github.com/Gkxie)) - ---- - -# v23.5.0 (Sun Aug 09 2020) - -#### 🐛 Bug Fix - -- Fixing check for FormData [#1056](https://github.com/jdalrymple/gitbeaker/pull/1056) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v23.4.0 (Sun Jul 12 2020) - -#### 🐛 Bug Fix - -- Updating min node version supported [#957](https://github.com/jdalrymple/gitbeaker/pull/957) ([@jdalrymple](https://github.com/jdalrymple)) -- Fixing encoding for requests of archive data [#954](https://github.com/jdalrymple/gitbeaker/pull/954) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v22.0.0 (Sat Jun 20 2020) - -#### 💥 Breaking Change - -- Reach > 90% coverage and add Integration Testing [#709](https://github.com/jdalrymple/gitbeaker/pull/709) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v21.6.0 (Tue Jun 16 2020) - -#### 🐛 Bug Fix - -- Removal of esinterlop to prefer namespace imports over default exports [#893](https://github.com/jdalrymple/gitbeaker/pull/893) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v21.4.0 (Sun Jun 14 2020) - -#### 🐛 Bug Fix - -- Updating Changelog.md \[skip ci\] ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v21.3.0 (Sun Jun 14 2020) - -#### 🐛 Bug Fix - -- Bump version to: 21.3.0 \[skip ci\] ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v21.2.0 (Sun Jun 14 2020) - -#### 🐛 Bug Fix - -- Fixing missing CLI tests and modifyServices function [#886](https://github.com/jdalrymple/gitbeaker/pull/886) ([@jdalrymple](https://github.com/jdalrymple)) -- Fixing package versions \[skip ci\] ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v21.0.1 (Fri Jun 12 2020) - -#### 👷🏼‍♀️ Technical Debt - -- Remove Gitlab Instance dependency for CLI tests [#883](https://github.com/jdalrymple/gitbeaker/pull/883) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v19.6.0 (Sat May 16 2020) - -#### 🔩 Dependencies - -- chore(deps-dev): bump @types/node from 13.13.5 to 14.0.1 [#790](https://github.com/jdalrymple/gitbeaker/pull/790) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 1 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) - ---- - -# v19.2.0 (Wed Apr 29 2020) - -:tada: This release contains work from a new contributor! :tada: - -Thank you, Daniel Moore ([@danielmoore](https://github.com/danielmoore)), for all your work! - -#### 🐛 Bug Fix - -- Add types field to node and browser package.json [#737](https://github.com/jdalrymple/gitbeaker/pull/737) ([@danielmoore](https://github.com/danielmoore)) - -#### Authors: 1 - -- Daniel Moore ([@danielmoore](https://github.com/danielmoore)) - ---- - -# v19.0.0 (Thu Apr 23 2020) - -#### 💥 Breaking Change - -- Adding CLI Integration Tests and Preferring named exports [#711](https://github.com/jdalrymple/gitbeaker/pull/711) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v18.2.0 (Wed Apr 22 2020) - -#### 🐛 Bug Fix - -- Updating agent property based on new changes in Got [#712](https://github.com/jdalrymple/gitbeaker/pull/712) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v18.1.0 (Wed Apr 22 2020) - -#### 🚀 Enhancement - -- Adding integration tests for the browser usage [#697](https://github.com/jdalrymple/gitbeaker/pull/697) ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v18.0.0 (Tue Apr 21 2020) - -#### 🐛 Bug Fix - -- Testing with verbose logs ([@jdalrymple](https://github.com/jdalrymple)) -- docs: Updating README badges ([@jdalrymple](https://github.com/jdalrymple)) - -#### Authors: 1 - -- Justin Dalrymple ([@jdalrymple](https://github.com/jdalrymple)) - ---- - -# v17.0.2 (Sun Apr 19 2020) - -#### 🔩 Dependencies - -- chore(deps-dev): bump rollup-plugin-typescript2 from 0.26.0 to 0.27.0 [#654](https://github.com/jdalrymple/gitbeaker/pull/654) ([@dependabot-preview[bot]](https://github.com/dependabot-preview[bot])) - -#### Authors: 1 - -- [@dependabot-preview[bot]](https://github.com/dependabot-preview[bot]) diff --git a/packages/node/README.md b/packages/node/README.md deleted file mode 100644 index 2de3069c6..000000000 --- a/packages/node/README.md +++ /dev/null @@ -1,39 +0,0 @@ -

-
- gitbeaker -
-
-

- - CircleCI Pipeline Status - - - Code Climate maintainability - - - CodeCov test coverage - - - Dependency Status - - - Dev Dependency Status - - - Auto - - - All Contributors - -Prettier - - Licence: MIT - - - Install Size: Node - -

- -🤖 [GitLab](https://gitlab.com/gitlab-org/gitlab/) API NodeJS library with full support of all the [Gitlab API](https://gitlab.com/gitlab-org/gitlab/tree/master/doc/api) services. - -[Read More](https://github.com/jdalrymple/gitbeaker#readme) diff --git a/packages/node/jest.config.js b/packages/node/jest.config.js deleted file mode 100644 index 0cf54ef05..000000000 --- a/packages/node/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -const base = require('../../jest.config.base'); - -module.exports = { - ...base, - displayName: 'Gitbeaker Node', -}; diff --git a/packages/node/package.json b/packages/node/package.json deleted file mode 100644 index c9063d1e8..000000000 --- a/packages/node/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "@gitbeaker/node", - "description": "Full NodeJS implementation of the GitLab API. Supports Promises, Async/Await.", - "version": "35.8.0", - "author": { - "name": "Justin Dalrymple" - }, - "bugs": { - "url": "https://github.com/jdalrymple/gitbeaker/issues" - }, - "dependencies": { - "@gitbeaker/core": "^35.8.0", - "@gitbeaker/requester-utils": "^35.8.0", - "delay": "^5.0.0", - "got": "^11.8.3", - "xcase": "^2.0.1" - }, - "devDependencies": { - "@rollup/plugin-json": "^4.1.0", - "@types/node": "^18.0.3", - "form-data": "^4.0.0", - "jest-extended": "^3.0.0", - "openpgp": "^5.0.0", - "rollup": "^2.47.0", - "rollup-plugin-typescript2": "^0.31.1", - "tslib": "^2.3.1", - "typescript": "^4.2.4", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.2.0" - }, - "files": [ - "dist" - ], - "homepage": "https://github.com/jdalrymple/gitbeaker#readme", - "keywords": [ - "api", - "es5", - "es6", - "gitlab", - "got" - ], - "license": "MIT", - "main": "dist/index.js", - "module": "dist/index.es.js", - "types": "dist/types", - "repository": { - "type": "git", - "url": "https://github.com/jdalrymple/gitbeaker" - }, - "scripts": { - "build": "rollup -c ", - "test:integration": "TEST_ID=$(uuid) node --expose-gc ../../node_modules/.bin/jest --runInBand --logHeapUsage test/integration", - "test:unit": "node --expose-gc ../../node_modules/.bin/jest --runInBand --logHeapUsage test/unit" - } -} diff --git a/packages/node/rollup.config.js b/packages/node/rollup.config.js deleted file mode 100644 index c3b34c2a5..000000000 --- a/packages/node/rollup.config.js +++ /dev/null @@ -1,31 +0,0 @@ -import ts from 'rollup-plugin-typescript2'; -import json from '@rollup/plugin-json'; -import pkg from './package.json'; - -export default { - input: 'src/index.ts', - external: [...Object.keys(pkg.dependencies || {}), ...Object.keys(pkg.peerDependencies || {})], - output: [ - { - file: pkg.main, // CommonJS (for Node) build. - format: 'cjs', - sourcemap: true, - }, - { - file: pkg.module, // ES module (for bundlers) build. - format: 'es', - sourcemap: true, - }, - ], - plugins: [ - ts({ - tsconfigOverride: { - compilerOptions: { - baseUrl: '.', - }, - }, - useTsconfigDeclarationDir: true, - }), - json(), - ], -}; diff --git a/packages/node/src/GotRequester.ts b/packages/node/src/GotRequester.ts deleted file mode 100644 index 372eeb85e..000000000 --- a/packages/node/src/GotRequester.ts +++ /dev/null @@ -1,107 +0,0 @@ -import Got from 'got'; -import { decamelizeKeys } from 'xcase'; -import delay from 'delay'; -import { - DefaultResourceOptions, - DefaultRequestReturn, - DefaultRequestOptions, - createRequesterFn, - defaultOptionsHandler as baseOptionsHandler, -} from '@gitbeaker/requester-utils'; - -export function defaultOptionsHandler( - resourceOptions: DefaultResourceOptions, - { body, query, sudo, method }: DefaultRequestOptions = {}, -): DefaultRequestReturn & { - json?: Record; - https?: { rejectUnauthorized: boolean }; -} { - const options: DefaultRequestReturn & { - json?: Record; - https?: { rejectUnauthorized: boolean }; - } = baseOptionsHandler(resourceOptions, { body, query, sudo, method }); - - // FIXME: Not the best comparison, but...it will have to do for now. - if (typeof body === 'object' && body.constructor.name !== 'FormData') { - options.json = decamelizeKeys(body); - - delete options.body; - } - - if ( - resourceOptions.url.includes('https') && - resourceOptions.rejectUnauthorized != null && - resourceOptions.rejectUnauthorized === false - ) { - options.https = { - rejectUnauthorized: resourceOptions.rejectUnauthorized, - }; - } - - return options; -} - -export function processBody({ - rawBody, - headers, -}: { - rawBody: Buffer; - headers: Record; -}) { - // Split to remove potential charset info from the content type - const contentType = ((headers['content-type'] as string) || '').split(';')[0].trim(); - - if (contentType === 'application/json') { - return rawBody.length === 0 ? {} : JSON.parse(rawBody.toString()); - } - - if (contentType.startsWith('text/')) { - return rawBody.toString(); - } - - return Buffer.from(rawBody); -} - -export async function handler(endpoint: string, options: Record) { - const retryCodes = [429, 502]; - const maxRetries = 10; - let response; - - for (let i = 0; i < maxRetries; i += 1) { - const waitTime = 2 ** i * 0.1; - try { - if (options.method === 'stream') { - return Got(endpoint, { ...options, method: 'get', isStream: true }); - } - - response = await Got(endpoint, options); // eslint-disable-line - break; - } catch (e) { - if (e.response) { - if (retryCodes.includes(e.response.statusCode)) { - await delay(waitTime); // eslint-disable-line - continue; // eslint-disable-line - } - - if (typeof e.response.body === 'string' && e.response.body.length > 0) { - try { - const output = JSON.parse(e.response.body); - e.description = output.error || output.message; - } catch (err) { - e.description = e.response.body; - } - } - } - - throw e; - } - } - - const { statusCode, headers } = response; - - const body = processBody(response); - - return { body, headers, status: statusCode }; -} - -export const requesterFn = createRequesterFn(defaultOptionsHandler, handler); diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts deleted file mode 100644 index ddf366e07..000000000 --- a/packages/node/src/index.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { Resources } from '@gitbeaker/core'; -import { presetResourceArguments } from '@gitbeaker/requester-utils'; -import { requesterFn } from './GotRequester'; - -const API = presetResourceArguments(Resources, { requesterFn }); - -export { Types } from '@gitbeaker/core'; - -export const { - // Groups - Groups, - GroupAccessRequests, - GroupBadges, - GroupCustomAttributes, - GroupIssueBoards, - GroupMembers, - GroupMilestones, - GroupRunners, - GroupVariables, - GroupLabels, - GroupDeployTokens, - Epics, - EpicIssues, - EpicNotes, - EpicDiscussions, - - // Users - Users, - UserCustomAttributes, - UserEmails, - UserImpersonationTokens, - UserSSHKeys, - UserGPGKeys, - - // Projects - Branches, - Commits, - CommitDiscussions, - ContainerRegistry, - Deployments, - DeployKeys, - Environments, - FreezePeriods, - Issues, - IssuesStatistics, - IssueNotes, - IssueNoteAwardEmojis, - IssueDiscussions, - IssueAwardEmojis, - Jobs, - Labels, - MergeRequests, - MergeRequestApprovals, - MergeRequestAwardEmojis, - MergeRequestDiscussions, - MergeRequestNotes, - Packages, - PackageRegistry, - Pipelines, - PipelineSchedules, - PipelineScheduleVariables, - Projects, - ProjectAccessRequests, - ProjectBadges, - ProjectCustomAttributes, - ProjectImportExport, - ProjectIssueBoards, - ProjectHooks, - ProjectMembers, - ProjectMilestones, - ProjectSnippets, - ProjectSnippetNotes, - ProjectSnippetDiscussions, - ProjectSnippetAwardEmojis, - ProtectedBranches, - ProtectedTags, - ProjectVariables, - ProjectDeployTokens, - PushRules, - Releases, - ReleaseLinks, - Repositories, - RepositoryFiles, - RepositorySubmodules, - Runners, - Services, - Tags, - Todos, - Triggers, - VulnerabilityFindings, - - // Genral - ApplicationSettings, - BroadcastMessages, - Events, - FeatureFlags, - GeoNodes, - GitignoreTemplates, - GitLabCIYMLTemplates, - Keys, - License, - LicenseTemplates, - Lint, - Namespaces, - NotificationSettings, - Markdown, - PagesDomains, - Search, - SidekiqMetrics, - Snippets, - SystemHooks, - Version, - Wikis, - - Gitlab, -} = API; diff --git a/packages/node/test/integration/resources/Projects.ts b/packages/node/test/integration/resources/Projects.ts deleted file mode 100644 index 1a8a380bf..000000000 --- a/packages/node/test/integration/resources/Projects.ts +++ /dev/null @@ -1,57 +0,0 @@ -import 'jest-extended'; -import { Projects } from '../../../src'; - -const { TEST_ID = '' } = process.env; -let service: InstanceType; - -beforeEach(() => { - service = new Projects({ - host: process.env.GITLAB_URL, - token: process.env.GITLAB_PERSONAL_ACCESS_TOKEN, - }); -}); - -describe('Projects.create', () => { - it('should create a valid project', async () => { - const p = await service.create({ name: `Project Creation Integration Test ${TEST_ID}` }); - - expect(p).toBeInstanceOf(Object); - expect(p.name).toEqual(`Project Creation Integration Test ${TEST_ID}`); - }); -}); - -describe('Projects.all', () => { - beforeAll(async () => { - const newProjects: any[] = []; - - for (let i = 0; i < 10; i += 1) { - newProjects.push(service.create({ name: `Project All Integration Test ${TEST_ID} ${i}` })); - } - - await Promise.all(newProjects); - }); - - it('should get 10 projects using offset pagination', async () => { - const projects = await service.all({ maxPages: 2, perPage: 5, simple: true }); - - expect(projects).toBeInstanceOf(Array); - expect(projects).toHaveLength(10); - }); -}); - -describe('Projects.upload', () => { - it('should upload a text file', async () => { - const project = await service.create({ - name: `Project Upload Integration Test Text File ${TEST_ID}`, - }); - - const results = await service.upload(project.id, 'TESTING FILE UPLOAD', { - metadata: { - filename: 'testfile.txt', - contentType: 'text/plain', - }, - }); - - expect(results).toContainKeys(['alt', 'url', 'full_path', 'markdown']); - }); -}); diff --git a/packages/node/test/unit/GotRequester.ts b/packages/node/test/unit/GotRequester.ts deleted file mode 100644 index f86c0497f..000000000 --- a/packages/node/test/unit/GotRequester.ts +++ /dev/null @@ -1,201 +0,0 @@ -import * as got from 'got'; -import FormData from 'form-data'; -import { processBody, handler, defaultOptionsHandler } from '../../src/GotRequester'; - -const MockGot = got as unknown as jest.Mock; - -jest.mock('got'); - -describe('processBody', () => { - it('should return a json object if type is application/json', () => { - const output = processBody({ - rawBody: Buffer.from(JSON.stringify({ test: 5 })), - headers: { 'content-type': 'application/json' }, - }); - - expect(output).toMatchObject({ test: 5 }); - }); - - it('should return a empty json object if type is application/json and rawBody length is 0', () => { - const output = processBody({ - rawBody: Buffer.from(''), - headers: { 'content-type': 'application/json' }, - }); - - expect(output).toMatchObject({}); - }); - - it('should return a string if type is text/', () => { - const output = processBody({ - rawBody: Buffer.from('test'), - headers: { 'content-type': 'text/plain' }, - }); - - expect(typeof output).toBe('string'); - expect(output).toEqual('test'); - }); - - it('should return a buffer if type is octet-stream, binary, or gzip', () => { - const output = [ - processBody({ - rawBody: Buffer.from('test'), - headers: { 'content-type': 'application/octet-stream' }, - }), - processBody({ - rawBody: Buffer.from('test'), - headers: { 'content-type': 'binary/octet-stream' }, - }), - processBody({ - rawBody: Buffer.from('test'), - headers: { 'content-type': 'image/png' }, - }), - processBody({ - rawBody: Buffer.from('test'), - headers: { 'content-type': 'application/gzip' }, - }), - ]; - - output.forEach((o) => expect(o).toBeInstanceOf(Buffer)); - }); - - it('should return a the exact rawBody given when presented with an unknown content-type', () => { - const output = processBody({ - rawBody: Buffer.from('6'), - headers: { 'content-type': 'fake' }, - }); - - expect(output).toBeInstanceOf(Buffer); - expect(output.toString()).toBe('6'); - }); - - it('should return a empty string when presented with an unknown content-type and undefined rawBody', () => { - const output = processBody({ - rawBody: Buffer.from(''), - headers: { 'content-type': 'fake' }, - }); - - expect(output).toBeInstanceOf(Buffer); - expect(output.length).toBe(0); - }); -}); - -describe('handler', () => { - it('should return an error with a description when response has an error prop', async () => { - const stringBody = JSON.stringify({ error: 'msg' }); - - MockGot.mockImplementationOnce(() => { - const e = { response: { body: stringBody } }; - return Promise.reject(e); - }); - - await expect(handler('http://test.com', {})).rejects.toStrictEqual({ - description: 'msg', - response: { - body: stringBody, - }, - }); - }); - - it('should throw error without description if no response information is present', async () => { - MockGot.mockImplementationOnce(() => { - const e = {}; - return Promise.reject(e); - }); - - await expect(handler('http://test.com', {})).rejects.toStrictEqual({}); - }); - - it('should return an error with a description when response has an message prop', async () => { - const stringBody = JSON.stringify({ message: 'msg' }); - - MockGot.mockImplementationOnce(() => { - const e = { response: { body: stringBody } }; - return Promise.reject(e); - }); - - await expect(handler('http://test.com', {})).rejects.toStrictEqual({ - description: 'msg', - response: { - body: stringBody, - }, - }); - }); - - it('should return correct properties if request is valid', async () => { - MockGot.mockImplementationOnce(() => ({ - statusCode: 404, - headers: {}, - rawBody: '{}', - })); - - const output = await handler('http://test.com', {}); - - expect(output).toMatchObject({ - body: {}, - headers: {}, - status: 404, - }); - }); -}); - -describe('defaultRequest', () => { - const service = { - headers: { test: '5' }, - url: 'testurl', - requestTimeout: 50, - rejectUnauthorized: true, - }; - - it('should replace rawBody property with json property if the rawBody type is an object but not FormData', () => { - const output1 = defaultOptionsHandler(service, { body: { key: 1 } }); - - expect(output1.body).toBeUndefined(); - expect(output1.json).toMatchObject({ key: 1 }); - - const output2 = defaultOptionsHandler(service, { body: new FormData() }); - - expect(output2.body).toBeInstanceOf(FormData); - expect(output2.json).toBeUndefined(); - }); - - it('should not assign the https property if given https url and not rejectUnauthorized', () => { - const { https } = defaultOptionsHandler( - { ...service, url: 'https://test.com' }, - { method: 'post' }, - ); - - expect(https).toBeUndefined(); - }); - - it('should not assign the https property if given http url and rejectUnauthorized', () => { - const { https } = defaultOptionsHandler( - { ...service, url: 'http://test.com' }, - { method: 'post' }, - ); - - expect(https).toBeUndefined(); - }); - - it('should assign the https property if given https url and rejectUnauthorized is false', () => { - const { https: https1 } = defaultOptionsHandler( - { ...service, url: 'https://test.com', rejectUnauthorized: false }, - { method: 'post' }, - ); - - expect(https1).toMatchObject({ rejectUnauthorized: false }); - - const { https: https2 } = defaultOptionsHandler( - { ...service, url: 'https://test.com', rejectUnauthorized: true }, - { method: 'post' }, - ); - - expect(https2).toBeUndefined(); - - const { https: https3 } = defaultOptionsHandler( - { ...service, url: 'https://test.com' }, - { method: 'post' }, - ); - - expect(https3).toBeUndefined(); - }); -}); diff --git a/packages/node/test/unit/index.ts b/packages/node/test/unit/index.ts deleted file mode 100644 index fda04e679..000000000 --- a/packages/node/test/unit/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import 'jest-extended'; -import { Resources as coreResources } from '@gitbeaker/core'; -import * as NodeGB from '../../src'; - -const { Types, ...nodeResources } = NodeGB; - -describe('Node Import', () => { - it('should re-export all resources from core', () => { - expect(Object.keys(nodeResources)).toIncludeAllMembers(Object.keys(coreResources)); - }); -}); diff --git a/packages/node/tsconfig.json b/packages/node/tsconfig.json deleted file mode 100644 index f4467cd87..000000000 --- a/packages/node/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "dist", - "declaration": true, - "declarationDir": "dist/types" - }, - "include": ["src"] -} diff --git a/packages/requester-utils/README.md b/packages/requester-utils/README.md index f75fc3a93..c736ef741 100644 --- a/packages/requester-utils/README.md +++ b/packages/requester-utils/README.md @@ -1,23 +1,16 @@

- gitbeaker + gitbeaker

- - CircleCI Pipeline Status - + pipeline status + coverage report Code Climate maintainability - - CodeCov test coverage - - - Dependency Status - - - Dev Dependency Status + + Dependency Status Auto @@ -25,15 +18,174 @@ All Contributors - Prettier + Prettier Licence: MIT - Install Size: Requester Utils + Install Size: Core

-A Utility library for creating custom requesters for @gitbeaker to use +> Utility for creating custom wrappers around the [@gitbeaker/core](https://www.npmjs.com/package/@gitbeaker/core) [GitLab](https://gitlab.com/gitlab-org/gitlab/) SDK. + +## Table of Contents + +- [Usage](#usage) +- [Contributors](#contributors) +- [Changelog](./CHANGELOG.md) + +## Usage + + + + + + + +
+Browsers + +Load @gitbeaker/requester-utils directly from cdn.skypack.dev + +```html + +``` + +
+Deno + +Load @gitbeaker/requester-utils directly from cdn.skypack.dev + +```ts +import { + RequesterUtils, + BaseResource, +} from 'https://cdn.skypack.dev/@gitbeaker/requester-utils?dts'; +``` + +
+Node 18+ + + +Install with npm install @gitbeaker/requester-utils, or yarn add @gitbeaker/requester-utils + +```js +import { RequesterUtils, BaseResource } from '@gitbeaker/requester-utils'; +``` + +
+ +## Contributors + + + + +

+ + Justin Dalrymple + Dylan DesRosier + Mike Wyatt + Cory Zibeill + Martin Bour + akira345 + Pavel Birukov + Joseph Petersen + Louis Cherel + Adam Dehnel + Ev Haus + Loïc Mahieu + Giuseppe Angri + jennparise + Oscar + Daniel Ruf + schindld + Alvaro + Daniel Moore + Dylan M. Taylor + Corentin Mors + xatavian + Yevgeny Petukhov + Mickaël Tricot + Andrea + Flavien Bridault +
+ +
s-kazuki + Kipras Melnikovas + xieyu + st1gok + Max Wittig + Niklas Lochschmidt + Ilya Dus + Omar Awamry + Hennadii Varava + xiezht + Martin Helmich + Sean McGivern + Clemens Lieb + Vojtěch Sajdl + divido + Vincent Boulaye + Aliyss Snow + Mahmoud Saada + Feng Yu + Roy Jacobs + Paul Lemke + Ian Jenkins + nilennoct + Laffargue Michael + Martin Howarth + Christoph Lehmann +
+ +
Frank V + Salim Benabbou + Tamás Török-Vistai + Martin Benninger + fewieden + Jeff Pelton + Claude Abounegm + Stefan Hall + Jordan Wallet + zhao0 + Joshua Grosso + Isaac Ouellet Therrien + Rajat Sharma + Cesar B. + Igor Katsuba + Michael Townsend + bodtx + Artem + Munif Tanjim + Quentin Dreyer + Norm MacLennan + jnovick + Fabian Aussems + Michael Matzka + CraigAllardyce + Bruno Guimarães +
+ +
Lukas Eipert + Maximilian Krauß + Evolution Engineering + WEBER Logan + Anton Zhukov + Nicholas Loomans + Carl Kittelberger + Patrik Votoček + Kyrylo Fedorov + Claudio Vellage + Seb0uil + +

+ + + + + -[Read More](https://github.com/jdalrymple/gitbeaker#readme) +This started as a fork from [node-gitlab-legacy](https://github.com/rest-gitlab/rest-gitlab-legacy) but I ended up rewriting much of the code. Here are the original work's [contributors](https://github.com/rest-gitlab/rest-gitlab-legacy#contributors). diff --git a/packages/requester-utils/jest.config.js b/packages/requester-utils/jest.config.js deleted file mode 100644 index 5d320529f..000000000 --- a/packages/requester-utils/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -const base = require('../../jest.config.base'); - -module.exports = { - ...base, - displayName: 'Gitbeaker Requester Utils', -}; diff --git a/packages/requester-utils/jest.config.mjs b/packages/requester-utils/jest.config.mjs new file mode 100644 index 000000000..c0409f2d1 --- /dev/null +++ b/packages/requester-utils/jest.config.mjs @@ -0,0 +1,6 @@ +import base from '../../jest.config.base.mjs'; + +export default { + ...base, + displayName: 'Gitbeaker Requester Utils', +}; diff --git a/packages/requester-utils/lint-staged.config.mjs b/packages/requester-utils/lint-staged.config.mjs new file mode 100644 index 000000000..2e761d30e --- /dev/null +++ b/packages/requester-utils/lint-staged.config.mjs @@ -0,0 +1 @@ +export { default } from '../../lint-staged.config.base.mjs' diff --git a/packages/requester-utils/package.json b/packages/requester-utils/package.json index 179f1a8dc..ff5f79234 100644 --- a/packages/requester-utils/package.json +++ b/packages/requester-utils/package.json @@ -1,50 +1,62 @@ { "name": "@gitbeaker/requester-utils", + "version": "36.0.1", "description": "Utility functions for requester implementatons used in @gitbeaker", - "version": "35.8.0", - "author": { - "name": "Justin Dalrymple" + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/jdalrymple/gitbeaker" }, "bugs": { "url": "https://github.com/jdalrymple/gitbeaker/issues" }, - "dependencies": { - "form-data": "^4.0.0", - "qs": "^6.10.1", - "xcase": "^2.0.1" - }, - "devDependencies": { - "@types/node": "^18.0.3", - "@types/qs": "^6.9.7", - "jest-extended": "^3.0.0", - "rollup": "^2.47.0", - "rollup-plugin-typescript2": "^0.31.1", - "tslib": "^2.3.1", - "typescript": "^4.2.4" - }, - "engines": { - "node": ">=14.2.0" - }, - "files": [ - "dist" - ], "homepage": "https://github.com/jdalrymple/gitbeaker#readme", + "author": { + "name": "Justin Dalrymple" + }, "keywords": [ "gitbeaker", - "es5", - "es6" + "gitlab", + "utils" ], - "license": "MIT", - "main": "dist/index.js", - "module": "dist/index.es.js", - "types": "dist/types", - "repository": { - "type": "git", - "url": "https://github.com/jdalrymple/gitbeaker" + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.js" + } }, + "files": [ + "dist" + ], "scripts": { - "build": "rollup -c", - "test:integration": "node --expose-gc ../../node_modules/.bin/jest --runInBand --logHeapUsage test/integration", - "test:unit": "node --expose-gc ../../node_modules/.bin/jest --runInBand --logHeapUsage test/unit" + "build": "tsup src/index.ts --format esm,cjs --dts --treeshake", + "test:types": "tsc", + "test:integration": "jest --maxWorkers=50% test/integration", + "test:unit": "jest --maxWorkers=50% test/unit", + "format:docs": "prettier '**/(*.json|.yml|.js|.md)' --ignore-path ../../.prettierignore", + "format:docs:fix": "yarn format:docs --write", + "format:src": "prettier '{src,test}/**/*.ts' --ignore-path ../../.prettierignore", + "format:src:fix": "yarn format:src --write", + "format": "yarn format:src && yarn format:docs", + "format:fix": "yarn format:src:fix && yarn format:docs:fix", + "lint": "eslint '{src,test}/**/*.ts'", + "lint:fix": "yarn lint --fix", + "release:rc": "auto next", + "release:canary": "auto canary", + "release": "auto shipit" + }, + "dependencies": { + "qs": "^6.11.1", + "xcase": "^2.0.1" + }, + "devDependencies": { + "@types/node": "^18.16.1", + "tsup": "^6.7.0", + "typescript": "^4.9.5" } } diff --git a/packages/requester-utils/rollup.config.js b/packages/requester-utils/rollup.config.js deleted file mode 100644 index 196534052..000000000 --- a/packages/requester-utils/rollup.config.js +++ /dev/null @@ -1,27 +0,0 @@ -import ts from 'rollup-plugin-typescript2'; -import pkg from './package.json'; - -export default { - input: 'src/index.ts', - external: [...Object.keys(pkg.dependencies || {}), ...Object.keys(pkg.peerDependencies || {})], - output: [ - { - file: pkg.main, // CommonJS (for Node) build. - format: 'cjs', - sourcemap: true, - }, - { - file: pkg.module, // ES module (for bundlers) build. - format: 'es', - sourcemap: true, - }, - ], - plugins: [ - ts({ - tsconfigOverride: { - baseUrl: '.', - }, - useTsconfigDeclarationDir: true, - }), - ], -}; diff --git a/packages/requester-utils/src/BaseResource.ts b/packages/requester-utils/src/BaseResource.ts index aa92eeec7..e4019f2dc 100644 --- a/packages/requester-utils/src/BaseResource.ts +++ b/packages/requester-utils/src/BaseResource.ts @@ -1,4 +1,4 @@ -import { RequesterType, DefaultResourceOptions } from './RequesterUtils'; +import { DefaultResourceOptions, RequesterType } from './RequesterUtils'; export interface BaseResourceOptions { oauthToken?: string; @@ -6,7 +6,6 @@ export interface BaseResourceOptions { jobToken?: string; host?: string; prefixUrl?: string; - version?: 3 | 4; rejectUnauthorized?: boolean; camelize?: C; requesterFn?: (resourceOptions: DefaultResourceOptions) => RequesterType; @@ -40,17 +39,13 @@ export class BaseResource { profileMode = 'execution', host = 'https://gitlab.com', prefixUrl = '', - version = 4, rejectUnauthorized = true, requestTimeout = 300000, }: BaseResourceOptions = {}) { if (!requesterFn) throw new ReferenceError('requesterFn must be passed'); - this.url = [host, 'api', `v${version}`, prefixUrl].join('/'); - - this.headers = { - 'user-agent': 'gitbeaker', - }; + this.url = [host, 'api', 'v4', prefixUrl].join('/'); + this.headers = {}; this.rejectUnauthorized = rejectUnauthorized; this.camelize = camelize; this.requestTimeout = requestTimeout; diff --git a/packages/requester-utils/src/RequesterUtils.ts b/packages/requester-utils/src/RequesterUtils.ts index cfa6b64cc..3faa78535 100644 --- a/packages/requester-utils/src/RequesterUtils.ts +++ b/packages/requester-utils/src/RequesterUtils.ts @@ -1,18 +1,48 @@ import { decamelizeKeys } from 'xcase'; -import FormData, { Headers } from 'form-data'; import { stringify } from 'qs'; // Types -export interface Constructable { - new (...args: any[]): T; +export type ResponseBodyTypes = + | Record + | Record[] + | ReadableStream + | Blob + | string + | string[] + | number + | void; + +export interface FormattedResponse { + body: T; + headers: Record; + status: number; } export interface RequesterType { - get(endpoint: string, options?: Record): Promise; - post(endpoint: string, options?: Record): Promise; - put(endpoint: string, options?: Record): Promise; - delete(endpoint: string, options?: Record): Promise; - stream?(endpoint: string, options?: Record): NodeJS.ReadableStream; + get( + endpoint: string, + options?: Record, + ): Promise>; + post( + endpoint: string, + options?: Record, + ): Promise>; + put( + endpoint: string, + options?: Record, + ): Promise>; + patch( + endpoint: string, + options?: Record, + ): Promise>; + delete( + endpoint: string, + options?: Record, + ): Promise>; +} + +export interface Constructable { + new (...args: any[]): T; } export type DefaultResourceOptions = { @@ -24,82 +54,90 @@ export type DefaultResourceOptions = { export type DefaultRequestOptions = { body?: FormData | Record; - query?: Record; + searchParams?: Record; sudo?: string; method?: string; + asStream?: boolean; }; -export type DefaultRequestReturn = { - headers: Record | Headers; +export type RequestOptions = { + headers: Record; timeout?: number; method: string; searchParams?: string; - prefixUrl?: string; + prefixUrl: string; body?: string | FormData; + asStream?: boolean; }; // Utility methods export function formatQuery(params: Record = {}): string { const decamelized = decamelizeKeys(params); + // Using qs instead of query-string to support stringifying nested objects :/ return stringify(decamelized, { arrayFormat: 'brackets' }); } export type OptionsHandlerFn = ( serviceOptions: DefaultResourceOptions, requestOptions: DefaultRequestOptions, -) => DefaultRequestReturn; +) => Promise; + +function isFormData(object) { + return typeof object === 'object' && object.constructor.name === 'FormData'; +} + export function defaultOptionsHandler( resourceOptions: DefaultResourceOptions, - { body, query, sudo, method = 'get' }: DefaultRequestOptions = {}, -): DefaultRequestReturn { + { body, searchParams, sudo, asStream = false, method = 'get' }: DefaultRequestOptions = {}, +): Promise { const { headers: preconfiguredHeaders, requestTimeout, url } = resourceOptions; const headers = { ...preconfiguredHeaders }; - let bod: FormData | string; - - if (sudo) headers.sudo = sudo; - - // FIXME: Not the best comparison, but...it will have to do for now. - if (typeof body === 'object' && body.constructor.name !== 'FormData') { - bod = JSON.stringify(decamelizeKeys(body)); - headers['content-type'] = 'application/json'; - } else { - bod = body as FormData; - } - - return { + const defaultOptions: RequestOptions = { headers, timeout: requestTimeout, method, - searchParams: formatQuery(query), + asStream, prefixUrl: url, - body: bod, }; + + if (sudo) defaultOptions.headers.sudo = sudo; + + // FIXME: Not the best comparison, but...it will have to do for now. + if (body) { + if (isFormData(body)) { + defaultOptions.body = body as FormData; + } else { + defaultOptions.body = JSON.stringify(decamelizeKeys(body)); + headers['content-type'] = 'application/json'; + } + } + + // Format query parameters + const q = formatQuery(searchParams); + + if (q) defaultOptions.searchParams = q; + + return Promise.resolve(defaultOptions); } -export type RequestHandlerFn = ( +export type RequestHandlerFn = ( endpoint: string, options?: Record, -) => - | any - | Promise<{ - body: Record | Record[]; - headers: Record | Headers; - status: number; - }>; +) => Promise>; export function createRequesterFn( optionsHandler: OptionsHandlerFn, requestHandler: RequestHandlerFn, ): (serviceOptions: DefaultResourceOptions) => RequesterType { - const methods = ['get', 'post', 'put', 'delete', 'stream']; + const methods = ['get', 'post', 'put', 'patch', 'delete']; return (serviceOptions) => { const requester: RequesterType = {} as RequesterType; methods.forEach((m) => { - requester[m] = (endpoint: string, options: Record) => { - const requestOptions = optionsHandler(serviceOptions, { ...options, method: m }); + requester[m] = async (endpoint: string, options: Record) => { + const requestOptions = await optionsHandler(serviceOptions, { ...options, method: m }); return requestHandler(endpoint, requestOptions); }; @@ -109,17 +147,21 @@ export function createRequesterFn( }; } -function extendClass(Base: T, customConfig: Record): T { +function extendClass( + Base: T, + customConfig: Record = {}, +): T { return class extends Base { constructor(...options: any[]) { + // eslint-disable-line const [config, ...opts] = options; - super({ ...customConfig, ...config }, ...opts); + super({ ...customConfig, ...config }, ...opts); // eslint-disable-line } }; } -export function presetResourceArguments( +export function presetResourceArguments>( resources: T, customConfig: Record = {}, ) { diff --git a/packages/requester-utils/test/unit/BaseResource.ts b/packages/requester-utils/test/unit/BaseResource.ts index e6a836b3d..e5a233e5b 100644 --- a/packages/requester-utils/test/unit/BaseResource.ts +++ b/packages/requester-utils/test/unit/BaseResource.ts @@ -1,4 +1,4 @@ -import { BaseResource } from '../../src'; +import { BaseResource } from '../../src/BaseResource'; import { createRequesterFn } from '../../src/RequesterUtils'; describe('Creation of BaseResource instance', () => { @@ -65,17 +65,6 @@ describe('Creation of BaseResource instance', () => { expect(service.headers['job-token']).toBe('1234'); }); - it('should allow for the API version to be modified', () => { - const service = new BaseResource({ - requesterFn: jest.fn(), - host: 'https://testing.com', - token: '1234', - version: 3, - }); - - expect(service.url).toBe('https://testing.com/api/v3/'); - }); - it('should set the X-Profile-Token header if the profileToken option is given', () => { const service = new BaseResource({ requesterFn: jest.fn(), @@ -151,15 +140,14 @@ describe('Creation of BaseResource instance', () => { expect(service.url).toBe('https://gitlab.com/api/v4/test'); }); - it('should allow for prefix resource urls to be set without host or version defaults', () => { + it('should allow for prefix resource urls to be set without host defaults', () => { const service = new BaseResource({ requesterFn: jest.fn(), - version: 3, host: 'https://fakehost.com', prefixUrl: 'test', }); - expect(service.url).toBe('https://fakehost.com/api/v3/test'); + expect(service.url).toBe('https://fakehost.com/api/v4/test'); }); it('should throw an error if requesterFn is not passed', () => { @@ -177,14 +165,14 @@ describe('Creation of BaseResource instance', () => { await serviceA.requester.get('test'); - expect(optionsHandler).toBeCalledWith( + expect(optionsHandler).toHaveBeenCalledWith( expect.objectContaining({ url: 'https://gitlab.com/api/v4/test' }), { method: 'get' }, ); await serviceB.requester.get('test'); - expect(optionsHandler).toBeCalledWith( + expect(optionsHandler).toHaveBeenCalledWith( expect.objectContaining({ url: 'https://gitlab.com/api/v4/test2' }), { method: 'get' }, ); diff --git a/packages/requester-utils/test/unit/RequesterUtils.ts b/packages/requester-utils/test/unit/RequesterUtils.ts index ecfe5c85c..d34aa9a40 100644 --- a/packages/requester-utils/test/unit/RequesterUtils.ts +++ b/packages/requester-utils/test/unit/RequesterUtils.ts @@ -1,15 +1,12 @@ -/* eslint-disable max-classes-per-file */ -import FormData from 'form-data'; -import 'jest-extended'; import { + RequestOptions, createRequesterFn, defaultOptionsHandler, - presetResourceArguments, formatQuery, - DefaultRequestReturn, + presetResourceArguments, } from '../../src/RequesterUtils'; -const methods = ['get', 'put', 'delete', 'stream', 'post']; +const methods = ['get', 'put', 'patch', 'delete', 'post']; describe('defaultOptionsHandler', () => { const serviceOptions = { @@ -19,15 +16,15 @@ describe('defaultOptionsHandler', () => { requestTimeout: 50, }; - it('should not use default request options if not passed', () => { - const options = defaultOptionsHandler(serviceOptions); + it('should not use default request options if not passed', async () => { + const options = await defaultOptionsHandler(serviceOptions); expect(options.method).toBe('get'); }); - it('should stringify body if it isnt of type FormData', () => { + it('should stringify body if it isnt of type FormData', async () => { const testBody = { test: 6 }; - const { body, headers } = defaultOptionsHandler(serviceOptions, { + const { body, headers } = await defaultOptionsHandler(serviceOptions, { method: 'post', body: testBody, }); @@ -36,55 +33,58 @@ describe('defaultOptionsHandler', () => { expect(body).toBe(JSON.stringify(testBody)); }); - it('should not stringify body if it of type FormData', () => { - const testBody = new FormData(); - const { body } = defaultOptionsHandler(serviceOptions, { body: testBody, method: 'post' }); + it('should not stringify body if it of type FormData', async () => { + const testBody: globalThis.FormData = new FormData() as unknown as globalThis.FormData; + const { body } = await defaultOptionsHandler(serviceOptions, { + body: testBody, + method: 'post', + }); expect(body).toBeInstanceOf(FormData); }); - it('should not assign the sudo property if omitted', () => { - const { headers } = defaultOptionsHandler(serviceOptions, { + it('should not assign the sudo property if omitted', async () => { + const { headers } = (await defaultOptionsHandler(serviceOptions, { sudo: undefined, method: 'get', - }) as { headers: Record }; + })) as { headers: Record }; expect(headers.sudo).toBeUndefined(); }); - it('should assign the sudo property if passed', () => { - const { headers } = defaultOptionsHandler(serviceOptions, { + it('should assign the sudo property if passed', async () => { + const { headers } = (await defaultOptionsHandler(serviceOptions, { sudo: 'testsudo', - }) as { headers: Record }; + })) as { headers: Record }; expect(headers.sudo).toBe('testsudo'); }); - it('should assign the prefixUrl property if passed', () => { - const { prefixUrl } = defaultOptionsHandler(serviceOptions); + it('should assign the prefixUrl property if passed', async () => { + const { prefixUrl } = await defaultOptionsHandler(serviceOptions); expect(prefixUrl).toBe('testurl'); }); - it('should default searchParams to an empty string if undefined', () => { - const { searchParams } = defaultOptionsHandler(serviceOptions, { - query: undefined, + it('should not default searchParams', async () => { + const { searchParams } = await defaultOptionsHandler(serviceOptions, { + searchParams: undefined, }); - expect(searchParams).toBe(''); + expect(searchParams).toBeUndefined(); }); - it('should format searchParams to an stringified object', () => { - const { searchParams } = defaultOptionsHandler(serviceOptions, { - query: { a: 5 }, + it('should format searchParams to an stringified object', async () => { + const { searchParams } = await defaultOptionsHandler(serviceOptions, { + searchParams: { a: 5 }, }); expect(searchParams).toBe('a=5'); }); - it('should format searchParams to an stringified object and decamelize properties', () => { - const { searchParams } = defaultOptionsHandler(serviceOptions, { - query: { thisSearchTerm: 5 }, + it('should format searchParams to an stringified object and decamelize properties', async () => { + const { searchParams } = await defaultOptionsHandler(serviceOptions, { + searchParams: { thisSearchTerm: 5 }, }); expect(searchParams).toBe('this_search_term=5'); @@ -92,8 +92,8 @@ describe('defaultOptionsHandler', () => { }); describe('createInstance', () => { - const handler = jest.fn(); - const optionsHandler = jest.fn(() => ({} as DefaultRequestReturn)); + const requestHandler = jest.fn(); + const optionsHandler = jest.fn(() => Promise.resolve({} as RequestOptions)); const serviceOptions = { headers: { test: '5' }, url: 'testurl', @@ -106,7 +106,7 @@ describe('createInstance', () => { }); it('should return an object with function names equal to those in the methods array when the createInstance function is called', () => { - const requester = createRequesterFn(optionsHandler, handler)(serviceOptions); + const requester = createRequesterFn(optionsHandler, requestHandler)(serviceOptions); expect(requester).toContainAllKeys(methods); @@ -115,16 +115,18 @@ describe('createInstance', () => { }); }); - it('should call the handler with the correct endpoint when passed to any of the method functions', () => { + it('should call the requestHandler with the correct endpoint when passed to any of the method functions', async () => { const testEndpoint = 'test endpoint'; - const requester = createRequesterFn(optionsHandler, handler)(serviceOptions); + const requester = createRequesterFn(optionsHandler, requestHandler)(serviceOptions); - methods.forEach((m) => { - requester[m](testEndpoint, {}); + // eslint-disable-next-line + for (const m of methods) { + // eslint-disable-next-line + await requester[m](testEndpoint, {}); - expect(optionsHandler).toBeCalledWith(serviceOptions, { method: m }); - expect(handler).toBeCalledWith(testEndpoint, {}); - }); + expect(optionsHandler).toHaveBeenCalledWith(serviceOptions, { method: m }); + expect(requestHandler).toHaveBeenCalledWith(testEndpoint, {}); + } }); it('should respect the closure variables', async () => { @@ -141,33 +143,33 @@ describe('createInstance', () => { requestTimeout: 100, }; - const requesterFn = createRequesterFn(optionsHandler, handler); + const requesterFn = createRequesterFn(optionsHandler, requestHandler); const requesterA = requesterFn(serviceOptions1); const requesterB = requesterFn(serviceOptions2); await requesterA.get('test'); - expect(optionsHandler).toBeCalledWith(serviceOptions1, { method: 'get' }); + expect(optionsHandler).toHaveBeenCalledWith(serviceOptions1, { method: 'get' }); await requesterB.get('test'); - expect(optionsHandler).toBeCalledWith(serviceOptions2, { method: 'get' }); + expect(optionsHandler).toHaveBeenCalledWith(serviceOptions2, { method: 'get' }); }); }); describe('presetResourceArguments', () => { - it('should preset class with extended properties', () => { - class A { - x?: number; + class A { + x: number; - y?: number; + y?: number; - constructor({ x, y }: { x?: number; y?: number } = {}) { - this.x = x; - this.y = y; - } + constructor({ x = 8, y }: { x?: number; y?: number } = {}) { + this.x = x; + this.y = y; } + } + it('should preset class with extended properties', () => { const { A: B } = presetResourceArguments({ A }, { x: 3 }); const b = new B(); @@ -175,17 +177,6 @@ describe('presetResourceArguments', () => { }); it('should preset class with default properties', () => { - class A { - x: number; - - y?: number; - - constructor({ x = 8, y }: { x?: number; y?: number } = {}) { - this.x = x; - this.y = y; - } - } - const { A: B } = presetResourceArguments({ A }); const b = new B(); @@ -193,17 +184,6 @@ describe('presetResourceArguments', () => { }); it('should overwrite default properties with extended properties', () => { - class A { - x: number; - - y?: number; - - constructor({ x = 8, y }: { x?: number; y?: number } = {}) { - this.x = x; - this.y = y; - } - } - const { A: B } = presetResourceArguments({ A }, { x: 3 }); const b = new B(); @@ -211,17 +191,6 @@ describe('presetResourceArguments', () => { }); it('should overwrite default properties with custom properties', () => { - class A { - x: number; - - y?: number; - - constructor({ x = 8, y }: { x?: number; y?: number } = {}) { - this.x = x; - this.y = y; - } - } - const { A: B } = presetResourceArguments({ A }); const b = new B({ x: 5 }); @@ -229,17 +198,6 @@ describe('presetResourceArguments', () => { }); it('should overwrite default and extended properties with custom properties', () => { - class A { - x: number; - - y?: number; - - constructor({ x = 8, y }: { x?: number; y?: number } = {}) { - this.x = x; - this.y = y; - } - } - const { A: B } = presetResourceArguments({ A }, { x: 2 }); const b = new B({ x: 5 }); diff --git a/packages/requester-utils/tsconfig.json b/packages/requester-utils/tsconfig.json index f4467cd87..3b8abba79 100644 --- a/packages/requester-utils/tsconfig.json +++ b/packages/requester-utils/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "dist", - "declaration": true, - "declarationDir": "dist/types" + "paths": { + "@gitbeaker/*": ["../*/src"] + } }, - "include": ["src"] + "include": ["./**/*.ts"] } diff --git a/packages/rest/CHANGELOG.md b/packages/rest/CHANGELOG.md new file mode 100644 index 000000000..e69de29bb diff --git a/packages/rest/README.md b/packages/rest/README.md new file mode 100644 index 000000000..ba7293640 --- /dev/null +++ b/packages/rest/README.md @@ -0,0 +1,371 @@ +
+
+ gitbeaker +
+
+

+ pipeline status + coverage report + + + Code Climate maintainability + + + Dependency Status + + + Auto + + + All Contributors + + Prettier + + Licence: MIT + + + Install Size: Rest + +

+ +> A Typed [GitLab](https://gitlab.com/gitlab-org/gitlab/) SDK for Browsers, Node.js, and Deno. + +## Table of Contents + +- [Features](#features) +- [Usage](#usage) +- [API Client](#api-client) + - [Pagination](#pagination) + - [Error Handling](#error-handling) +- [Examples](#examples) +- [Testing](https://github.com/jdalrymple/gitbeaker/blob/main/docs/TESTING.md) +- [FAQ](https://github.com/jdalrymple/gitbeaker/blob/main/docs/FAQ.md) +- [Contributors](#contributors) +- [Changelog](./CHANGELOG.md) + +## Features + +- **Complete**. All features of Gitlab's exposed APIs are covered up to version [15.7](). +- **Universal**. Works in all modern browsers, [Node.js](https://nodejs.org/), and [Deno](https://deno.land/). +- **Tested**. All libraries have > 80% test coverage. +- **Typed**. All libraries have extensive TypeScript declarations. + +## Usage + + + + + + + +
+Browsers + +Load @gitbeaker/rest directly from cdn.skypack.dev + +```html + +``` + +
+Deno + +Load @gitbeaker/rest directly from cdn.skypack.dev + +```ts +import { Gitlab } from 'https://cdn.skypack.dev/@gitbeaker/rest?dts'; +``` + +
+Node 18+ + + +Install with npm install @gitbeaker/rest, or yarn add @gitbeaker/rest + +```js +import { Gitlab } from '@gitbeaker/rest'; +``` + +
+ +## API Client + +Instantiate the library using a basic token created in your [Gitlab Profile](https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html) + +```javascript +const api = new Gitlab({ + token: 'personaltoken', +}); +``` + +Available instantiating options: + +| Name | Optional | Default | Description | +| -------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | +| `host` | Yes | `https://gitlab.com` | Gitlab Instance Host URL | +| `token` | No\* | N/A | Personal Token. Required (one of the three tokens are required) | +| `oauthToken` | No\* | N/A | OAuth Token. Required (one of the three tokens are required) | +| `jobToken` | No\* | N/A | CI Job Token. Required (one of the three tokens are required) | +| `rejectUnauthorized` | Yes | `true` | Http Certificate setting, Only applies to non-browser releases and HTTPS hosts urls | +| `sudo` | Yes | `false` | [Sudo](https://docs.gitlab.com/ee/api/#sudo) query parameter | +| `camelize` | Yes | `false` | Camelizes all response body keys | +| `requesterFn` | Yes | @gitbeaker/rest & @gitbeaker/cli : fetch-based, The @gitbeaker/core package **does not** have a default and thus must be set explicitly | Request Library Wrapper | +| `requestTimeout` | Yes | `300000` | Request Library Timeout in ms | +| `profileToken` | Yes | N/A | [Requests Profiles Token](https://docs.gitlab.com/ee/administration/monitoring/performance/request_profiling.html) | +| `profileMode` | Yes | `execution` | [Requests Profiles Token](https://docs.gitlab.com/ee/administration/monitoring/performance/request_profiling.html) | + +> \*One of these options must be supplied. + +### Pagination + +Available pagination options: + +| Name | Keyset | Offset | Type | Default | Description | +| -------------- | ------ | ------ | -------------------- | -------- | --------------------------------------------------------------- | +| `pagination` | X | X | 'offset' or 'keyset' | 'offset' | Defines which pagination type should be used | +| `perPage` | X | X | Number | 20 | Amount of results per request | +| `orderBy` | X | | String | | What field the results should be ordered by | +| `sort` | X | | 'asc' or 'desc' | 'asc' | The direction of sort for the results | +| `maxPages` | | X | Number | N/A | Maximum amount of requests that should be made | +| `page` | | X | Number | N/A | Specific page to be retrieved | +| `showExpanded` | | X | Boolean | false | Returns with the pagination information in addition to the data | + +#### Offset Pagination + +For any .all() function on a resource, it will return **all** the items from Gitlab. This can be troublesome if there are many items, as the request itself can take a while to be fulfilled. As such, a maxPages option can be passed to limit the scope of the all function. + +```javascript +import { Gitlab } from '@gitbeaker/rest'; + +const api = new Gitlab({ + host: 'http://example.com', + token: 'personaltoken', +}); + +let projects = await api.Projects.all({ maxPages: 2 }); +``` + +You can also use this in conjunction with the perPage argument which would override the default of 30 per page set by Gitlab: + +```javascript +import { Gitlab } from '@gitbeaker/rest'; + +const api = new Gitlab({ + host: 'http://example.com', + token: 'personaltoken', +}); + +let projects = await api.Projects.all({ maxPages: 2, perPage: 40 }); +``` + +Additionally, if you would like to get back the pagination information, to know how many total pages there are for example, pass the option `showExpanded`. If there are multiple results the pagination property will be included as shown below: + +```javascript +... +const { data, paginationInfo } = await api.Projects.all({ + perPage:40, + maxPages:2, + showExpanded: true +}); +... +``` + +This will result in a response in this format: + +```javascript +data: [ +... +], +paginationInfo: { + next: 4, + current: 2, + previous: 1, + perPage: 3, +} +``` + +> Note: Supplying any pagination restrictions is call intensive. Some resources will require many requests which can put a significant load on the Gitlab Server. The general best practice would be setting the page request option to only return the first page if all results are not required. + +#### Keyset Pagination + +Similarly, support for [Keyset pagination](https://docs.gitlab.com/ee/api/#keyset-based-pagination) can be toggled on by passing a pagination parameter as a query option + +```js +const { data } = await api.Projects.all({ + pagination: 'keyset', + sort: 'asc', + orderBy: 'created_by', +}); +``` + +### Error Handling + +Request errors are returned back within the a plain Error instance, using the cause to hold the original response and a text description of the error pulled from the response's error or message fields if JSON, or its plain text value: + +```js +Error: Bad Request + +{ + [cause]: { + description: , + response: + } +} +``` + +## Examples + +Once you have your library instantiated, you can utilize many of the API's functionality: + +Using the await/async method + +```javascript +import { Gitlab } from '@gitbeaker/rest'; + +const api = new Gitlab({ + host: 'http://example.com', + token: 'personaltoken', +}); + +// Listing users +let users = await api.Users.all(); + +// Or using Promise-Then notation +api.Projects.all().then((projects) => { + console.log(projects); +}); +``` + +A general rule about all the function parameters: + +- If it's a required parameter, it is a named argument in the functions +- If it's an optional parameter, it is defined in a options object following the named arguments + +ie. + +```javascript +import { Projects } from '@gitbeaker/rest'; + +const projectsAPI = new Projects({ + host: 'http://example.com', + token: 'personaltoken', +}); + +projectsAPI.create({ + //options defined in the Gitlab API documentation +}); +``` + +## Contributors + + + + +

+ + Justin Dalrymple + Dylan DesRosier + Mike Wyatt + Cory Zibeill + Martin Bour + akira345 + Pavel Birukov + Joseph Petersen + Louis Cherel + Adam Dehnel + Ev Haus + Loïc Mahieu + Giuseppe Angri + jennparise + Oscar + Daniel Ruf + schindld + Alvaro + Daniel Moore + Dylan M. Taylor + Corentin Mors + xatavian + Yevgeny Petukhov + Mickaël Tricot + Andrea + Flavien Bridault +
+ +
s-kazuki + Kipras Melnikovas + xieyu + st1gok + Max Wittig + Niklas Lochschmidt + Ilya Dus + Omar Awamry + Hennadii Varava + xiezht + Martin Helmich + Sean McGivern + Clemens Lieb + Vojtěch Sajdl + divido + Vincent Boulaye + Aliyss Snow + Mahmoud Saada + Feng Yu + Roy Jacobs + Paul Lemke + Ian Jenkins + nilennoct + Laffargue Michael + Martin Howarth + Christoph Lehmann +
+ +
Frank V + Salim Benabbou + Tamás Török-Vistai + Martin Benninger + fewieden + Jeff Pelton + Claude Abounegm + Stefan Hall + Jordan Wallet + zhao0 + Joshua Grosso + Isaac Ouellet Therrien + Rajat Sharma + Cesar B. + Igor Katsuba + Michael Townsend + bodtx + Artem + Munif Tanjim + Quentin Dreyer + Norm MacLennan + jnovick + Fabian Aussems + Michael Matzka + CraigAllardyce + Bruno Guimarães +
+ +
Lukas Eipert + Maximilian Krauß + Evolution Engineering + WEBER Logan + Anton Zhukov + Nicholas Loomans + Carl Kittelberger + Patrik Votoček + Kyrylo Fedorov + Claudio Vellage + Seb0uil + +

+ + + + + + +This started as a fork from [node-gitlab-legacy](https://github.com/rest-gitlab/rest-gitlab-legacy) but I ended up rewriting much of the code. Here are the original work's [contributors](https://github.com/rest-gitlab/rest-gitlab-legacy#contributors). diff --git a/packages/rest/jest.config.mjs b/packages/rest/jest.config.mjs new file mode 100644 index 000000000..53f2e75f8 --- /dev/null +++ b/packages/rest/jest.config.mjs @@ -0,0 +1,6 @@ +import base from '../../jest.config.base.mjs'; + +export default { + ...base, + displayName: 'Gitbeaker Rest', +}; diff --git a/packages/rest/lint-staged.config.mjs b/packages/rest/lint-staged.config.mjs new file mode 100644 index 000000000..2e761d30e --- /dev/null +++ b/packages/rest/lint-staged.config.mjs @@ -0,0 +1 @@ +export { default } from '../../lint-staged.config.base.mjs' diff --git a/packages/rest/package.json b/packages/rest/package.json new file mode 100644 index 000000000..3869b4a19 --- /dev/null +++ b/packages/rest/package.json @@ -0,0 +1,69 @@ +{ + "name": "@gitbeaker/rest", + "version": "36.0.1", + "description": "Cross Platform implementation of the GitLab API", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/jdalrymple/gitbeaker" + }, + "bugs": { + "url": "https://github.com/jdalrymple/gitbeaker/issues" + }, + "homepage": "https://github.com/jdalrymple/gitbeaker#readme", + "author": { + "name": "Justin Dalrymple" + }, + "keywords": [ + "gitbeaker", + "gitlab", + "api", + "rest", + "browser" + ], + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.js" + } + }, + "files": [ + "dist" + ], + "scripts": { + "build": "tsup src/index.ts --format esm,cjs --dts --treeshake", + "test:types": "tsc", + "test:e2e:browser": "playwright test", + "test:e2e": "yarn test:e2e:browser", + "test:integration:nodejs": "jest --maxWorkers=50% test/integration/nodejs", + "test:integration": "yarn test:integration:nodejs", + "test:unit": "jest --maxWorkers=50% test/unit", + "format:docs": "prettier '**/(*.json|.yml|.js|.md)' --ignore-path ../../.prettierignore", + "format:docs:fix": "yarn format:docs --write", + "format:src": "prettier '{src,test}/**/*.ts' --ignore-path ../../.prettierignore", + "format:src:fix": "yarn format:src --write", + "format": "yarn format:src && yarn format:docs", + "format:fix": "yarn format:src:fix && yarn format:docs:fix", + "lint": "eslint '{src,test}/**/*.ts'", + "lint:fix": "yarn lint --fix", + "release:rc": "auto next", + "release:canary": "auto canary", + "release": "auto shipit" + }, + "dependencies": { + "@gitbeaker/core": "36.0.1", + "@gitbeaker/requester-utils": "36.0.1" + }, + "devDependencies": { + "@playwright/test": "^1.32.3", + "@types/node": "^18.16.1", + "playwright": "^1.32.3", + "tsup": "^6.7.0", + "typescript": "^4.9.5" + } +} diff --git a/packages/rest/playwright.config.mjs b/packages/rest/playwright.config.mjs new file mode 100644 index 000000000..a10b70e1d --- /dev/null +++ b/packages/rest/playwright.config.mjs @@ -0,0 +1,19 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + use: { + browserName: 'chromium', + launchOptions: { + args: [ + '--disable-web-security', + '--allow-file-access-from-files' + ], + } + }, + testDir: './test/e2e/browser', + testMatch: /.*.ts/, + reporter: [ + ['line'], + ['junit', { outputFile: './reports/browser_junit.xml' }], + ], +}); diff --git a/packages/rest/src/Requester.ts b/packages/rest/src/Requester.ts new file mode 100644 index 000000000..549e4627c --- /dev/null +++ b/packages/rest/src/Requester.ts @@ -0,0 +1,126 @@ +import { + defaultOptionsHandler as baseOptionsHandler, + createRequesterFn, +} from '@gitbeaker/requester-utils'; +import type { + DefaultRequestOptions, + DefaultResourceOptions, + RequestOptions, +} from '@gitbeaker/requester-utils'; + +export async function defaultOptionsHandler( + resourceOptions: DefaultResourceOptions, + { body, searchParams, asStream, sudo, method }: DefaultRequestOptions = {}, +): Promise { + const options: RequestOptions & { agent?: unknown } = await baseOptionsHandler(resourceOptions, { + body, + searchParams, + asStream, + sudo, + method, + }); + + if ( + resourceOptions.url.includes('https') && + resourceOptions.rejectUnauthorized != null && + resourceOptions.rejectUnauthorized === false + ) { + if (typeof window !== 'object') { + const { Agent } = await import('https'); + + options.agent = new Agent({ + rejectUnauthorized: false, + }); + } + } + + return options; +} + +export async function processBody(response: Response) { + // Split to remove potential charset info from the content type + const contentType = (response.headers.get('content-type') || '').split(';')[0].trim(); + + if (contentType === 'application/json') { + return response.json().then((v) => v || {}); + } + + if (contentType.startsWith('text/')) { + return response.text().then((t) => t || ''); + } + + return response.arrayBuffer(); +} + +function delay(ms: number) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} + +async function parseResponse(response: Response, asStream = false) { + const { status, headers: rawHeaders } = response; + const headers = Object.fromEntries(rawHeaders.entries()); + let body; + + if (asStream) { + body = response.body; + } else { + body = status === 204 ? null : await processBody(response); // eslint-disable-line + } + + return { body, headers, status }; +} + +async function throwFailedRequestError(response: Response) { + const content = await response.text(); // eslint-disable-line + const contentType = response.headers.get('Content-Type'); + let description = 'API Request Error'; + + if (contentType?.includes('application/json')) { + const output = JSON.parse(content); + + description = JSON.stringify(output.error || output.message, null, 2); + } else { + description = content; + } + + throw new Error(response.statusText, { + cause: { + description, + response, + }, + }); +} + +export async function defaultRequestHandler(endpoint: string, options: RequestOptions) { + const retryCodes = [429, 502]; + const maxRetries = 10; + const { prefixUrl, asStream, searchParams, ...opts } = options; + let baseUrl: string | undefined; + + if (prefixUrl) baseUrl = prefixUrl.endsWith('/') ? prefixUrl : `${prefixUrl}/`; + + const url = new URL(endpoint, baseUrl); + + url.search = searchParams || ''; + + /* eslint-disable no-await-in-loop */ + for (let i = 0; i < maxRetries; i += 1) { + const response = await fetch(url, { ...opts, mode: 'same-origin' }); + + if (response.ok) return parseResponse(response, asStream); + if (!retryCodes.includes(response.status)) await throwFailedRequestError(response); + + // Retry + await delay(2 ** i * 0.1); + + // eslint-disable-next-line + continue; + } + /* eslint-enable */ + + throw new Error('Could not successfully complete this request'); +} + +export const requesterFn = createRequesterFn(defaultOptionsHandler, defaultRequestHandler); diff --git a/packages/rest/src/index.ts b/packages/rest/src/index.ts new file mode 100644 index 000000000..931aee5bc --- /dev/null +++ b/packages/rest/src/index.ts @@ -0,0 +1,189 @@ +import * as Resources from '@gitbeaker/core'; +import { presetResourceArguments } from '@gitbeaker/requester-utils'; +import { requesterFn } from './Requester'; + +const API = presetResourceArguments(Resources, { requesterFn }); + +export const { + Agents, + AlertManagement, + ApplicationAppearance, + ApplicationPlanLimits, + Applications, + ApplicationSettings, + ApplicationStatistics, + AuditEvents, + Avatar, + BroadcastMessages, + Composer, + Conan, + DashboardAnnotations, + Debian, + DependencyProxy, + DeployKeys, + DeployTokens, + DockerfileTemplates, + Events, + Experiments, + GeoNodes, + GitignoreTemplates, + GitLabCIYMLTemplates, + Import, + InstanceLevelCICDVariables, + Keys, + License, + LicenseTemplates, + Lint, + Markdown, + Maven, + Metadata, + Migrations, + Namespaces, + NotificationSettings, + NPM, + NuGet, + PersonalAccessTokens, + PyPI, + RubyGems, + Search, + ServiceData, + SidekiqMetrics, + SidekiqQueues, + SnippetRepositoryStorageMoves, + Snippets, + Suggestions, + SystemHooks, + TodoLists, + Topics, + Branches, + CommitDiscussions, + Commits, + ContainerRegistry, + Deployments, + Environments, + ErrorTrackingClientKeys, + ErrorTrackingSettings, + ExternalStatusChecks, + FeatureFlags, + FeatureFlagUserLists, + FreezePeriods, + GitlabPages, + GoProxy, + Helm, + Integrations, + IssueAwardEmojis, + IssueDiscussions, + IssueIterationEvents, + IssueLabelEvents, + IssueLinks, + IssueMilestoneEvents, + IssueNoteAwardEmojis, + IssueNotes, + Issues, + IssuesStatistics, + IssueStateEvents, + IssueWeightEvents, + JobArtifacts, + Jobs, + MergeRequestApprovals, + MergeRequestAwardEmojis, + MergeRequestContextCommits, + MergeRequestDiscussions, + MergeRequestLabelEvents, + MergeRequestMilestoneEvents, + MergeRequestDraftNotes, + MergeRequestNotes, + MergeRequests, + MergeTrains, + PackageRegistry, + Packages, + PagesDomains, + Pipelines, + PipelineSchedules, + PipelineScheduleVariables, + PipelineTriggerTokens, + ProductAnalytics, + ProjectAccessRequests, + ProjectAccessTokens, + ProjectAliases, + ProjectBadges, + ProjectCustomAttributes, + ProjectDORA4Metrics, + ProjectHooks, + ProjectImportExport, + ProjectInvitations, + ProjectIssueBoards, + ProjectIterations, + ProjectLabels, + ProjectMembers, + ProjectMilestones, + ProjectProtectedEnvironments, + ProjectPushRules, + ProjectRelationsExport, + ProjectReleases, + ProjectRemoteMirrors, + ProjectRepositoryStorageMoves, + Projects, + ProjectSnippetAwardEmojis, + ProjectSnippetDiscussions, + ProjectSnippetNotes, + ProjectSnippets, + ProjectStatistics, + ProjectTemplates, + ProjectVariables, + ProjectVulnerabilities, + ProjectWikis, + ProtectedBranches, + ProtectedTags, + ReleaseLinks, + Repositories, + RepositoryFiles, + RepositorySubmodules, + ResourceGroups, + Runners, + SecureFiles, + Tags, + UserStarredMetricsDashboard, + EpicAwardEmojis, + EpicDiscussions, + EpicIssues, + EpicLabelEvents, + EpicLinks, + EpicNotes, + Epics, + GroupAccessRequests, + GroupAccessTokens, + GroupActivityAnalytics, + GroupBadges, + GroupCustomAttributes, + GroupDORA4Metrics, + GroupHooks, + GroupImportExports, + GroupInvitations, + GroupIssueBoards, + GroupIterations, + GroupLabels, + GroupLDAPLinks, + GroupMembers, + GroupMemberRoles, + GroupMilestones, + GroupProtectedEnvironments, + GroupPushRules, + GroupRelationExports, + GroupReleases, + GroupRepositoryStorageMoves, + Groups, + GroupSAMLIdentities, + GroupSCIMIdentities, + GroupVariables, + GroupWikis, + LinkedEpics, + UserCustomAttributes, + UserEmails, + UserGPGKeys, + UserImpersonationTokens, + Users, + UserSSHKeys, + + Gitlab, +} = API; diff --git a/packages/rest/test/e2e/browser/assets/test-import.html b/packages/rest/test/e2e/browser/assets/test-import.html new file mode 100644 index 000000000..74439139b --- /dev/null +++ b/packages/rest/test/e2e/browser/assets/test-import.html @@ -0,0 +1,26 @@ + + + + + + Document + + + + + + diff --git a/packages/rest/test/e2e/browser/index.ts b/packages/rest/test/e2e/browser/index.ts new file mode 100644 index 000000000..488b9c5ba --- /dev/null +++ b/packages/rest/test/e2e/browser/index.ts @@ -0,0 +1,200 @@ +import path from 'path'; +import { expect, test as it } from '@playwright/test'; + +const { describe } = it; + +describe('Browser Import', () => { + const keys = [ + 'Agents', + 'AlertManagement', + 'ApplicationAppearance', + 'ApplicationPlanLimits', + 'Applications', + 'ApplicationSettings', + 'ApplicationStatistics', + 'AuditEvents', + 'Avatar', + 'BroadcastMessages', + 'Composer', + 'Conan', + 'DashboardAnnotations', + 'Debian', + 'DependencyProxy', + 'DeployKeys', + 'DeployTokens', + 'DockerfileTemplates', + 'Events', + 'Experiments', + 'GeoNodes', + 'GitignoreTemplates', + 'GitLabCIYMLTemplates', + 'Import', + 'InstanceLevelCICDVariables', + 'Keys', + 'License', + 'LicenseTemplates', + 'Lint', + 'Markdown', + 'Maven', + 'Metadata', + 'Migrations', + 'Namespaces', + 'NotificationSettings', + 'NPM', + 'NuGet', + 'PersonalAccessTokens', + 'PyPI', + 'RubyGems', + 'Search', + 'ServiceData', + 'SidekiqMetrics', + 'SidekiqQueues', + 'SnippetRepositoryStorageMoves', + 'Snippets', + 'Suggestions', + 'SystemHooks', + 'TodoLists', + 'Topics', + 'Branches', + 'CommitDiscussions', + 'Commits', + 'ContainerRegistry', + 'Deployments', + 'Environments', + 'ErrorTrackingClientKeys', + 'ErrorTrackingSettings', + 'ExternalStatusChecks', + 'FeatureFlags', + 'FeatureFlagUserLists', + 'FreezePeriods', + 'GitlabPages', + 'GoProxy', + 'Helm', + 'Integrations', + 'IssueAwardEmojis', + 'IssueDiscussions', + 'IssueIterationEvents', + 'IssueLabelEvents', + 'IssueLinks', + 'IssueMilestoneEvents', + 'IssueNoteAwardEmojis', + 'IssueNotes', + 'Issues', + 'IssuesStatistics', + 'IssueStateEvents', + 'IssueWeightEvents', + 'JobArtifacts', + 'Jobs', + 'MergeRequestApprovals', + 'MergeRequestAwardEmojis', + 'MergeRequestContextCommits', + 'MergeRequestDiscussions', + 'MergeRequestLabelEvents', + 'MergeRequestMilestoneEvents', + 'MergeRequestDraftNotes', + 'MergeRequestNotes', + 'MergeRequests', + 'MergeTrains', + 'PackageRegistry', + 'Packages', + 'PagesDomains', + 'Pipelines', + 'PipelineSchedules', + 'PipelineScheduleVariables', + 'PipelineTriggerTokens', + 'ProductAnalytics', + 'ProjectAccessRequests', + 'ProjectAccessTokens', + 'ProjectAliases', + 'ProjectBadges', + 'ProjectCustomAttributes', + 'ProjectDORA4Metrics', + 'ProjectHooks', + 'ProjectImportExport', + 'ProjectInvitations', + 'ProjectIssueBoards', + 'ProjectIterations', + 'ProjectLabels', + 'ProjectMembers', + 'ProjectMilestones', + 'ProjectProtectedEnvironments', + 'ProjectPushRules', + 'ProjectRelationsExport', + 'ProjectReleases', + 'ProjectRemoteMirrors', + 'ProjectRepositoryStorageMoves', + 'Projects', + 'ProjectSnippetAwardEmojis', + 'ProjectSnippetDiscussions', + 'ProjectSnippetNotes', + 'ProjectSnippets', + 'ProjectStatistics', + 'ProjectTemplates', + 'ProjectVariables', + 'ProjectVulnerabilities', + 'ProjectWikis', + 'ProtectedBranches', + 'ProtectedTags', + 'ReleaseLinks', + 'Repositories', + 'RepositoryFiles', + 'RepositorySubmodules', + 'ResourceGroups', + 'Runners', + 'SecureFiles', + 'Tags', + 'UserStarredMetricsDashboard', + 'EpicAwardEmojis', + 'EpicDiscussions', + 'EpicIssues', + 'EpicLabelEvents', + 'EpicLinks', + 'EpicNotes', + 'Epics', + 'GroupAccessRequests', + 'GroupAccessTokens', + 'GroupActivityAnalytics', + 'GroupBadges', + 'GroupCustomAttributes', + 'GroupDORA4Metrics', + 'GroupHooks', + 'GroupImportExports', + 'GroupInvitations', + 'GroupIssueBoards', + 'GroupIterations', + 'GroupLabels', + 'GroupLDAPLinks', + 'GroupMembers', + 'GroupMemberRoles', + 'GroupMilestones', + 'GroupProtectedEnvironments', + 'GroupPushRules', + 'GroupRelationExports', + 'GroupReleases', + 'GroupRepositoryStorageMoves', + 'Groups', + 'GroupSAMLIdentities', + 'GroupSCIMIdentities', + 'GroupVariables', + 'GroupWikis', + 'LinkedEpics', + 'UserCustomAttributes', + 'UserEmails', + 'UserGPGKeys', + 'UserImpersonationTokens', + 'Users', + 'UserSSHKeys', + 'Gitlab', + ].sort(); + + it('should import the Gitbeaker library though the global gitbeaker', async ({ page }) => { + const filepath = path.resolve(__dirname, 'assets', 'test-import.html'); + + await page.goto(`file://${filepath}`); + + // Run import JS + const importObject: Record = await page.evaluate('window.gitbeaker'); + + expect(Object.keys(importObject)).toMatchObject(keys); + }); +}); diff --git a/packages/rest/test/e2e/browser/resources/Projects.ts b/packages/rest/test/e2e/browser/resources/Projects.ts new file mode 100644 index 000000000..5446c66b8 --- /dev/null +++ b/packages/rest/test/e2e/browser/resources/Projects.ts @@ -0,0 +1,65 @@ +import path from 'path'; +import { expect, test as it } from '@playwright/test'; + +const { describe } = it; + +const { GITLAB_PERSONAL_ACCESS_TOKEN = '', GITLAB_URL = '', TEST_ID = Date.now() } = process.env; +const htmlFilePath = path.resolve(__dirname, '..', 'assets', 'test-import.html'); + +describe('Projects API', () => { + it('should create a project', async ({ page }) => { + await page.goto(`file://${htmlFilePath}`); + + const project = await page.evaluate( + ([host, token, testId]) => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const { Projects } = window.gitbeaker; + const resource = new Projects({ + host, + token, + }); + + return resource.create({ name: `Project Creation E2E - Browser ${testId}` }); + }, + [GITLAB_URL, GITLAB_PERSONAL_ACCESS_TOKEN, TEST_ID], + ); + + expect(project).toBeInstanceOf(Object); + expect(project.name).toEqual(`Project Creation E2E - Browser ${TEST_ID}`); + }); + + it('should upload a file to a project', async ({ page }) => { + await page.goto(`file://${htmlFilePath}`); + + const response: Record = await page.evaluate( + async ([host, token, testId]) => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const { Projects } = window.gitbeaker; + const resource = new Projects({ + host, + token, + }); + + const project = await resource.create({ + name: `Project File Upload E2E Test - Browser ${testId}`, + }); + + const blob = new Blob(['TESTING FILE UPLOAD'], { + type: 'text/plain', + }); + + const results = await resource.upload(project.id, { + content: blob, + filename: 'testfile.txt', + }); + + return results; + }, + [GITLAB_URL, GITLAB_PERSONAL_ACCESS_TOKEN, TEST_ID], + ); + + expect(Object.keys(response)).toMatchObject(['alt', 'url', 'full_path', 'markdown']); + }); +}); diff --git a/packages/node/test/integration/resources/Issues.ts b/packages/rest/test/integration/nodejs/resources/Issues.ts similarity index 51% rename from packages/node/test/integration/resources/Issues.ts rename to packages/rest/test/integration/nodejs/resources/Issues.ts index edf7a11e0..642d52338 100644 --- a/packages/node/test/integration/resources/Issues.ts +++ b/packages/rest/test/integration/nodejs/resources/Issues.ts @@ -1,46 +1,53 @@ -import { Issues, Projects } from '../../../src'; +import { Issues, Projects } from '../../../../src'; + +const { + GITLAB_PERSONAL_ACCESS_TOKEN = '', + GITLAB_URL = '', + TEST_ID = Date.now().toString(), +} = process.env; -const { TEST_ID = '' } = process.env; let issueAPI: InstanceType; let projectAPI: InstanceType; beforeAll(() => { issueAPI = new Issues({ - host: process.env.GITLAB_URL, - token: process.env.GITLAB_PERSONAL_ACCESS_TOKEN, + host: GITLAB_URL, + token: GITLAB_PERSONAL_ACCESS_TOKEN, }); projectAPI = new Projects({ - host: process.env.GITLAB_URL, - token: process.env.GITLAB_PERSONAL_ACCESS_TOKEN, + host: GITLAB_URL, + token: GITLAB_PERSONAL_ACCESS_TOKEN, }); }); describe('Issues.all', () => { beforeAll(async () => { - const project = await projectAPI.create({ name: `Issues All Integration Test ${TEST_ID}` }); + const project = await projectAPI.create({ + name: `Issues All Integration Test - NodeJS ${TEST_ID}`, + }); const newIssues: any[] = []; for (let i = 0; i < 10; i += 1) { newIssues.push( - issueAPI.create(project.id, { - title: `Issue.all Test ${i}`, + issueAPI.create(project.id, `Issue.all Test - NoteJS ${TEST_ID} ${i}`, { description: 'A test issue', }), ); } await Promise.all(newIssues); - }); + }, 20000); it('should get 10 issues using keyset pagination', async () => { const projects = await issueAPI.all({ - maxPages: 2, - perPage: 5, + orderBy: 'created_at', + search: TEST_ID, + sort: 'asc', simple: true, pagination: 'keyset', }); - expect(projects).toBeInstanceOf(Array); + expect(projects).toBeArray(); expect(projects).toHaveLength(10); }); }); diff --git a/packages/node/test/integration/resources/Lint.ts b/packages/rest/test/integration/nodejs/resources/Lint.ts similarity index 60% rename from packages/node/test/integration/resources/Lint.ts rename to packages/rest/test/integration/nodejs/resources/Lint.ts index f04e13494..5c95e1c5f 100644 --- a/packages/node/test/integration/resources/Lint.ts +++ b/packages/rest/test/integration/nodejs/resources/Lint.ts @@ -1,69 +1,68 @@ -import 'jest-extended'; -import { Lint, Projects } from '../../../src'; +import { Lint, Projects } from '../../../../src'; + +const { GITLAB_PERSONAL_ACCESS_TOKEN = '', GITLAB_URL = '', TEST_ID = Date.now() } = process.env; -const { TEST_ID = '' } = process.env; let projectAPI: InstanceType; let lintAPI: InstanceType; beforeEach(() => { lintAPI = new Lint({ - host: process.env.GITLAB_URL, - token: process.env.GITLAB_PERSONAL_ACCESS_TOKEN, + host: GITLAB_URL, + token: GITLAB_PERSONAL_ACCESS_TOKEN, }); projectAPI = new Projects({ - host: process.env.GITLAB_URL, - token: process.env.GITLAB_PERSONAL_ACCESS_TOKEN, + host: GITLAB_URL, + token: GITLAB_PERSONAL_ACCESS_TOKEN, }); }); describe('Lint.lint', () => { it('should return validate a lint without returning the merged_yaml', async () => { // Call the lint API, passing in a basic CI yaml, asking for the merged_yaml back. - const input_ci_yaml = ` + const yaml = ` test: stage: test script: - echo 1 `; - const result = await lintAPI.lint(input_ci_yaml); + const result = await lintAPI.lint(yaml); - expect(result).toBeInstanceOf(Object); + expect(result).toBeObject(); expect(result).toContainKeys(['status']); }); it('should return the merged yaml in a lint request when requested', async () => { // Call the lint API, passing in a basic CI yaml, asking for the merged_yaml back. - const input_ci_yaml = ` + const yaml = ` test: stage: test script: - echo 1 `; - const result = await lintAPI.lint(input_ci_yaml, { includeMergedYaml: true }); + const result = await lintAPI.lint(yaml, { includeMergedYaml: true }); - expect(result).toBeInstanceOf(Object); + expect(result).toBeObject(); expect(result).toContainKeys(['status', 'merged_yaml']); }); -}); -describe('Lint.lintWithNamespace', () => { - it('should return the merged yaml in a lint request when requested', async () => { + it('should return the merged yaml in a lint request for a specific project when requested', async () => { // Call the lint API for a project namespace, passing in a basic CI yaml. // The specific use case for `lintWithNamespace` vs `lint` is that it works with `local` // includes. However, that's gitlab-side functionality so we're not testing that here - // simply aiming to ensure that we can call this API correctly. - const project = await projectAPI.create({ name: `Lint API Test ${TEST_ID}` }); + const project = await projectAPI.create({ name: `Lint API Test - NodeJS ${TEST_ID}` }); - const input_ci_yaml = ` + const yaml = ` test: stage: test script: - echo 1 `; - const result = await lintAPI.lintWithNamespace(project.id, input_ci_yaml); - expect(result).toBeInstanceOf(Object); + const result = await lintAPI.lint(yaml, { projectId: project.id }); + + expect(result).toBeObject(); expect(result).toContainKeys(['valid', 'merged_yaml']); }); }); diff --git a/packages/rest/test/integration/nodejs/resources/Projects.ts b/packages/rest/test/integration/nodejs/resources/Projects.ts new file mode 100644 index 000000000..4f181db5e --- /dev/null +++ b/packages/rest/test/integration/nodejs/resources/Projects.ts @@ -0,0 +1,64 @@ +import { Projects } from '../../../../src'; + +const { GITLAB_PERSONAL_ACCESS_TOKEN = '', GITLAB_URL = '', TEST_ID = Date.now() } = process.env; + +let service: InstanceType; + +beforeEach(() => { + service = new Projects({ + host: GITLAB_URL, + token: GITLAB_PERSONAL_ACCESS_TOKEN, + }); +}); + +describe('Projects.create', () => { + it('should create a valid project', async () => { + const name = `Project Creation Integration Test - NODEJS ${TEST_ID}`; + const p = await service.create({ name }); + + expect(p).toBeObject(); + expect(p.name).toEqual(name); + }); +}); + +describe('Projects.all', () => { + beforeAll(async () => { + const newProjects: any[] = []; + + for (let i = 0; i < 10; i += 1) { + newProjects.push( + service.create({ name: `Project All Integration Test - NODEJS ${TEST_ID} ${i}` }), + ); + } + + await Promise.all(newProjects); + }, 20000); + + it('should get 10 projects using offset pagination', async () => { + const projects = await service.all({ + pagination: 'offset', + maxPages: 2, + perPage: 5, + simple: true, + }); + + expect(projects).toBeArray(); + expect(projects).toHaveLength(10); + }); +}); + +describe('Projects.upload', () => { + it('should upload a text file', async () => { + const project = await service.create({ + name: `Project Upload Integration Test Text File - NodeJS ${TEST_ID}`, + }); + + const blob = new Blob(['TESTING FILE UPLOAD'], { + type: 'text/plain', + }); + + const results = await service.upload(project.id, { content: blob, filename: 'testfile.txt' }); + + expect(results).toContainKeys(['alt', 'url', 'full_path', 'markdown']); + }); +}); diff --git a/packages/rest/test/unit/Requester.ts b/packages/rest/test/unit/Requester.ts new file mode 100644 index 000000000..4a208d6d3 --- /dev/null +++ b/packages/rest/test/unit/Requester.ts @@ -0,0 +1,325 @@ +import type { RequestOptions } from '@gitbeaker/requester-utils'; +import { defaultOptionsHandler, defaultRequestHandler, processBody } from '../../src/Requester'; + +global.fetch = jest.fn(); + +const MockFetch = global.fetch as jest.Mock; + +describe('processBody', () => { + it('should return a json object if type is application/json', async () => { + const output = await processBody({ + json() { + return Promise.resolve({ test: 5 }); + }, + headers: { + entries() { + return [['content-type', 'application/json']]; + }, + get() { + return 'application/json'; + }, + }, + } as unknown as Response); + + expect(output).toMatchObject({ test: 5 }); + }); + + it('should return a buffer if type is octet-stream, binary, or gzip', async () => { + const output = [ + processBody({ + arrayBuffer() { + return Promise.resolve(Buffer.alloc(0)); + }, + headers: { + entries() { + return [['content-type', 'application/octet-stream']]; + }, + get() { + return 'application/octet-stream'; + }, + }, + } as unknown as Response), + processBody({ + arrayBuffer() { + return Promise.resolve(Buffer.alloc(0)); + }, + headers: { + entries() { + return [['content-type', 'binary/octet-stream']]; + }, + get() { + return 'binary/octet-stream'; + }, + }, + } as unknown as Response), + processBody({ + arrayBuffer() { + return Promise.resolve(Buffer.alloc(0)); + }, + headers: { + entries() { + return [['content-type', 'image/png']]; + }, + get() { + return 'image/png'; + }, + }, + } as unknown as Response), + processBody({ + arrayBuffer() { + return Promise.resolve(Buffer.alloc(0)); + }, + headers: { + entries() { + return [['content-type', 'application/gzip']]; + }, + get() { + return 'application/gzip'; + }, + }, + } as unknown as Response), + ]; + + const fulfilled = await Promise.all(output); + + fulfilled.forEach((o) => expect(o).toBeInstanceOf(Buffer)); + }); + + it('should return a string if type is text/', async () => { + const output = await processBody({ + text() { + return Promise.resolve('test'); + }, + headers: { + entries() { + return [['content-type', 'text/plain']]; + }, + get() { + return 'text/plain'; + }, + }, + } as unknown as Response); + + expect(typeof output).toBe('string'); + expect(output).toEqual('test'); + }); + + it('should return a empty string when presented with an unknown content-type and empty body', async () => { + const output = await processBody({ + arrayBuffer() { + return Promise.resolve(Buffer.alloc(0)); + }, + headers: { + entries() { + return [['content-type', 'application/fake']]; + }, + get() { + return 'fake'; + }, + }, + } as unknown as Response); + + expect(output).toBeInstanceOf(Buffer); + expect(output.length).toBe(0); + }); +}); + +describe('defaultRequestHandler', () => { + it('should return an error with the statusText as the primary message and a description derived from a error property when response has an error property', async () => { + const stringBody = { error: 'msg' }; + + MockFetch.mockImplementationOnce(() => ({ + ok: false, + status: 501, + statusText: 'Really Bad Error', + headers: { + entries() { + return [['content-type', 'application/json']]; + }, + get() { + return 'application/json'; + }, + }, + json: () => Promise.resolve(stringBody), + text: () => Promise.resolve(JSON.stringify(stringBody)), + })); + + await expect(defaultRequestHandler('http://test.com', {} as RequestOptions)).rejects.toThrow({ + message: 'Really Bad Error', + name: 'Error', + cause: { + description: 'msg', + }, + }); + }); + + it('should return correct properties if request is valid', async () => { + MockFetch.mockImplementationOnce(() => ({ + json: () => Promise.resolve({}), + text: () => Promise.resolve(JSON.stringify({})), + ok: true, + status: 200, + headers: { + entries() { + return [['content-type', 'application/json']]; + }, + get() { + return 'application/json'; + }, + }, + })); + + const output = await defaultRequestHandler('http://test.com', {} as RequestOptions); + + expect(output).toMatchObject({ + body: {}, + headers: {}, + status: 200, + }); + }); + + it('should handle a prefix url correctly', async () => { + MockFetch.mockImplementationOnce(() => ({ + json: () => Promise.resolve({}), + text: () => Promise.resolve(JSON.stringify({})), + ok: true, + status: 200, + headers: { + entries() { + return [['content-type', 'application/json']]; + }, + get() { + return 'application/json'; + }, + }, + })); + + await defaultRequestHandler('testurl', { + prefixUrl: 'http://test.com', + } as RequestOptions); + + expect(MockFetch).toHaveBeenCalledWith(new URL('http://test.com/testurl'), { + mode: 'same-origin', + }); + }); + + it('should handle a searchParams correctly', async () => { + MockFetch.mockImplementationOnce(() => ({ + json: () => Promise.resolve({}), + text: () => Promise.resolve(JSON.stringify({})), + ok: true, + status: 200, + headers: { + entries() { + return [['content-type', 'application/json']]; + }, + get() { + return 'application/json'; + }, + }, + })); + + await defaultRequestHandler('testurl/123', { + searchParams: 'test=4', + prefixUrl: 'http://test.com', + } as RequestOptions); + + expect(MockFetch).toHaveBeenCalledWith(new URL('http://test.com/testurl/123?test=4'), { + mode: 'same-origin', + }); + }); + + it('should handle multipart prefixUrls correctly', async () => { + MockFetch.mockImplementation(() => ({ + json: () => Promise.resolve({}), + text: () => Promise.resolve(JSON.stringify({})), + ok: true, + status: 200, + headers: { + entries() { + return [['content-type', 'application/json']]; + }, + get() { + return 'application/json'; + }, + }, + })); + + await defaultRequestHandler('testurl/123', { + searchParams: 'test=4', + prefixUrl: 'http://test.com/projects', + } as RequestOptions); + + expect(MockFetch).toHaveBeenCalledWith(new URL('http://test.com/projects/testurl/123?test=4'), { + mode: 'same-origin', + }); + + await defaultRequestHandler('123/testurl', { + searchParams: 'test=4', + prefixUrl: 'http://test.com/projects', + } as RequestOptions); + + expect(MockFetch).toHaveBeenCalledWith(new URL('http://test.com/projects/123/testurl?test=4'), { + mode: 'same-origin', + }); + + await defaultRequestHandler('123/testurl', { + searchParams: 'test=4', + prefixUrl: 'http://test.com/projects/', + } as RequestOptions); + + expect(MockFetch).toHaveBeenCalledWith(new URL('http://test.com/projects/123/testurl?test=4'), { + mode: 'same-origin', + }); + }); +}); + +describe('defaultRequest', () => { + const service = { + headers: { test: '5' }, + url: 'testurl', + requestTimeout: 50, + rejectUnauthorized: true, + }; + + it('should not assign the agent property if given https url and not rejectUnauthorized', async () => { + const { agent } = await defaultOptionsHandler( + { ...service, url: 'https://test.com' }, + { method: 'post' }, + ); + + expect(agent).toBeUndefined(); + }); + + it('should not assign the agent property if given http url and rejectUnauthorized', async () => { + const { agent } = await defaultOptionsHandler( + { ...service, url: 'http://test.com' }, + { method: 'post' }, + ); + + expect(agent).toBeUndefined(); + }); + + it('should assign the agent property if given https url and rejectUnauthorized is false', async () => { + const { agent: agent1 } = await defaultOptionsHandler( + { ...service, url: 'https://test.com', rejectUnauthorized: false }, + { method: 'post' }, + ); + + expect(agent1).toBeDefined(); + + const { agent: agent2 } = await defaultOptionsHandler( + { ...service, url: 'https://test.com', rejectUnauthorized: true }, + { method: 'post' }, + ); + + expect(agent2).toBeUndefined(); + + const { agent: agent3 } = await defaultOptionsHandler( + { ...service, url: 'https://test.com' }, + { method: 'post' }, + ); + + expect(agent3).toBeUndefined(); + }); +}); diff --git a/packages/rest/test/unit/index.ts b/packages/rest/test/unit/index.ts new file mode 100644 index 000000000..84ce06400 --- /dev/null +++ b/packages/rest/test/unit/index.ts @@ -0,0 +1,8 @@ +import * as coreResources from '@gitbeaker/core'; +import * as resources from '../../src'; + +describe('Import', () => { + it('should re-export all resources from core', () => { + expect(Object.keys(resources)).toIncludeAllMembers(Object.keys(coreResources)); + }); +}); diff --git a/packages/rest/tsconfig.json b/packages/rest/tsconfig.json new file mode 100644 index 000000000..3b8abba79 --- /dev/null +++ b/packages/rest/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "paths": { + "@gitbeaker/*": ["../*/src"] + } + }, + "include": ["./**/*.ts"] +} diff --git a/prettier.config.cjs b/prettier.config.cjs new file mode 100644 index 000000000..273f6a692 --- /dev/null +++ b/prettier.config.cjs @@ -0,0 +1,15 @@ +module.exports = { + printWidth: 100, + singleQuote: true, + trailingComma: "all", + tabWidth: 2, + useTabs: false, + overrides: [ + { + files: "*.ts", + options: { + parser: "babel-ts" + } + } + ] +} diff --git a/scripts/auto-before-commit-changelog-plugin.js b/scripts/auto-before-commit-changelog-plugin.js index 0e76e3fde..c9e1fac56 100644 --- a/scripts/auto-before-commit-changelog-plugin.js +++ b/scripts/auto-before-commit-changelog-plugin.js @@ -13,7 +13,8 @@ module.exports = class LintDocsPlugin { */ apply(auto) { auto.hooks.beforeCommitChangelog.tapPromise(this.name, async () => { - await execPromise('yarn', ['lint:docs:fix']); + await execPromise('yarn', ['lint:fix']); + await execPromise('yarn', ['format:fix']); await execPromise('git', ['add', '.']); }); } diff --git a/scripts/docker-compose.yml b/scripts/docker-compose.yml index 5b602cf8c..62ab9c1a7 100644 --- a/scripts/docker-compose.yml +++ b/scripts/docker-compose.yml @@ -3,16 +3,16 @@ services: gitlab: image: 'gitlab/gitlab-ce:latest' container_name: 'gitlab' - entrypoint: - - '/bin/sh' - - '-c' - - "printf '#!/usr/bin/env ruby \nu = User.first \nu.admin = true \nu.save! \nt = PersonalAccessToken.new({ user: u, name: \"gitbeaker\", scopes: [\"api\", \"read_user\"]}) \nt.set_token(\"superduperstrongtoken\") \nt.save! \nputs t.token\n' > /opt/gitlab/embedded/service/gitlab-rails/db/fixtures/production/40_access_token.rb && /assets/wrapper" environment: GITLAB_URL: 'http://localhost:8080' - PERSONAL_ACCESS_TOKEN: 'superduperstrongtoken' + PERSONAL_ACCESS_TOKEN: 'gitbeaker' GITLAB_OMNIBUS_CONFIG: | gitlab_rails['monitoring_whitelist'] = ['0.0.0.0/0', '172.17.0.1']; - GITLAB_ROOT_PASSWORD: 'password' + GITLAB_ROOT_PASSWORD: 'gitbeaker' + entrypoint: + - '/bin/sh' + - '-c' + - "printf '#!/usr/bin/env ruby \nu = User.first \nu.admin = true \nu.save! \nt = PersonalAccessToken.new({ user: u, name: \"gitbeaker\", scopes: [\"api\", \"read_user\"]}) \nt.set_token(\"$${PERSONAL_ACCESS_TOKEN}\") \nt.save! \nputs t.token\n' > /opt/gitlab/embedded/service/gitlab-rails/db/fixtures/production/40_access_token.rb && /assets/wrapper" ports: - '8080:80' - '8443:443' diff --git a/scripts/shutdown.sh b/scripts/shutdown.sh new file mode 100644 index 000000000..6f3296666 --- /dev/null +++ b/scripts/shutdown.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +# use this as a startup script for a compute instance and it will self-destruct after specified interval +# (default = 20 min) +TIMEOUT=20 + +# schedule the instance to delete itself +echo "gcloud compute instances delete $(hostname) --zone northamerica-northeast1-b" | at Now + $TIMEOUT Minutes diff --git a/tsconfig.json b/tsconfig.base.json similarity index 72% rename from tsconfig.json rename to tsconfig.base.json index b7f29f891..9dc22083b 100644 --- a/tsconfig.json +++ b/tsconfig.base.json @@ -1,20 +1,15 @@ { "compilerOptions": { - "target": "es5", - "module": "es2015", + "target": "es2022", + "module": "es2022", "noEmit": true, "pretty": true, - "lib": ["es2016", "es2017", "dom"], "sourceMap": true, "inlineSources": true, "allowJs": true, "moduleResolution": "node", "resolveJsonModule": true, - "baseUrl": ".", - "paths": { - "@gitbeaker/*": ["packages/*/src"] - }, "strictPropertyInitialization": true, "strictNullChecks": true, @@ -25,5 +20,6 @@ "noUnusedLocals": true, "noUnusedParameters": true, "noImplicitReturns": true - } + }, + "files": ["./global.d.ts"] } diff --git a/yarn.lock b/yarn.lock index 3e2bba059..82f6c2233 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,9637 +1,11918 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.0.2.tgz#f3d9760bf30588c51408dbe7c05ff2bb13069307" - integrity sha512-sE8Gx+qSDMLoJvb3QarJJlDQK7SSY4rK3hxp4XsiANeFOmjU46ZI7Y9adAQRJrmbz8zbtZkp3mJTT+rGxtF0XA== - dependencies: - "@jridgewell/trace-mapping" "^0.2.2" - sourcemap-codec "1.4.8" - -"@auto-it/all-contributors@^10.27.1": - version "10.32.5" - resolved "https://registry.yarnpkg.com/@auto-it/all-contributors/-/all-contributors-10.32.5.tgz#67cf206fa5fc62ce9604ca9d7376084e55a3ee1b" - integrity sha512-v5TCcNZTSjFp305QubemHv+VSRvWtKttlkZhkJ8R9kEfRDzpOIbMZTNqtM/6pO/MiRmwJHWmHUyTuUR2CGG3gg== - dependencies: - "@auto-it/bot-list" "10.32.5" - "@auto-it/core" "10.32.5" - "@octokit/rest" "^18.0.0" - all-contributors-cli "6.19.0" - anymatch "^3.1.1" - await-to-js "^3.0.0" - endent "^2.0.1" - env-ci "^5.0.1" - fp-ts "^2.5.3" - fromentries "^1.2.0" - io-ts "^2.1.2" - tslib "2.1.0" - -"@auto-it/bot-list@10.32.5": - version "10.32.5" - resolved "https://registry.yarnpkg.com/@auto-it/bot-list/-/bot-list-10.32.5.tgz#4d866ac1c156c4aefb3a175c96fde2b8aa790171" - integrity sha512-bVMcUZ3J876gDsWkz3/PTfstHGLl/K/RanJmJkXne1MNxaowK3IUXfiPV4rYpPMJLDM3bYA1yzsA5eP+K8FT2Q== - -"@auto-it/core@10.32.5", "@auto-it/core@^10.27.1": - version "10.32.5" - resolved "https://registry.yarnpkg.com/@auto-it/core/-/core-10.32.5.tgz#c7debfc259156b8b2d45dcd67dae43b9f205e76b" - integrity sha512-Ihsp4WhP7SaT1cm+GxQQNmP6szUIdSCXxhUH1+IwKjndq4e4rAv3xDuTR5pfXb64ysKdUlnG1xJrtNaHEiMHLg== - dependencies: - "@auto-it/bot-list" "10.32.5" - "@endemolshinegroup/cosmiconfig-typescript-loader" "^3.0.2" - "@octokit/plugin-enterprise-compatibility" "^1.2.2" - "@octokit/plugin-retry" "^3.0.1" - "@octokit/plugin-throttling" "^3.2.0" - "@octokit/rest" "^18.0.0" - await-to-js "^3.0.0" - chalk "^4.0.0" - cosmiconfig "7.0.0" - deepmerge "^4.0.0" - dotenv "^8.0.0" - endent "^2.0.1" - enquirer "^2.3.4" - env-ci "^5.0.1" - fast-glob "^3.1.1" - fp-ts "^2.5.3" - fromentries "^1.2.0" - gitlog "^4.0.3" - https-proxy-agent "^5.0.0" - import-cwd "^3.0.0" - import-from "^3.0.0" - io-ts "^2.1.2" - lodash.chunk "^4.2.0" - log-symbols "^4.0.0" - node-fetch "2.6.1" - parse-author "^2.0.0" - parse-github-url "1.0.2" - pretty-ms "^7.0.0" - requireg "^0.2.2" - semver "^7.0.0" - signale "^1.4.0" - tapable "^2.2.0" - terminal-link "^2.1.1" - tinycolor2 "^1.4.1" - ts-node "^9.1.1" - tslib "2.1.0" - type-fest "^0.21.1" - typescript-memoize "^1.0.0-alpha.3" - url-join "^4.0.0" - -"@auto-it/first-time-contributor@^10.27.1": - version "10.32.5" - resolved "https://registry.yarnpkg.com/@auto-it/first-time-contributor/-/first-time-contributor-10.32.5.tgz#887bf811c5d461753889e7d721c8ac15b55c868d" - integrity sha512-HGw6U7h0SJ1SgQAFUFVe8TdiImTMDMz80aUiZY0tqOq3oBkSh+BNS/fr9jEYFGPhTuJiAckX+3HGtM0lU0rXhA== - dependencies: - "@auto-it/bot-list" "10.32.5" - "@auto-it/core" "10.32.5" - array.prototype.flatmap "^1.2.2" - endent "^2.0.1" - tslib "2.1.0" - url-join "^4.0.0" - -"@auto-it/npm@10.32.5": - version "10.32.5" - resolved "https://registry.yarnpkg.com/@auto-it/npm/-/npm-10.32.5.tgz#82f091d51c777acba7a4cf42e7d2252c4ec02247" - integrity sha512-smcekJrZ9cWQvrNOyd+WdiMzz7ISpqfgfQAublAFHCP3dKdbSuegX4npzPwFMwjqO0Th+izDbtzTm7ULyKkWkw== - dependencies: - "@auto-it/core" "10.32.5" - "@auto-it/package-json-utils" "10.32.5" - await-to-js "^3.0.0" - endent "^2.0.1" - env-ci "^5.0.1" - fp-ts "^2.5.3" - get-monorepo-packages "^1.1.0" - io-ts "^2.1.2" - registry-url "^5.1.0" - semver "^7.0.0" - tslib "2.1.0" - typescript-memoize "^1.0.0-alpha.3" - url-join "^4.0.0" - user-home "^2.0.0" - -"@auto-it/package-json-utils@10.32.5": - version "10.32.5" - resolved "https://registry.yarnpkg.com/@auto-it/package-json-utils/-/package-json-utils-10.32.5.tgz#f61498cb4bca40a33377cbde7b79b0b623b85a3d" - integrity sha512-cM93gYH5dDk8BtwZbk9g1BRdSFjEFcogUN/FH8ajPNfPsygiYZM7ItSV6+xUD2xZRcXeO/2qpeMXp1aeC3XGug== - dependencies: - parse-author "^2.0.0" - parse-github-url "1.0.2" - -"@auto-it/released@10.32.5", "@auto-it/released@^10.27.1": - version "10.32.5" - resolved "https://registry.yarnpkg.com/@auto-it/released/-/released-10.32.5.tgz#c8a51163f5bd9202ea7c464d2fed1a9f1b667bdf" - integrity sha512-3PLjy2cK5h0Hcpm781X/5MhQspfXTG6pm2m8JH4QbRrbPdC1fCQpAoSZM3oDUCrElnHXL/VikLdtvLWazLPK/A== - dependencies: - "@auto-it/bot-list" "10.32.5" - "@auto-it/core" "10.32.5" - deepmerge "^4.0.0" - fp-ts "^2.5.3" - io-ts "^2.1.2" - tslib "2.1.0" - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" - integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== - dependencies: - "@babel/highlight" "^7.16.0" - -"@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/compat-data@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.0.tgz#ea269d7f78deb3a7826c39a4048eecda541ebdaa" - integrity sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew== - -"@babel/compat-data@^7.16.4": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" - integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== - -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.7.5": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" - integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.0" - "@babel/helper-compilation-targets" "^7.16.0" - "@babel/helper-module-transforms" "^7.16.0" - "@babel/helpers" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - -"@babel/core@^7.8.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.0.tgz#16b8772b0a567f215839f689c5ded6bb20e864d5" - integrity sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA== - dependencies: - "@ampproject/remapping" "^2.0.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.0" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.17.0" - "@babel/parser" "^7.17.0" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.0" - "@babel/types" "^7.17.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - -"@babel/generator@^7.16.0", "@babel/generator@^7.7.2": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" - integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== - dependencies: - "@babel/types" "^7.16.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/generator@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.0.tgz#7bd890ba706cd86d3e2f727322346ffdbf98f65e" - integrity sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw== - dependencies: - "@babel/types" "^7.17.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-compilation-targets@^7.16.0": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0" - integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA== - dependencies: - "@babel/compat-data" "^7.16.0" - "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.17.5" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" - integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== - dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" - -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" - integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== - dependencies: - "@babel/helper-get-function-arity" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/types" "^7.16.0" - -"@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== - dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-get-function-arity@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" - integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-get-function-arity@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" - integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-hoist-variables@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" - integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-member-expression-to-functions@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" - integrity sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-module-imports@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" - integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-transforms@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5" - integrity sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA== - dependencies: - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-replace-supers" "^7.16.0" - "@babel/helper-simple-access" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/helper-validator-identifier" "^7.15.7" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" - -"@babel/helper-module-transforms@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" - integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-optimise-call-expression@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" - integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw== - dependencies: - "@babel/types" "^7.16.0" - -"@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.8.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" - integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== - -"@babel/helper-replace-supers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz#73055e8d3cf9bcba8ddb55cad93fedc860f68f17" - integrity sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.16.0" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" - -"@babel/helper-simple-access@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517" - integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-simple-access@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" - integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-split-export-declaration@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" - integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-validator-identifier@^7.15.7": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" - integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helpers@^7.16.0": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.3.tgz#27fc64f40b996e7074dc73128c3e5c3e7f55c43c" - integrity sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w== - dependencies: - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.3" - "@babel/types" "^7.16.0" - -"@babel/helpers@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.0.tgz#79cdf6c66a579f3a7b5e739371bc63ca0306886b" - integrity sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.0" - "@babel/types" "^7.17.0" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" - integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== - dependencies: - "@babel/helper-validator-identifier" "^7.15.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.16.7": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" - integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.16.3": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.3.tgz#271bafcb811080905a119222edbc17909c82261d" - integrity sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw== - -"@babel/parser@^7.16.7", "@babel/parser@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.0.tgz#f0ac33eddbe214e4105363bb17c3341c5ffcc43c" - integrity sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw== - -"@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.8.3": - 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-import-meta@^7.8.3": - 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-logical-assignment-operators@^7.8.3": - 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.8.3": - 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-top-level-await@^7.8.3": - 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.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz#2feeb13d9334cc582ea9111d3506f773174179bb" - integrity sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/runtime@^7.14.6", "@babel/runtime@^7.7.6": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" - integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.16.0", "@babel/template@^7.3.3": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" - integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/types" "^7.16.0" - -"@babel/template@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3", "@babel/traverse@^7.7.2": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787" - integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.0" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-hoist-variables" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/parser" "^7.16.3" - "@babel/types" "^7.16.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/traverse@^7.16.7", "@babel/traverse@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.0.tgz#3143e5066796408ccc880a33ecd3184f3e75cd30" - integrity sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.0" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.0" - "@babel/types" "^7.17.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" - integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== - dependencies: - "@babel/helper-validator-identifier" "^7.15.7" - to-fast-properties "^2.0.0" - -"@babel/types@^7.16.7", "@babel/types@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" - integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - -"@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== - -"@cspotcode/source-map-consumer@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" - integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== - -"@cspotcode/source-map-support@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" - integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== - dependencies: - "@cspotcode/source-map-consumer" "0.8.0" - -"@endemolshinegroup/cosmiconfig-typescript-loader@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz#eea4635828dde372838b0909693ebd9aafeec22d" - integrity sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA== - dependencies: - lodash.get "^4" - make-error "^1" - ts-node "^9" - tslib "^2" - -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@gar/promisify@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" - integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw== - -"@gar/promisify@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - -"@hapi/hoek@^9.0.0": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17" - integrity sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw== - -"@hapi/topo@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@hutson/parse-repository-url@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" - integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== - -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== - -"@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": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.4.6.tgz#0742e6787f682b22bdad56f9db2a8a77f6a86107" - integrity sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA== - dependencies: - "@jest/types" "^27.4.2" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^27.4.6" - jest-util "^27.4.2" - slash "^3.0.0" - -"@jest/core@^27.4.7": - version "27.4.7" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.4.7.tgz#84eabdf42a25f1fa138272ed229bcf0a1b5e6913" - integrity sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg== - dependencies: - "@jest/console" "^27.4.6" - "@jest/reporters" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.8.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^27.4.2" - jest-config "^27.4.7" - jest-haste-map "^27.4.6" - jest-message-util "^27.4.6" - jest-regex-util "^27.4.0" - jest-resolve "^27.4.6" - jest-resolve-dependencies "^27.4.6" - jest-runner "^27.4.6" - jest-runtime "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" - jest-validate "^27.4.6" - jest-watcher "^27.4.6" - micromatch "^4.0.4" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.4.6.tgz#1e92885d64f48c8454df35ed9779fbcf31c56d8b" - integrity sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg== - dependencies: - "@jest/fake-timers" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - jest-mock "^27.4.6" - -"@jest/fake-timers@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.4.6.tgz#e026ae1671316dbd04a56945be2fa251204324e8" - integrity sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A== - dependencies: - "@jest/types" "^27.4.2" - "@sinonjs/fake-timers" "^8.0.1" - "@types/node" "*" - jest-message-util "^27.4.6" - jest-mock "^27.4.6" - jest-util "^27.4.2" - -"@jest/globals@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.4.6.tgz#3f09bed64b0fd7f5f996920258bd4be8f52f060a" - integrity sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/types" "^27.4.2" - expect "^27.4.6" - -"@jest/reporters@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.4.6.tgz#b53dec3a93baf9b00826abf95b932de919d6d8dd" - integrity sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-haste-map "^27.4.6" - jest-resolve "^27.4.6" - jest-util "^27.4.2" - jest-worker "^27.4.6" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" - -"@jest/schemas@^28.0.2": - version "28.0.2" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.0.2.tgz#08c30df6a8d07eafea0aef9fb222c5e26d72e613" - integrity sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA== - dependencies: - "@sinclair/typebox" "^0.23.3" - -"@jest/source-map@^27.4.0": - version "27.4.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.4.0.tgz#2f0385d0d884fb3e2554e8f71f8fa957af9a74b6" - integrity sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - -"@jest/test-result@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.4.6.tgz#b3df94c3d899c040f602cea296979844f61bdf69" - integrity sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ== - dependencies: - "@jest/console" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz#447339b8a3d7b5436f50934df30854e442a9d904" - integrity sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw== - dependencies: - "@jest/test-result" "^27.4.6" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" - jest-runtime "^27.4.6" - -"@jest/transform@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.4.6.tgz#153621940b1ed500305eacdb31105d415dc30231" - integrity sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.4.2" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" - jest-regex-util "^27.4.0" - jest-util "^27.4.2" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^27.4.2": - version "27.4.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.4.2.tgz#96536ebd34da6392c2b7c7737d693885b5dd44a5" - integrity sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" - chalk "^4.0.0" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz#b876e3feefb9c8d3aa84014da28b5e52a0640d72" - integrity sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg== - -"@jridgewell/trace-mapping@^0.2.2": - version "0.2.6" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.2.6.tgz#5eac4bea1b56e073471c6f021582bdb986c4b8b7" - integrity sha512-rVJf5dSMEBxnDEwtAT5x8+p6tZ+xU6Ocm+cR1MYL2gMsRi4MMzVf9Pvq6JaxIsEeKAyYmo2U+yPQN4QfdTfFnA== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - sourcemap-codec "1.4.8" - -"@lerna/add@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-5.1.8.tgz#9710a838cb1616cf84c47e85aab5a7cc5a36ce21" - integrity sha512-ABplk8a5MmiT8lG1b9KHijRUwj/nOePMuezBHjJEpNeQ8Bw5w3IV/6hpdmApx/w1StBwWWf0UG42klrxXlfl/g== - dependencies: - "@lerna/bootstrap" "5.1.8" - "@lerna/command" "5.1.8" - "@lerna/filter-options" "5.1.8" - "@lerna/npm-conf" "5.1.8" - "@lerna/validation-error" "5.1.8" - dedent "^0.7.0" - npm-package-arg "^8.1.0" - p-map "^4.0.0" - pacote "^13.4.1" - semver "^7.3.4" - -"@lerna/bootstrap@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-5.1.8.tgz#b8664d7eef6bd1072fe3ea5285848cc0c590a9bc" - integrity sha512-/QZJc6aRxi6csSR59jdqRXPFh33fbn60F1k/SWtCCELGkZub23fAPLKaO7SlMcyghN3oKlfTfVymu/NWEcptJQ== - dependencies: - "@lerna/command" "5.1.8" - "@lerna/filter-options" "5.1.8" - "@lerna/has-npm-version" "5.1.8" - "@lerna/npm-install" "5.1.8" - "@lerna/package-graph" "5.1.8" - "@lerna/pulse-till-done" "5.1.8" - "@lerna/rimraf-dir" "5.1.8" - "@lerna/run-lifecycle" "5.1.8" - "@lerna/run-topologically" "5.1.8" - "@lerna/symlink-binary" "5.1.8" - "@lerna/symlink-dependencies" "5.1.8" - "@lerna/validation-error" "5.1.8" - "@npmcli/arborist" "5.2.0" - dedent "^0.7.0" - get-port "^5.1.1" - multimatch "^5.0.0" - npm-package-arg "^8.1.0" - npmlog "^6.0.2" - p-map "^4.0.0" - p-map-series "^2.1.0" - p-waterfall "^2.1.1" - semver "^7.3.4" - -"@lerna/changed@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-5.1.8.tgz#7db0c16703440ba6bf53ad3719fd13ba748aaf27" - integrity sha512-JA9jX9VTHrwSMRJTgLEzdyyx4zi35X0yP6fUUFuli9a0zrB4HV4IowSn1XM03H8iebbDLB0eWBbosqhYwSP8Sw== - dependencies: - "@lerna/collect-updates" "5.1.8" - "@lerna/command" "5.1.8" - "@lerna/listable" "5.1.8" - "@lerna/output" "5.1.8" - -"@lerna/check-working-tree@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-5.1.8.tgz#9529006f1c57cf1d783539063a381777aa983054" - integrity sha512-3QyiV75cYt9dtg9JhUt+Aiyk44mFjlyqIIJ/XZ2Cp/Xcwws/QrNKOTs5iYFX5XWzlpTgotOHcu1MH/mY55Czlw== - dependencies: - "@lerna/collect-uncommitted" "5.1.8" - "@lerna/describe-ref" "5.1.8" - "@lerna/validation-error" "5.1.8" - -"@lerna/child-process@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-5.1.8.tgz#4350eb58fe4c478000317a65f62985d212ee4f89" - integrity sha512-P0o4Y/sdiUJ53spZpaVv53NdAcl15UAi5//W3uT2T250xQPlVROwKy11S3Wzqglh94FYdi6XUy293x1uwBlFPw== - dependencies: - chalk "^4.1.0" - execa "^5.0.0" - strong-log-transformer "^2.1.0" - -"@lerna/clean@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-5.1.8.tgz#dbf4634bbc3f5c526eec38c850eaa6882bb6eb2c" - integrity sha512-xMExZgjan5/8ZTjJkZoLoTKY1MQOMk7W1YXslbg9BpLevBycPk041MlLauzCyO8XdOpqpVnFCg/9W66fltqmQg== - dependencies: - "@lerna/command" "5.1.8" - "@lerna/filter-options" "5.1.8" - "@lerna/prompt" "5.1.8" - "@lerna/pulse-till-done" "5.1.8" - "@lerna/rimraf-dir" "5.1.8" - p-map "^4.0.0" - p-map-series "^2.1.0" - p-waterfall "^2.1.1" - -"@lerna/cli@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-5.1.8.tgz#b094a2d2eb70522ced850da60c94a2e0bf8c5adc" - integrity sha512-0Ghhd9M9QvY6qZtnjTq5RHOIac2ttsW2VNFLFso8ov3YV+rJF4chLhyVaVBvLSA+5ZhwFH+xQ3/yeUx1tDO8GA== - dependencies: - "@lerna/global-options" "5.1.8" - dedent "^0.7.0" - npmlog "^6.0.2" - yargs "^16.2.0" - -"@lerna/collect-uncommitted@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-5.1.8.tgz#1caf374998402883b4a345dffed8c1cddd57e76a" - integrity sha512-pRsIYu82A3DxLahQI/3azoi/kjj6QSSHHAOx4y1YVefeDCaVtAm8aesNbpnyNVfJrie/1Gt5GMEpjfm/KScjlw== - dependencies: - "@lerna/child-process" "5.1.8" - chalk "^4.1.0" - npmlog "^6.0.2" - -"@lerna/collect-updates@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-5.1.8.tgz#b4d2f1a333abb690b74e4c5def45763347070754" - integrity sha512-ZPQmYKzwDJ4T+t2fRUI/JjaCzC8Lv02kWIeSXrcIG+cf2xrbM0vK4iQMAKhagTsiWt9hrFwvtMgLp4a6+Ht8Qg== - dependencies: - "@lerna/child-process" "5.1.8" - "@lerna/describe-ref" "5.1.8" - minimatch "^3.0.4" - npmlog "^6.0.2" - slash "^3.0.0" - -"@lerna/command@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-5.1.8.tgz#0dcca15a7148ce3326178c7358d5f907430dc328" - integrity sha512-j/Q++APvkyN2t8GqOpK+4OxH1bB7OZGVWIKh0JQlwbtqH1Y06wlSyNdwpPmv8h1yO9fS1pY/xHwFbs1IicxwzA== - dependencies: - "@lerna/child-process" "5.1.8" - "@lerna/package-graph" "5.1.8" - "@lerna/project" "5.1.8" - "@lerna/validation-error" "5.1.8" - "@lerna/write-log-file" "5.1.8" - clone-deep "^4.0.1" - dedent "^0.7.0" - execa "^5.0.0" - is-ci "^2.0.0" - npmlog "^6.0.2" - -"@lerna/conventional-commits@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-5.1.8.tgz#5d6f87ebb024d4468024b22ced0ea948246d593f" - integrity sha512-UduSVDp/+2WlEV6ZO5s7yTzkfhYyPdEsqR6aaUtIJZe9wejcCK4Lc3BJ2BAYIOdtDArNY2CJPsz1LYvFDtPRkw== - dependencies: - "@lerna/validation-error" "5.1.8" - conventional-changelog-angular "^5.0.12" - conventional-changelog-core "^4.2.2" - conventional-recommended-bump "^6.1.0" - fs-extra "^9.1.0" - get-stream "^6.0.0" - npm-package-arg "^8.1.0" - npmlog "^6.0.2" - pify "^5.0.0" - semver "^7.3.4" - -"@lerna/create-symlink@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-5.1.8.tgz#36b3cb34d3e434f021a878c7353a6dd0ccacd6bd" - integrity sha512-5acQITDsJ7dqywPRrF1mpTUPm/EXFfiv/xF6zX+ySUjp4h0Zhhnsm8g2jFdRPDSjIxFD0rV/5iU4X6qmflXlAg== - dependencies: - cmd-shim "^4.1.0" - fs-extra "^9.1.0" - npmlog "^6.0.2" - -"@lerna/create@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-5.1.8.tgz#ccb485e460d4d9f1b34cbe74e79b0261c710af3a" - integrity sha512-n9qLLeg1e0bQeuk8pA8ELEP05Ktl50e1EirdXGRqqvaXdCn41nYHo4PilUgb77/o/t3Z5N4/ic+0w8OvGVakNg== - dependencies: - "@lerna/child-process" "5.1.8" - "@lerna/command" "5.1.8" - "@lerna/npm-conf" "5.1.8" - "@lerna/validation-error" "5.1.8" - dedent "^0.7.0" - fs-extra "^9.1.0" - globby "^11.0.2" - init-package-json "^2.0.2" - npm-package-arg "^8.1.0" - p-reduce "^2.1.0" - pacote "^13.4.1" - pify "^5.0.0" - semver "^7.3.4" - slash "^3.0.0" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^3.0.0" - whatwg-url "^8.4.0" - yargs-parser "20.2.4" - -"@lerna/describe-ref@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-5.1.8.tgz#b0f5d252f97d9d96ca404f2b99c91d426f2b7577" - integrity sha512-/u5b2ho09icPcvPb1mlh/tPC07nSFc1cvvFjM9Yg5kfVs23vzVWeA8y0Bk5djlaaSzyHECyqviriX0aoaY47Wg== - dependencies: - "@lerna/child-process" "5.1.8" - npmlog "^6.0.2" - -"@lerna/diff@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-5.1.8.tgz#112f68a99025e5732d4ec8ec6cb6db323555846a" - integrity sha512-BLoi6l/v8p43IkAHTkpjZ4Kq27kYK7iti6y6gYoZuljSwNj38TjgqRb2ohHezQ5c0KFAj8xHEOuZM3Ou6tGyTQ== - dependencies: - "@lerna/child-process" "5.1.8" - "@lerna/command" "5.1.8" - "@lerna/validation-error" "5.1.8" - npmlog "^6.0.2" - -"@lerna/exec@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-5.1.8.tgz#a5a808ebb40c74c1a339e73816ea1aa1c53dc284" - integrity sha512-U+owlBKoAUfULqRz0oBtHx/I6tYQy9I7xfPP0GoaXa8lpF7esnpCxsJG8GpdzFqIS30o6a2PtyHvp4jkrQF8Zw== - dependencies: - "@lerna/child-process" "5.1.8" - "@lerna/command" "5.1.8" - "@lerna/filter-options" "5.1.8" - "@lerna/profiler" "5.1.8" - "@lerna/run-topologically" "5.1.8" - "@lerna/validation-error" "5.1.8" - p-map "^4.0.0" - -"@lerna/filter-options@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-5.1.8.tgz#cb18431a92a138e9428af0217b01bfa89adb9b13" - integrity sha512-ene6xj1BRSFgIgcVg9xABp1cCiRnqm3Uetk9InxOtECbofpSDa7cQy5lsPv6GGAgXFbT91SURQiipH9FAOP+yQ== - dependencies: - "@lerna/collect-updates" "5.1.8" - "@lerna/filter-packages" "5.1.8" - dedent "^0.7.0" - npmlog "^6.0.2" - -"@lerna/filter-packages@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-5.1.8.tgz#5dd32c05c646f4d3ad55adde8e67d60661c2bead" - integrity sha512-2pdtZ+I2Sb+XKfUa/q8flVUyaY0hhwqFYMXll7Nut7Phb1w1TtkEXc2/N0Ac1yia6qSJB/5WrsbAcLF/ITp1vA== - dependencies: - "@lerna/validation-error" "5.1.8" - multimatch "^5.0.0" - npmlog "^6.0.2" - -"@lerna/get-npm-exec-opts@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.1.8.tgz#71ea0a8760231322c5a4fe103aab659e3de062a3" - integrity sha512-oujoIkEDDVK2+5ooPMEPI+xGs/iwPmGJ63AZu1h7P42YU9tHKQmF5yPybF3Jn99W8+HggM6APUGiX+5oHRvKXA== - dependencies: - npmlog "^6.0.2" - -"@lerna/get-packed@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-5.1.8.tgz#c8020be24befbe018fc535cf513efa5863a4a1a2" - integrity sha512-3vabIFlfUFQPbFnlOaDCNY4p7mufrhIFPoXxWu15JnjJsSDf9UB2a98xX43xNlxjgZLvnLai3bhCNfrKonI4Kw== - dependencies: - fs-extra "^9.1.0" - ssri "^8.0.1" - tar "^6.1.0" - -"@lerna/github-client@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-5.1.8.tgz#1b0a3d5ae9996d56e7977d319d5b95ec2c24df8f" - integrity sha512-y1oweMZ9xc/htIHy42hy2FuMUR/LS3CQlslXG9PAHzl5rE1VDDjvSv61kS50ZberGfB9xmkCxqH+2LgROG9B1A== - dependencies: - "@lerna/child-process" "5.1.8" - "@octokit/plugin-enterprise-rest" "^6.0.1" - "@octokit/rest" "^18.1.0" - git-url-parse "^12.0.0" - npmlog "^6.0.2" - -"@lerna/gitlab-client@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-5.1.8.tgz#84e9063c79b0543570ca02ad50f7ad54446ab78d" - integrity sha512-/EMKdkGnBU4ldyAQ4pXp2TKi1znvY3MiCULt8Hy42p4HhfFl/AxZYDovQYfop1NHVk29BQrGHfvlpyBNqZ2a8g== - dependencies: - node-fetch "^2.6.1" - npmlog "^6.0.2" - whatwg-url "^8.4.0" - -"@lerna/global-options@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-5.1.8.tgz#ba760c9a9a686bc0109d9b09017737a7365b7649" - integrity sha512-VCfTilGh0O4T6Lk4DKYA5cUl1kPjwFfRUS/GSpdJx0Lf/dyDbFihrmTHefgUe9N2/nTQySDIdPk9HBr45tozWQ== - -"@lerna/has-npm-version@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-5.1.8.tgz#9ea80ee3616006df1094cc18c1bc58f3f1008299" - integrity sha512-yN5j9gje2ND8zQf4tN52QDQ/yFb24o9Kasm4PZm99FzBURRIwFWCnvo3edOMaiJg0DpA660L+Kq9G0L+ZRKRZQ== - dependencies: - "@lerna/child-process" "5.1.8" - semver "^7.3.4" - -"@lerna/import@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-5.1.8.tgz#b1eebfaab1df618ec0a92a639c45010c1fcd1098" - integrity sha512-m1+TEhlgS9i14T7o0/8o6FMZJ1O2PkQdpCjqUa5xdLITqvPozoMNujNgiX3ZVLg/XcFOjMtbCsYtspqtKyEsMQ== - dependencies: - "@lerna/child-process" "5.1.8" - "@lerna/command" "5.1.8" - "@lerna/prompt" "5.1.8" - "@lerna/pulse-till-done" "5.1.8" - "@lerna/validation-error" "5.1.8" - dedent "^0.7.0" - fs-extra "^9.1.0" - p-map-series "^2.1.0" - -"@lerna/info@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/info/-/info-5.1.8.tgz#99aab0f599cf9d9f1f144dbc110e38f6337e0a77" - integrity sha512-VNCBNOrd5Q1iv1MOF++PzMrdAnTn6KTDbb5hcXHdWBRZUuOs3QOwVYGzAlTFMvwVmmlcER4z8BYyUsbxk3sIdQ== - dependencies: - "@lerna/command" "5.1.8" - "@lerna/output" "5.1.8" - envinfo "^7.7.4" - -"@lerna/init@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-5.1.8.tgz#7ad1433d50e283ba01cae84f9640cf99b0a8a047" - integrity sha512-vEMnq/70u/c031/vURA4pZSxlBRAwjg7vOP7mt9M4dmKz/vkVnQ/5Ig9K0TKqC31hQg957/4m20obYEiFgC3Pw== - dependencies: - "@lerna/child-process" "5.1.8" - "@lerna/command" "5.1.8" - fs-extra "^9.1.0" - p-map "^4.0.0" - write-json-file "^4.3.0" - -"@lerna/link@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-5.1.8.tgz#f9d5736640f524c9f255007d3d7b3792846042ef" - integrity sha512-qOtZiMzB9JYyNPUlvpqTxh0Z1EmNVde8pFUIYybv+s3btrKEBPgsvvrOrob/mha3QJxnwcPDPjHt/wCHFxLruA== - dependencies: - "@lerna/command" "5.1.8" - "@lerna/package-graph" "5.1.8" - "@lerna/symlink-dependencies" "5.1.8" - p-map "^4.0.0" - slash "^3.0.0" - -"@lerna/list@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-5.1.8.tgz#72268a7ab4042f4d4463cc41e247c1473ad7c7cf" - integrity sha512-fVN9o/wKtgcOyuYwvYTg2HI6ORX2kOoBkCJ+PI/uZ/ImwLMTJ2Bf8i/Vsysl3bLFHhQFglzPZ7V1SQP/ku0Sdw== - dependencies: - "@lerna/command" "5.1.8" - "@lerna/filter-options" "5.1.8" - "@lerna/listable" "5.1.8" - "@lerna/output" "5.1.8" - -"@lerna/listable@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-5.1.8.tgz#d101e7a6c1bb9df670b4514422621684edab7770" - integrity sha512-nQ/40cbVZLFBv8o9Dz6ivHFZhosfDTYOPm4oHNu0xdexaTXWz5bQUlM4HtOm7K0dJ1fvLEVqiQNAuFSEhARt9g== - dependencies: - "@lerna/query-graph" "5.1.8" - chalk "^4.1.0" - columnify "^1.6.0" - -"@lerna/log-packed@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-5.1.8.tgz#22e02f41b99e7202a45b066f8747dc8451e0b18e" - integrity sha512-alaCIzCtKV5oKyu632emda0hUQMw/BcL2U3v4ObLu90sU8P7mu6TipKRvR9OZxOLDnZGnPE7CMHSU8gsQoIasw== - dependencies: - byte-size "^7.0.0" - columnify "^1.6.0" - has-unicode "^2.0.1" - npmlog "^6.0.2" - -"@lerna/npm-conf@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-5.1.8.tgz#a36b216c1af65c0524c4278b2f53ed50295110ed" - integrity sha512-d/pIcO4RwO3fXNlUbhQ6+qwULxGSiW/xcOtiETVf4ZfjaDqjkCaIxZaeZfm5gWDtII5klpQn3f2d71FCnZG5lw== - dependencies: - config-chain "^1.1.12" - pify "^5.0.0" - -"@lerna/npm-dist-tag@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-5.1.8.tgz#f5b26dfd9e97a0eb72987c8175d3b1bd2a7d82a0" - integrity sha512-vZXO0/EClOzRRHHfqB4APhZkxiJpQbsQAAFwaXQCNJE+3S+I/MD0S3iiUWrNs4QnN/8Lj1KyzUfznVDXX7AIUQ== - dependencies: - "@lerna/otplease" "5.1.8" - npm-package-arg "^8.1.0" - npm-registry-fetch "^9.0.0" - npmlog "^6.0.2" - -"@lerna/npm-install@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-5.1.8.tgz#03aada74bd17e196288d417ec2f7d3399e289c01" - integrity sha512-AiYQyz4W1+NDeBw3qmdiiatfCtwtaGOi7zHtN1eAqheVTxEMuuYjNHt+8hu6nSpDFYtonz0NsKFvaqRJ5LbVmw== - dependencies: - "@lerna/child-process" "5.1.8" - "@lerna/get-npm-exec-opts" "5.1.8" - fs-extra "^9.1.0" - npm-package-arg "^8.1.0" - npmlog "^6.0.2" - signal-exit "^3.0.3" - write-pkg "^4.0.0" - -"@lerna/npm-publish@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-5.1.8.tgz#259550c25d1d277c296dc3eb4e3e20f626e64510" - integrity sha512-Gup/1d8ovc21x3spKPhFK0tIYYn8HOjnpCAg5ytINIW1QM/QcLAigY58If8uiyt+aojz6lubWrSR8/OHf9CXBw== - dependencies: - "@lerna/otplease" "5.1.8" - "@lerna/run-lifecycle" "5.1.8" - fs-extra "^9.1.0" - libnpmpublish "^4.0.0" - npm-package-arg "^8.1.0" - npmlog "^6.0.2" - pify "^5.0.0" - read-package-json "^3.0.0" - -"@lerna/npm-run-script@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-5.1.8.tgz#6472bd96cf667feb829101a5e4db587b2e009d33" - integrity sha512-HzvukNC+hDIR25EpYWOvIGJItd0onXqzS9Ivdtw98ZQG3Jexi2Mn18A9tDqHOKCEGO3pVYrI9ep8VWkah2Bj1w== - dependencies: - "@lerna/child-process" "5.1.8" - "@lerna/get-npm-exec-opts" "5.1.8" - npmlog "^6.0.2" - -"@lerna/otplease@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-5.1.8.tgz#b0019f71b8a86e1594f277abf0f9c95aeebd2419" - integrity sha512-/OVZ7Rbs8/ft14f4i/9HEFDsxJkBSg74rMUqyqFH3fID/RL3ja9hW5bI1bENxvYgs0bp/THy4lV5V75ZcI81zQ== - dependencies: - "@lerna/prompt" "5.1.8" - -"@lerna/output@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-5.1.8.tgz#ca4d96379bbe7556035039bf2f416f36d363082a" - integrity sha512-dXsKY8X2eAdPKRKHDZTASlWn95Eav1oQX9doUXkvV3o4UwIgqOCIsU7RqSED3EAEQz6VUH0rXNb/+d3uVeAoJQ== - dependencies: - npmlog "^6.0.2" - -"@lerna/pack-directory@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-5.1.8.tgz#09e02134acaecd6be81a17dec7b9fdc7f66a29b7" - integrity sha512-aaH28ttS+JVimLFrVeZRWZ9Cii4GG2vkJXmQNikWBNQiFL/7S1x83NjMk4SQRdmtpYJkcQpQMZ2hDUdNxLnDCg== - dependencies: - "@lerna/get-packed" "5.1.8" - "@lerna/package" "5.1.8" - "@lerna/run-lifecycle" "5.1.8" - "@lerna/temp-write" "5.1.8" - npm-packlist "^2.1.4" - npmlog "^6.0.2" - tar "^6.1.0" - -"@lerna/package-graph@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-5.1.8.tgz#38339c3ad6e1469118ea3d52cf818ce7950d41c3" - integrity sha512-aGwXTwCpPfhUPiSRhdppogZjOqJPm39EBxHFDa1E0+/Qaig5avJs4hI6OrPLyjsTywAswtCMOArvD1QZqxwvrQ== - dependencies: - "@lerna/prerelease-id-from-version" "5.1.8" - "@lerna/validation-error" "5.1.8" - npm-package-arg "^8.1.0" - npmlog "^6.0.2" - semver "^7.3.4" - -"@lerna/package@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-5.1.8.tgz#17e119553b8c957915f92e43a5f4284ec98439c2" - integrity sha512-Ot+wu6XZ93tw8p9oSTJJA15TzGhVpo8VbgNhKPcI3JJjkxVq2D5L5jVeBkjQvFEQBonLibTr339uLLXyZ0RMzg== - dependencies: - load-json-file "^6.2.0" - npm-package-arg "^8.1.0" - write-pkg "^4.0.0" - -"@lerna/prerelease-id-from-version@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.1.8.tgz#83f27db93b19ccb74187e85b8174e4bd4f46e091" - integrity sha512-wfWv/8lHSk2/pl4FjopbDelFSLCz9s6J9AY5o7Sju9HtD9QUXcQHaXnEP1Rum9/rJZ8vWdFURcp9kzz8nxQ1Ow== - dependencies: - semver "^7.3.4" - -"@lerna/profiler@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-5.1.8.tgz#1f757c2bf87cdfad592d58f7d17f60e3648d956f" - integrity sha512-vpAFN85BvMHfIGA53IcwaUnS9FHAismEnNyFCjMkzKV55mmXFZlWpZyO36ESdSQRWCo5/25f3Ln0Y6YubY3Dvw== - dependencies: - fs-extra "^9.1.0" - npmlog "^6.0.2" - upath "^2.0.1" - -"@lerna/project@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-5.1.8.tgz#6c379d258eed12acff0d4fe8524f8f084e3892a4" - integrity sha512-zTFp91kmyJ0VHBmNXEArVrMSZVxnBJ7pHTt8C7RY91WSZhw8XDNumqMHDM+kEM1z/AtDBAAAGqBE3sjk5ONDXQ== - dependencies: - "@lerna/package" "5.1.8" - "@lerna/validation-error" "5.1.8" - cosmiconfig "^7.0.0" - dedent "^0.7.0" - dot-prop "^6.0.1" - glob-parent "^5.1.1" - globby "^11.0.2" - load-json-file "^6.2.0" - npmlog "^6.0.2" - p-map "^4.0.0" - resolve-from "^5.0.0" - write-json-file "^4.3.0" - -"@lerna/prompt@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-5.1.8.tgz#292639f0c4064f088462bc45b1825b9496a265c9" - integrity sha512-Cmq0FV/vyCHu00kySxXMfuPvutsi8qoME2/nFcICIktvDqxXr5aSFY8QqB123awNCbpb4xcHykjFnEj/RNdb2Q== - dependencies: - inquirer "^7.3.3" - npmlog "^6.0.2" - -"@lerna/publish@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-5.1.8.tgz#a503d88ea74f197bfc4b02c23e43414b75e94583" - integrity sha512-Q88WxXVNAh/ZWj7vYG83RZUfQyQlJMg7tDhsVTvZzy3VpkkCPtmJXZfX+g4RmE0PNyjsXx9QLYAOZnOB613WyA== - dependencies: - "@lerna/check-working-tree" "5.1.8" - "@lerna/child-process" "5.1.8" - "@lerna/collect-updates" "5.1.8" - "@lerna/command" "5.1.8" - "@lerna/describe-ref" "5.1.8" - "@lerna/log-packed" "5.1.8" - "@lerna/npm-conf" "5.1.8" - "@lerna/npm-dist-tag" "5.1.8" - "@lerna/npm-publish" "5.1.8" - "@lerna/otplease" "5.1.8" - "@lerna/output" "5.1.8" - "@lerna/pack-directory" "5.1.8" - "@lerna/prerelease-id-from-version" "5.1.8" - "@lerna/prompt" "5.1.8" - "@lerna/pulse-till-done" "5.1.8" - "@lerna/run-lifecycle" "5.1.8" - "@lerna/run-topologically" "5.1.8" - "@lerna/validation-error" "5.1.8" - "@lerna/version" "5.1.8" - fs-extra "^9.1.0" - libnpmaccess "^4.0.1" - npm-package-arg "^8.1.0" - npm-registry-fetch "^9.0.0" - npmlog "^6.0.2" - p-map "^4.0.0" - p-pipe "^3.1.0" - pacote "^13.4.1" - semver "^7.3.4" - -"@lerna/pulse-till-done@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-5.1.8.tgz#585ebc121841d9f1c587c553a3990601ac0e4168" - integrity sha512-KsyOazHG6wnjfdJhIdhTaTNwhj8Np/aPPei/ac9WzcuzgLS/uCs1IVFFIYBv5JdTmyVBKmguSZxdYjk7JzKBew== - dependencies: - npmlog "^6.0.2" - -"@lerna/query-graph@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-5.1.8.tgz#8ef6059f81e0fb64c4236f5fb664582568225af9" - integrity sha512-+p+bjPI403Hwv1djTS5aJe7DtPWIDw0a427BE68h1mmrPc9oTe3GG+0lingbfGR8woA2rOmjytgK2jeErOryPg== - dependencies: - "@lerna/package-graph" "5.1.8" - -"@lerna/resolve-symlink@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-5.1.8.tgz#dbccd14caf2701a9c968f1cb869b2bab28f0144a" - integrity sha512-OJa8ct4Oo2BcD95FmJqkc5qZMepaQK5RZAWoTqEXG/13Gs0mPc0fZGIhnnpTqtm3mgNhlT7ypCHG42I7hKiSeg== - dependencies: - fs-extra "^9.1.0" - npmlog "^6.0.2" - read-cmd-shim "^2.0.0" - -"@lerna/rimraf-dir@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-5.1.8.tgz#b0546a785cef0eb549b9b21a831e732ac56a7d84" - integrity sha512-3pT1X8kzW8xHUuAmRgzSKAF+/H1h1eSWq5+ACzeTWnvgqE7++0URee7TXwVCP/5FZPTZIzIclQCh4G0WD9Jfjg== - dependencies: - "@lerna/child-process" "5.1.8" - npmlog "^6.0.2" - path-exists "^4.0.0" - rimraf "^3.0.2" - -"@lerna/run-lifecycle@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-5.1.8.tgz#bac65e96f20b395a1e05db3823fa68d82a7796c8" - integrity sha512-5rRpovujhLJufKRzMp5sl2BIIqrPeoXxjniQbzkpSxZ2vnD+bE9xOoaciHQxOsmXfXhza0C+k3xYMM5+B/bVzg== - dependencies: - "@lerna/npm-conf" "5.1.8" - "@npmcli/run-script" "^3.0.2" - npmlog "^6.0.2" - -"@lerna/run-topologically@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-5.1.8.tgz#5c49ab5ebf0a871c5f705db74648d0023448c387" - integrity sha512-isuulfBdNsrgV2QF/HwCKCecfR9mPEU9N4Nf8n9nQQgakwOscoDlwGp2xv27pvcQKI52q/o/ISEjz3JeoEQiOA== - dependencies: - "@lerna/query-graph" "5.1.8" - p-queue "^6.6.2" - -"@lerna/run@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-5.1.8.tgz#ede8db4df9ae19e87e1cc372a820f29a9ef5079b" - integrity sha512-E5mI3FswVN9zQ3bCYUQxxPlLL400vnKpwLSzzRNFy//TR8Geu0LeR6NY+Jf0jklsKxwWGMJgqL6VqPqxDaNtdw== - dependencies: - "@lerna/command" "5.1.8" - "@lerna/filter-options" "5.1.8" - "@lerna/npm-run-script" "5.1.8" - "@lerna/output" "5.1.8" - "@lerna/profiler" "5.1.8" - "@lerna/run-topologically" "5.1.8" - "@lerna/timer" "5.1.8" - "@lerna/validation-error" "5.1.8" - p-map "^4.0.0" - -"@lerna/symlink-binary@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-5.1.8.tgz#0e92997547d13d3da7efe437ecad64b919ff0383" - integrity sha512-s7VfKNJZnWvTKZ7KR8Yxh1rYhE/ARMioD5axyu3FleS3Xsdla2M5sQsLouCrdfM3doTO8lMxPVvVSFmL7q0KOA== - dependencies: - "@lerna/create-symlink" "5.1.8" - "@lerna/package" "5.1.8" - fs-extra "^9.1.0" - p-map "^4.0.0" - -"@lerna/symlink-dependencies@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-5.1.8.tgz#a8738d122b4274397e65a565d444540b9a10df61" - integrity sha512-U5diiaKdWUlvoFMh3sYIEESBLa8Z3Q/EpkLl5o4YkcbPBjFHJFpmoqCGomwL9sf9HQUV2S9Lt9szJT8qgQm86Q== - dependencies: - "@lerna/create-symlink" "5.1.8" - "@lerna/resolve-symlink" "5.1.8" - "@lerna/symlink-binary" "5.1.8" - fs-extra "^9.1.0" - p-map "^4.0.0" - p-map-series "^2.1.0" - -"@lerna/temp-write@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/temp-write/-/temp-write-5.1.8.tgz#e3e16743160fdde2fadbff6e1855c4050495b38e" - integrity sha512-4/guYB5XotugyM8P/F1z6b+hNlSCe/QuZsmiZwgXOw2lmYnkSzLWDVjqsdZtNYqojK0lioxcPjZiL5qnEkk1PQ== - dependencies: - graceful-fs "^4.1.15" - is-stream "^2.0.0" - make-dir "^3.0.0" - temp-dir "^1.0.0" - uuid "^8.3.2" - -"@lerna/timer@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-5.1.8.tgz#8613aca7ed121a7c9f73f754a5b07e9891bf2e5e" - integrity sha512-Ua4bw2YOO3U+sFujE+MsUG+lllU0X7u6PCTj1QKe0QlR0zr2gCa0pcwjUQPdNfxnpJpPY+hdbfTUv2viDloaiA== - -"@lerna/validation-error@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-5.1.8.tgz#e12f6ee6bb9bd18bc1f3b2d0ae3045882d2a4f32" - integrity sha512-n+IiaxN2b08ZMYnezsmwL6rXB15/VvweusC04GMh1XtWunnMzSg9JDM7y6bw2vfpBBQx6cBFhLKSpD2Fcq5D5Q== - dependencies: - npmlog "^6.0.2" - -"@lerna/version@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-5.1.8.tgz#fa2034bbbbcdaf5493d6235109f6e4813f8f7a60" - integrity sha512-3f4P7KjIs6Gn2iaGkA5EASE9izZeDKtEzE8i2DE7YfVdw/P+EwFfKv2mKBXGbckYw42YO1tL6aD2QH0C8XbwlA== - dependencies: - "@lerna/check-working-tree" "5.1.8" - "@lerna/child-process" "5.1.8" - "@lerna/collect-updates" "5.1.8" - "@lerna/command" "5.1.8" - "@lerna/conventional-commits" "5.1.8" - "@lerna/github-client" "5.1.8" - "@lerna/gitlab-client" "5.1.8" - "@lerna/output" "5.1.8" - "@lerna/prerelease-id-from-version" "5.1.8" - "@lerna/prompt" "5.1.8" - "@lerna/run-lifecycle" "5.1.8" - "@lerna/run-topologically" "5.1.8" - "@lerna/temp-write" "5.1.8" - "@lerna/validation-error" "5.1.8" - chalk "^4.1.0" - dedent "^0.7.0" - load-json-file "^6.2.0" - minimatch "^3.0.4" - npmlog "^6.0.2" - p-map "^4.0.0" - p-pipe "^3.1.0" - p-reduce "^2.1.0" - p-waterfall "^2.1.1" - semver "^7.3.4" - slash "^3.0.0" - write-json-file "^4.3.0" - -"@lerna/write-log-file@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-5.1.8.tgz#b464c7fab43c14adb96ba41d92900b8907d8d14d" - integrity sha512-B+shMH3TpzA7Q5GGbuNkOmdPQdD1LXRFj7R17LINkn82PhP9CUgubwYuiVzrLa16ADi0V5Ad76pqtHi/6kD0nA== - dependencies: - npmlog "^6.0.2" - write-file-atomic "^3.0.3" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@npmcli/arborist@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.2.0.tgz#ee40dfe1f81ae1524819ee39c8f3e7022b0d6269" - integrity sha512-zWV7scFGL0SmpvfQyIWnMFbU/0YgtMNyvJiJwR98kyjUSntJGWFFR0O600d5W+TrDcTg0GyDbY+HdzGEg+GXLg== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^2.0.3" - "@npmcli/metavuln-calculator" "^3.0.1" - "@npmcli/move-file" "^2.0.0" - "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/package-json" "^2.0.0" - "@npmcli/run-script" "^3.0.0" - bin-links "^3.0.0" - cacache "^16.0.6" - common-ancestor-path "^1.0.1" - json-parse-even-better-errors "^2.3.1" - json-stringify-nice "^1.1.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - nopt "^5.0.0" - npm-install-checks "^5.0.0" - npm-package-arg "^9.0.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.0" - npmlog "^6.0.2" - pacote "^13.0.5" - parse-conflict-json "^2.0.1" - proc-log "^2.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^2.0.2" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.7" - ssri "^9.0.0" - treeverse "^2.0.0" - walk-up-path "^1.0.0" - -"@npmcli/ci-detect@^1.0.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz#18478bbaa900c37bfbd8a2006a6262c62e8b0fe1" - integrity sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q== - -"@npmcli/fs@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.0.0.tgz#589612cfad3a6ea0feafcb901d29c63fd52db09f" - integrity sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/fs@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.0.tgz#f2a21c28386e299d1a9fae8051d35ad180e33109" - integrity sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ== - dependencies: - "@gar/promisify" "^1.1.3" - semver "^7.3.5" - -"@npmcli/git@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.1.tgz#049b99b1381a2ddf7dc56ba3e91eaf76ca803a8d" - integrity sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A== - dependencies: - "@npmcli/promise-spawn" "^3.0.0" - lru-cache "^7.4.4" - mkdirp "^1.0.4" - npm-pick-manifest "^7.0.0" - proc-log "^2.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^2.0.2" - -"@npmcli/installed-package-contents@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== - dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -"@npmcli/map-workspaces@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz#2d3c75119ee53246e9aa75bc469a55281cd5f08f" - integrity sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q== - dependencies: - "@npmcli/name-from-folder" "^1.0.1" - glob "^8.0.1" - minimatch "^5.0.1" - read-package-json-fast "^2.0.3" - -"@npmcli/metavuln-calculator@^3.0.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" - integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== - dependencies: - cacache "^16.0.0" - json-parse-even-better-errors "^2.3.1" - pacote "^13.0.3" - semver "^7.3.5" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@npmcli/move-file@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.0.tgz#417f585016081a0184cef3e38902cd917a9bbd02" - integrity sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@npmcli/name-from-folder@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" - integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== - -"@npmcli/node-gyp@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" - integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== - -"@npmcli/package-json@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" - integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== - dependencies: - json-parse-even-better-errors "^2.3.1" - -"@npmcli/promise-spawn@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" - integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== - dependencies: - infer-owner "^1.0.4" - -"@npmcli/run-script@^3.0.0", "@npmcli/run-script@^3.0.2": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-3.0.3.tgz#66afa6e0c4c3484056195f295fa6c1d1a45ddf58" - integrity sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q== - dependencies: - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/promise-spawn" "^3.0.0" - node-gyp "^8.4.1" - read-package-json-fast "^2.0.3" - -"@npmcli/run-script@^4.1.0": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.1.5.tgz#d60a7d41321612a9c0e1433797c10c19d0213d55" - integrity sha512-FyrZkZ+O0bCnQqm+mRb6sKbEJgyJudInwFN84gCcMUcxrWkR15Ags1uOHwnxHYdpj3T5eqrCZNW/Ys20MGTQ6Q== - dependencies: - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/promise-spawn" "^3.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^2.0.3" - which "^2.0.2" - -"@octokit/auth-token@^2.4.4": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" - integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== - dependencies: - "@octokit/types" "^6.0.3" - -"@octokit/core@^3.5.1": - version "3.5.1" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.5.1.tgz#8601ceeb1ec0e1b1b8217b960a413ed8e947809b" - integrity sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw== - dependencies: - "@octokit/auth-token" "^2.4.4" - "@octokit/graphql" "^4.5.8" - "@octokit/request" "^5.6.0" - "@octokit/request-error" "^2.0.5" - "@octokit/types" "^6.0.3" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^6.0.1": - version "6.0.12" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" - integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== - dependencies: - "@octokit/types" "^6.0.3" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^4.5.8": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" - integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== - dependencies: - "@octokit/request" "^5.6.0" - "@octokit/types" "^6.0.3" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^11.2.0": - version "11.2.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-11.2.0.tgz#b38d7fc3736d52a1e96b230c1ccd4a58a2f400a6" - integrity sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA== - -"@octokit/plugin-enterprise-compatibility@^1.2.2": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-compatibility/-/plugin-enterprise-compatibility-1.3.0.tgz#034f035cc1789b0f0d616e71e41f50f73804e89e" - integrity sha512-h34sMGdEOER/OKrZJ55v26ntdHb9OPfR1fwOx6Q4qYyyhWA104o11h9tFxnS/l41gED6WEI41Vu2G2zHDVC5lQ== - dependencies: - "@octokit/request-error" "^2.1.0" - "@octokit/types" "^6.0.3" - -"@octokit/plugin-enterprise-rest@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" - integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== - -"@octokit/plugin-paginate-rest@^2.16.8": - version "2.17.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz#32e9c7cab2a374421d3d0de239102287d791bce7" - integrity sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw== - dependencies: - "@octokit/types" "^6.34.0" - -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== - -"@octokit/plugin-rest-endpoint-methods@^5.12.0": - version "5.13.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz#8c46109021a3412233f6f50d28786f8e552427ba" - integrity sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA== - dependencies: - "@octokit/types" "^6.34.0" - deprecation "^2.3.1" - -"@octokit/plugin-retry@^3.0.1": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz#ae625cca1e42b0253049102acd71c1d5134788fe" - integrity sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ== - dependencies: - "@octokit/types" "^6.0.3" - bottleneck "^2.15.3" - -"@octokit/plugin-throttling@^3.2.0": - version "3.5.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-3.5.2.tgz#8b1797a5f14edbca0b8af619394056ed0ed5c9b5" - integrity sha512-Eu7kfJxU8vmHqWGNszWpg+GVp2tnAfax3XQV5CkYPEE69C+KvInJXW9WajgSeW+cxYe0UVdouzCtcreGNuJo7A== - dependencies: - "@octokit/types" "^6.0.1" - bottleneck "^2.15.3" - -"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" - integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== - dependencies: - "@octokit/types" "^6.0.3" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^5.6.0": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.2.tgz#1aa74d5da7b9e04ac60ef232edd9a7438dcf32d8" - integrity sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA== - dependencies: - "@octokit/endpoint" "^6.0.1" - "@octokit/request-error" "^2.1.0" - "@octokit/types" "^6.16.1" - is-plain-object "^5.0.0" - node-fetch "^2.6.1" - universal-user-agent "^6.0.0" - -"@octokit/rest@^18.0.0", "@octokit/rest@^18.1.0": - version "18.12.0" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" - integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q== - dependencies: - "@octokit/core" "^3.5.1" - "@octokit/plugin-paginate-rest" "^2.16.8" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^5.12.0" - -"@octokit/types@^6.0.1", "@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.34.0": - version "6.34.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.34.0.tgz#c6021333334d1ecfb5d370a8798162ddf1ae8218" - integrity sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw== - dependencies: - "@octokit/openapi-types" "^11.2.0" - -"@pkgr/utils@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.0.tgz#3b8491f112a80839450498816767eb03b7db6139" - integrity sha512-7dIJ9CRVzBnqyEl7diUHPUFJf/oty2SeoVzcMocc5PeOUDK9KGzvgIBjGRRzzlRDaOjh3ADwH0WeibQvi3ls2Q== - dependencies: - cross-spawn "^7.0.3" - is-glob "^4.0.3" - open "^8.4.0" - picocolors "^1.0.0" - tiny-glob "^0.2.9" - tslib "^2.4.0" - -"@rollup/plugin-commonjs@^21.0.0": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.1.tgz#1e57c81ae1518e4df0954d681c642e7d94588fee" - integrity sha512-EA+g22lbNJ8p5kuZJUYyhhDK7WgJckW5g4pNN7n4mAFUM96VuwUnNT3xr2Db2iCZPI1pJPbGyfT5mS9T1dHfMg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - commondir "^1.0.1" - estree-walker "^2.0.1" - glob "^7.1.6" - is-reference "^1.2.1" - magic-string "^0.25.7" - resolve "^1.17.0" - -"@rollup/plugin-json@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" - integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== - dependencies: - "@rollup/pluginutils" "^3.0.8" - -"@rollup/plugin-node-resolve@^13.0.0": - version "13.1.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz#2ed277fb3ad98745424c1d2ba152484508a92d79" - integrity sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.19.0" - -"@rollup/plugin-replace@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-3.0.1.tgz#f774550f482091719e52e9f14f67ffc0046a883d" - integrity sha512-989J5oRzf3mm0pO/0djTijdfEh9U3n63BIXN5X7T4U9BP+fN4oxQ6DvDuBvFaHA6scaHQRclqmKQEkBhB7k7Hg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - magic-string "^0.25.7" - -"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@rollup/pluginutils@^4.1.0": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.1.tgz#1d4da86dd4eded15656a57d933fda2b9a08d47ec" - integrity sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ== - dependencies: - estree-walker "^2.0.1" - picomatch "^2.2.2" - -"@sideway/address@^4.1.0": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.2.tgz#811b84333a335739d3969cfc434736268170cad1" - integrity sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@sideway/formula@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" - integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - -"@sinclair/typebox@^0.23.3": - version "0.23.5" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.23.5.tgz#93f7b9f4e3285a7a9ade7557d9a8d36809cbc47d" - integrity sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg== - -"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.2.0.tgz#667bfc6186ae7c9e0b45a08960c551437176e1ca" - integrity sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw== - -"@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@szmarczak/http-timer@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" - integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== - dependencies: - defer-to-connect "^2.0.1" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - -"@ts-type/package-dts@^1.0.53": - version "1.0.53" - resolved "https://registry.yarnpkg.com/@ts-type/package-dts/-/package-dts-1.0.53.tgz#bb577e93e7f3deb0910479550014728f4bfd36a8" - integrity sha512-P8bMcjqaUsaBbXOCxBtzT4/pvhQSHTMc91WrpErVfB52zpNRVw2evOYWMe6q3c087+wpvITB7HtppYDnQe1RwA== - dependencies: - "@types/semver" "^7.3.9" - ts-type "^1.2.40" - -"@tsconfig/node10@^1.0.7": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" - integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== - -"@tsconfig/node12@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" - integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== - -"@tsconfig/node14@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" - integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== - -"@tsconfig/node16@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" - integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.1.16" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.16.tgz#bc12c74b7d65e82d29876b5d0baf5c625ac58702" - integrity sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" - integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== - dependencies: - "@babel/types" "^7.3.0" - -"@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" - integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "*" - "@types/node" "*" - "@types/responselike" "*" - -"@types/command-line-args@^5.0.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@types/command-line-args/-/command-line-args-5.2.0.tgz#adbb77980a1cc376bb208e3f4142e907410430f6" - integrity sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA== - -"@types/command-line-usage@^5.0.1": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@types/command-line-usage/-/command-line-usage-5.0.2.tgz#ba5e3f6ae5a2009d466679cc431b50635bf1a064" - integrity sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg== - -"@types/estree@*": - version "0.0.50" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" - integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/graceful-fs@^4.1.2": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== - dependencies: - "@types/node" "*" - -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^27.0.1": - version "27.4.0" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.4.0.tgz#037ab8b872067cae842a320841693080f9cb84ed" - integrity sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ== - dependencies: - jest-diff "^27.0.0" - pretty-format "^27.0.0" - -"@types/json-schema@^7.0.7", "@types/json-schema@^7.0.9": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= - -"@types/keyv@*": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.3.tgz#1c9aae32872ec1f20dcdaee89a9f3ba88f465e41" - integrity sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg== - dependencies: - "@types/node" "*" - -"@types/mime@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a" - integrity sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q== - -"@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== - -"@types/node@*", "@types/node@^18.0.3": - version "18.0.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.3.tgz#463fc47f13ec0688a33aec75d078a0541a447199" - integrity sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/prettier@^2.1.5": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.1.tgz#e1303048d5389563e130f5bdd89d37a99acb75eb" - integrity sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw== - -"@types/qs@^6.9.7": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - -"@types/responselike@*", "@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - -"@types/semver@^7.3.9": - version "7.3.9" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.9.tgz#152c6c20a7688c30b967ec1841d31ace569863fc" - integrity sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ== - -"@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== - -"@types/wait-on@^5.2.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@types/wait-on/-/wait-on-5.3.1.tgz#bc5520d1d8b90b9caab1bef23315685ded73320d" - integrity sha512-2FFOKCF/YydrMUaqg+fkk49qf0e5rDgwt6aQsMzFQzbS419h2gNOXyiwp/o2yYy27bi/C1z+HgfncryjGzlvgQ== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "20.2.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" - integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== - -"@types/yargs@^16.0.0": - version "16.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" - integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^4.23.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" - integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== - dependencies: - "@typescript-eslint/experimental-utils" "4.33.0" - "@typescript-eslint/scope-manager" "4.33.0" - debug "^4.3.1" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" - regexpp "^3.1.0" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/experimental-utils@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" - integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== - dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/parser@^4.23.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" - integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== - dependencies: - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - debug "^4.3.1" - -"@typescript-eslint/scope-manager@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" - integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== - dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - -"@typescript-eslint/scope-manager@5.10.2": - version "5.10.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz#92c0bc935ec00f3d8638cdffb3d0e70c9b879639" - integrity sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw== - dependencies: - "@typescript-eslint/types" "5.10.2" - "@typescript-eslint/visitor-keys" "5.10.2" - -"@typescript-eslint/types@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" - integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== - -"@typescript-eslint/types@5.10.2": - version "5.10.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.10.2.tgz#604d15d795c4601fffba6ecb4587ff9fdec68ce8" - integrity sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w== - -"@typescript-eslint/typescript-estree@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" - integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== - dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/typescript-estree@5.10.2": - version "5.10.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz#810906056cd3ddcb35aa333fdbbef3713b0fe4a7" - integrity sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ== - dependencies: - "@typescript-eslint/types" "5.10.2" - "@typescript-eslint/visitor-keys" "5.10.2" - debug "^4.3.2" - globby "^11.0.4" - is-glob "^4.0.3" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/utils@^5.10.0": - version "5.10.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.10.2.tgz#1fcd37547c32c648ab11aea7173ec30060ee87a8" - integrity sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg== - dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.10.2" - "@typescript-eslint/types" "5.10.2" - "@typescript-eslint/typescript-estree" "5.10.2" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/visitor-keys@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" - integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== - dependencies: - "@typescript-eslint/types" "4.33.0" - eslint-visitor-keys "^2.0.0" - -"@typescript-eslint/visitor-keys@5.10.2": - version "5.10.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz#fdbf272d8e61c045d865bd6c8b41bea73d222f3d" - integrity sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q== - dependencies: - "@typescript-eslint/types" "5.10.2" - eslint-visitor-keys "^3.0.0" - -"@yarn-tool/resolve-package@^1.0.36": - version "1.0.38" - resolved "https://registry.yarnpkg.com/@yarn-tool/resolve-package/-/resolve-package-1.0.38.tgz#9e1a7ada87016826a67ffb576c8d39aca525c076" - integrity sha512-WmYM/Znh/vPQw7PBfbH2PmZSrzCF0AfGMfpA4z3SbNa2UUcdpqq9yD9pYKcHY1FP3yjMB7KwcVD8mhojROXCQQ== - dependencies: - "@ts-type/package-dts" "^1.0.53" - pkg-dir "< 6 >= 5" - tslib "^2.3.1" - upath2 "^3.1.10" - -JSONStream@^1.0.4: - version "1.3.5" - resolved "https://registry.yarnpkg.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" - -abab@^2.0.3, abab@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.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-jsx@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.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.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^5.7.3: - version "5.7.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== - -acorn@^7.1.1, acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4, acorn@^8.4.1: - version "8.5.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" - integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== - -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" - integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.4.tgz#d928028a4862cb11718e55227872e842a44c945b" - integrity sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" - -agentkeepalive@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.1: - version "8.7.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.7.1.tgz#52be6f1736b076074798124293618f132ad07a7e" - integrity sha512-gPpOObTO1QjbnN1sVMjJcp1TF9nggMfO4MBR5uQl6ZVTOaEPq5i4oq/6R9q2alMMPB3eg53wFv1RuJBLuxf3Hw== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -all-contributors-cli@6.19.0: - version "6.19.0" - resolved "https://registry.yarnpkg.com/all-contributors-cli/-/all-contributors-cli-6.19.0.tgz#7e4550973afede2476b62bd159fee6d72a1ad802" - integrity sha512-QJN4iLeTeYpTZJES8XFTzQ+itA1qSyBbxLapJLtwrnY+kipyRhCX49fS/s/qftQQym9XLATMZUpUeEeJSox1sw== - dependencies: - "@babel/runtime" "^7.7.6" - async "^3.0.1" - chalk "^4.0.0" - didyoumean "^1.2.1" - inquirer "^7.0.4" - json-fixer "^1.5.1" - lodash "^4.11.2" - node-fetch "^2.6.0" - pify "^5.0.0" - yargs "^15.0.1" - -all-contributors-cli@^6.20.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/all-contributors-cli/-/all-contributors-cli-6.20.0.tgz#9bc98dda38cb29cfe8afc8a78c004e14af25d2f6" - integrity sha512-trEQlL1s1u8FSWSwY2w9uL4GCG7Fo9HIW5rm5LtlE0SQHSolfXQBzJib07Qes5j52/t72wjuE6sEKkuRrwiuuQ== - dependencies: - "@babel/runtime" "^7.7.6" - async "^3.0.1" - chalk "^4.0.0" - didyoumean "^1.2.1" - inquirer "^7.0.4" - json-fixer "^1.5.1" - lodash "^4.11.2" - node-fetch "^2.6.0" - pify "^5.0.0" - yargs "^15.0.1" - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -ansi-styles@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" - integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== - -anymatch@^3.0.3, anymatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -append-transform@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" - integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== - dependencies: - default-require-extensions "^3.0.0" - -"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= - -are-we-there-yet@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz#ba20bd6b553e31d62fc8c31bd23d22b95734390d" - integrity sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argv@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" - integrity sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas= - -array-back@^3.0.1, array-back@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" - integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== - -array-back@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" - integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== - -array-differ@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" - integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= - -array-includes@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" - integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" - is-string "^1.0.7" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array.prototype.flat@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" - integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - -array.prototype.flatmap@^1.2.2: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz#908dc82d8a406930fdf38598d51e7411d18d4446" - integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.19.0" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -asn1.js@^5.0.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async@^3.0.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.2.tgz#2eb7671034bb2194d45d30e31e24ec7e7f9670cd" - integrity sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -author-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450" - integrity sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA= - -auto@^10.27.1: - version "10.32.5" - resolved "https://registry.yarnpkg.com/auto/-/auto-10.32.5.tgz#159e028f3aabf65967f4e6ec14decdea7ed76b26" - integrity sha512-14i1kJd8pRWmLoD0H4kV5WbVOIibzsFphqrbmKm/5vjp1fjoGeaJ39mb+kId8Qh9AxNur+J5eIOucv/7GPg/yA== - dependencies: - "@auto-it/core" "10.32.5" - "@auto-it/npm" "10.32.5" - "@auto-it/released" "10.32.5" - await-to-js "^3.0.0" - chalk "^4.0.0" - command-line-application "^0.10.1" - endent "^2.0.1" - module-alias "^2.2.2" - signale "^1.4.0" - terminal-link "^2.1.1" - tslib "2.1.0" - -await-to-js@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/await-to-js/-/await-to-js-3.0.0.tgz#70929994185616f4675a91af6167eb61cc92868f" - integrity sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g== - -axios@^0.21.1: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -babel-jest@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.4.6.tgz#4d024e69e241cdf4f396e453a07100f44f7ce314" - integrity sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg== - dependencies: - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.4.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - 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@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz#d7831fc0f93573788d80dee7e682482da4c730d6" - integrity sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.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@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz#70d0e676a282ccb200fbabd7f415db5fdf393bca" - integrity sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg== - dependencies: - babel-plugin-jest-hoist "^27.4.0" - babel-preset-current-node-syntax "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -before-after-hook@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" - integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== - -bin-links@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.1.tgz#cc70ffb481988b22c527d3e6e454787876987a49" - integrity sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ== - dependencies: - cmd-shim "^5.0.0" - mkdirp-infer-owner "^2.0.0" - npm-normalize-package-bin "^1.0.0" - read-cmd-shim "^3.0.0" - rimraf "^3.0.0" - write-file-atomic "^4.0.0" - -bl@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-5.0.0.tgz#6928804a41e9da9034868e1c50ca88f21f57aea2" - integrity sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ== - dependencies: - buffer "^6.0.3" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bn.js@^4.0.0: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bottleneck@^2.15.3: - version "2.19.5" - resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" - integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.17.5: - version "4.17.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.6.tgz#c76be33e7786b497f66cad25a73756c8b938985d" - integrity sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw== - dependencies: - caniuse-lite "^1.0.30001274" - electron-to-chromium "^1.3.886" - escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -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" - -buffer-es6@^4.9.3: - version "4.9.3" - resolved "https://registry.yarnpkg.com/buffer-es6/-/buffer-es6-4.9.3.tgz#f26347b82df76fd37e18bcb5288c4970cfd5c404" - integrity sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ= - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -builtin-modules@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== - -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= - -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -byte-size@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.1.tgz#b1daf3386de7ab9d706b941a748dbfc71130dee3" - integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== - -cacache@^15.0.5, cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: - version "16.1.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.1.tgz#4e79fb91d3efffe0630d5ad32db55cc1b870669c" - integrity sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg== - 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 "^1.1.1" - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-lookup@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.0.4.tgz#65c0e51721bb7f9f2cb513aed6da4a1b93ad7dc8" - integrity sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A== - -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - 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" - -caching-transform@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" - integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== - dependencies: - hasha "^5.0.0" - make-dir "^3.0.0" - package-hash "^4.0.0" - write-file-atomic "^3.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.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, 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.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== - -caniuse-lite@^1.0.30001274: - version "1.0.30001279" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001279.tgz#eb06818da481ef5096a3b3760f43e5382ed6b0ce" - integrity sha512-VfEHpzHEXj6/CxggTwSFoZBBYGQfQv9Cf42KPlO79sWXCD1QNKWKsKzFeWL7QpZHJQYAvocqV6Rty1yJMkqWLQ== - -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.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" - integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== - -cjs-module-lexer@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" - integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== - dependencies: - restore-cursor "^4.0.0" - -cli-spinners@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.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.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -cmd-shim@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-4.1.0.tgz#b3a904a6743e9fede4148c6f3800bf2a08135bdd" - integrity sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw== - dependencies: - mkdirp-infer-owner "^2.0.0" - -cmd-shim@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" - integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== - dependencies: - mkdirp-infer-owner "^2.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -codecov@^3.8.2: - version "3.8.3" - resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.8.3.tgz#9c3e364b8a700c597346ae98418d09880a3fdbe7" - integrity sha512-Y8Hw+V3HgR7V71xWH2vQ9lyS358CbGCldWlJFR0JirqoGtOoas3R3/OclRTvgUYFK29mmJICDPauVKmpqbwhOA== - dependencies: - argv "0.0.2" - ignore-walk "3.0.4" - js-yaml "3.14.1" - teeny-request "7.1.1" - urlgrey "1.0.0" - -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -colorette@^2.0.16, colorette@^2.0.17: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== - -columnify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.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.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-line-application@^0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/command-line-application/-/command-line-application-0.10.1.tgz#9ee0db7e41fe69f532eef0747e9ae958c0d348ae" - integrity sha512-PWZ4nRkz09MbBRocqEe/Fil3RjTaMNqw0didl1n/i3flDcw/vecVfvsw3r+ZHhGs4BOuW7sk3cEYSdfM3Wv5/Q== - dependencies: - "@types/command-line-args" "^5.0.0" - "@types/command-line-usage" "^5.0.1" - chalk "^2.4.1" - command-line-args "^5.1.1" - command-line-usage "^6.0.0" - meant "^1.0.1" - remove-markdown "^0.3.0" - tslib "1.10.0" - -command-line-args@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.0.tgz#087b02748272169741f1fd7c785b295df079b9be" - integrity sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A== - dependencies: - array-back "^3.1.0" - find-replace "^3.0.0" - lodash.camelcase "^4.3.0" - typical "^4.0.0" - -command-line-usage@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.1.tgz#c908e28686108917758a49f45efb4f02f76bc03f" - integrity sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA== - dependencies: - array-back "^4.0.1" - chalk "^2.4.2" - table-layout "^1.0.1" - typical "^5.2.0" - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - -commander@^9.3.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.3.0.tgz#f619114a5a2d2054e0d9ff1b31d5ccf89255e26b" - integrity sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw== - -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.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" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -config-chain@^1.1.12: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -confusing-browser-globals@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" - integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== - -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -conventional-changelog-angular@^5.0.12: - version "5.0.13" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" - integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-core@^4.2.2: - version "4.2.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" - integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== - dependencies: - add-stream "^1.0.0" - conventional-changelog-writer "^5.0.0" - conventional-commits-parser "^3.2.0" - dateformat "^3.0.0" - get-pkg-repo "^4.0.0" - git-raw-commits "^2.0.8" - git-remote-origin-url "^2.0.0" - git-semver-tags "^4.1.1" - lodash "^4.17.15" - normalize-package-data "^3.0.0" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - through2 "^4.0.0" - -conventional-changelog-preset-loader@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" - integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== - -conventional-changelog-writer@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz#c4042f3f1542f2f41d7d2e0d6cad23aba8df8eec" - integrity sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g== - dependencies: - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" - handlebars "^4.7.6" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" - -conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.2.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz#fc43704698239451e3ef35fd1d8ed644f46bd86e" - integrity sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -conventional-recommended-bump@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" - integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.3.4" - conventional-commits-filter "^2.0.7" - conventional-commits-parser "^3.2.0" - git-raw-commits "^2.0.8" - git-semver-tags "^4.1.1" - meow "^8.0.0" - q "^1.5.1" - -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" - integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cosmiconfig@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -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" - -cwd@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/cwd/-/cwd-0.10.0.tgz#172400694057c22a13b0cf16162c7e4b7a7fe567" - integrity sha1-FyQAaUBXwioTsM8WFix+S3p/5Wc= - dependencies: - find-pkg "^0.1.2" - fs-exists-sync "^0.1.0" - -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - -data-uri-to-buffer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b" - integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA== - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= - -decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decimal.js@^10.2.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" - integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -deep-extend@^0.6.0, deep-extend@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.0.0, deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -default-require-extensions@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" - integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== - dependencies: - strip-bom "^4.0.0" - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -delay@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" - integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -depd@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= - -detect-indent@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -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== - -dezalgo@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= - dependencies: - asap "^2.0.0" - wrappy "1" - -didyoumean@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -diff-sequences@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.4.0.tgz#d783920ad8d06ec718a060d00196dfef25b132a5" - integrity sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww== - -diff-sequences@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" - integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -dot-prop@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -dotenv@^8.0.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" - integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== - -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -electron-to-chromium@^1.3.886: - version "1.3.893" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.893.tgz#9d804c68953b05ede35409dba0d73dd54c077b4d" - integrity sha512-ChtwF7qB03INq1SyMpue08wc6cve+ktj2UC/Y7se9vB+JryfzziJeYwsgb8jLaCA5GMkHCdn5M62PfSMWhifZg== - -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encoding@^0.1.12, encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -endent@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/endent/-/endent-2.1.0.tgz#5aaba698fb569e5e18e69e1ff7a28ff35373cd88" - integrity sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w== - dependencies: - dedent "^0.7.0" - fast-json-parse "^1.0.3" - objectorarray "^1.0.5" - -enhanced-resolve@^5.10.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" - integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enquirer@^2.3.4, enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -env-ci@^5.0.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.4.1.tgz#814387ddd6857b37472ef612361f34d720c29a18" - integrity sha512-xyuCtyFZLpnW5aH0JstETKTSMwHHQX4m42juzEZzvbUCJX7RiPVlhASKM0f/cJ4vvI/+txMkZ7F5To6dCdPYhg== - dependencies: - execa "^5.0.0" - fromentries "^1.3.2" - java-properties "^1.0.0" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -envinfo@^7.7.4: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.19.0, es-abstract@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" - integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-symbols "^1.0.2" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.1" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.1" - is-string "^1.0.7" - is-weakref "^1.0.1" - object-inspect "^1.11.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-error@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-airbnb-base@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" - integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== - dependencies: - confusing-browser-globals "^1.0.10" - object.assign "^4.1.2" - object.entries "^1.1.5" - semver "^6.3.0" - -eslint-config-prettier@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" - integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== - -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== - dependencies: - debug "^3.2.7" - resolve "^1.20.0" - -eslint-import-resolver-typescript@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.2.5.tgz#cec82e42d93f61a039672e2ba7dc3e3663c86219" - integrity sha512-yEBi/EWxFFMjcZTBxrgdu5cFAXB2atOhYDhp0P0yHqjZa5YiPNqQVt4/lNNVWwW7Kf8IIZmyeBboWOgsfffe7w== - dependencies: - debug "^4.3.4" - enhanced-resolve "^5.10.0" - get-tsconfig "npm:@unts/get-tsconfig@^4.1.1" - globby "^13.1.2" - is-core-module "^2.9.0" - is-glob "^4.0.3" - synckit "^0.7.2" - -eslint-module-utils@^2.7.2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" - integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== - dependencies: - debug "^3.2.7" - find-up "^2.1.0" - -eslint-plugin-import@^2.23.4: - version "2.25.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1" - integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA== - dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.2" - has "^1.0.3" - is-core-module "^2.8.0" - is-glob "^4.0.3" - minimatch "^3.0.4" - object.values "^1.1.5" - resolve "^1.20.0" - tsconfig-paths "^3.12.0" - -eslint-plugin-jest@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.0.0.tgz#f83a25a23ab90ce5b375b1d44389b8c391be5ce8" - integrity sha512-Fvs0YgJ/nw9FTrnqTuMGVrkozkd07jkQzWm0ajqyHlfcsdkxGfAuv30fgfWHOnHiCr9+1YQ365CcDX7vrNhqQg== - dependencies: - "@typescript-eslint/utils" "^5.10.0" - -eslint-plugin-prettier@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" - integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" - integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== - -eslint@^7.26.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -esm@^3.2.25: - version "3.2.25" - resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" - integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-walker@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" - integrity sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig== - -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -estree-walker@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -eventemitter3@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - 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@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" - integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^3.0.1" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-tilde@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" - integrity sha1-C4HrqJflo9MdHD0QL48BRB5VlEk= - dependencies: - os-homedir "^1.0.1" - -expect-playwright@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/expect-playwright/-/expect-playwright-0.7.2.tgz#e1f2c31cd0d13d04e1ba4136019613ad01f6ea43" - integrity sha512-5o9si+8SUi68QVI0CRVv8tvTjZinpJWRSfQ3GP6v0DvlK55lDgFvD79r6A/NU+EUawrBc62qP30MxzOUnXNJZQ== - -expect@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.4.6.tgz#f335e128b0335b6ceb4fcab67ece7cbd14c942e6" - integrity sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag== - dependencies: - "@jest/types" "^27.4.2" - jest-get-type "^27.4.0" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^3.1.1: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== - 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.4" - -fast-glob@^3.2.11: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - 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.4" - -fast-json-parse@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fast-json-parse/-/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" - integrity sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw== - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fast-url-parser@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" - integrity sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0= - dependencies: - punycode "^1.3.2" - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -filter-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" - integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs= - -find-cache-dir@^3.2.0, find-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-file-up@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/find-file-up/-/find-file-up-0.1.3.tgz#cf68091bcf9f300a40da411b37da5cce5a2fbea0" - integrity sha1-z2gJG8+fMApA2kEbN9pczlovvqA= - dependencies: - fs-exists-sync "^0.1.0" - resolve-dir "^0.1.0" - -find-pkg@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/find-pkg/-/find-pkg-0.1.2.tgz#1bdc22c06e36365532e2a248046854b9788da557" - integrity sha1-G9wiwG42NlUy4qJIBGhUuXiNpVc= - dependencies: - find-file-up "^0.1.2" - -find-process@^1.4.4: - version "1.4.5" - resolved "https://registry.yarnpkg.com/find-process/-/find-process-1.4.5.tgz#6a0e4c87a32ca927c05cbed7b9078d62ffaac1a4" - integrity sha512-v11rJYYISUWn+s8qZzgGnBvlzRKf3bOtlGFM8H0kw56lGQtOmLuLCzuclA5kehA2j7S5sioOWdI4woT3jDavAw== - dependencies: - chalk "^4.0.0" - commander "^5.1.0" - debug "^4.1.1" - -find-replace@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" - integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== - dependencies: - array-back "^3.0.1" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" - integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== - -follow-redirects@^1.14.0: - version "1.14.8" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" - integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== - -foreground-child@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" - integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^3.0.2" - -form-data-encoder@1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" - integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - 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.yarnpkg.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" - -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - -fp-ts@^2.5.3: - version "2.11.5" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-2.11.5.tgz#97cceb26655b1452d7088d6fb0864f84cceffbe4" - integrity sha512-OqlwJq1BdpB83BZXTqI+dNcA6uYk6qk4u9Cgnt64Y+XS7dwdbp/mobx8S2KXf2AXH+scNmA/UVK3SEFHR3vHZA== - -fromentries@^1.2.0, fromentries@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" - integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== - -fs-exists-sync@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" - integrity sha1-mC1ok6+RjnLQjeyehnP/K1qNat0= - -fs-extra@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" - integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0, fs-minipass@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.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" - -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.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-monorepo-packages@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-monorepo-packages/-/get-monorepo-packages-1.2.0.tgz#3eee88d30b11a5f65955dec6ae331958b2a168e4" - integrity sha512-aDP6tH+eM3EuVSp3YyCutOcFS4Y9AhRRH9FAd+cjtR/g63Hx+DCXdKoP1ViRPUJz5wm+BOEXB4FhoffGHxJ7jQ== - dependencies: - globby "^7.1.1" - load-json-file "^4.0.0" - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@ampproject/remapping@npm:^2.2.0": + version: 2.2.0 + resolution: "@ampproject/remapping@npm:2.2.0" + dependencies: + "@jridgewell/gen-mapping": ^0.1.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 + languageName: node + linkType: hard + +"@auto-it/all-contributors@npm:^10.46.0": + version: 10.46.0 + resolution: "@auto-it/all-contributors@npm:10.46.0" + dependencies: + "@auto-it/bot-list": 10.46.0 + "@auto-it/core": 10.46.0 + "@octokit/rest": ^18.12.0 + all-contributors-cli: 6.19.0 + anymatch: ^3.1.1 + await-to-js: ^3.0.0 + endent: ^2.1.0 + env-ci: ^5.0.1 + fp-ts: ^2.5.3 + fromentries: ^1.2.0 + io-ts: ^2.1.2 + tslib: 2.1.0 + checksum: 3eff237d53dbedfec5a1d320cf371c588a5186373206665827eb1a538c888b7922356e5eb30ec5aa274653e57dc142987b35a4e80ee78aa3be04192cee18ba24 + languageName: node + linkType: hard + +"@auto-it/bot-list@npm:10.46.0": + version: 10.46.0 + resolution: "@auto-it/bot-list@npm:10.46.0" + checksum: 44a1766007c9f016e8cc7ae4369ab76629c198c0b8b5f64ae80d0737d26e104bb315725a5420f5b252b91dceb7f9c348c7f84c4c0cd13c48b4a00136d3075a48 + languageName: node + linkType: hard + +"@auto-it/core@npm:10.46.0, @auto-it/core@npm:^10.46.0": + version: 10.46.0 + resolution: "@auto-it/core@npm:10.46.0" + dependencies: + "@auto-it/bot-list": 10.46.0 + "@endemolshinegroup/cosmiconfig-typescript-loader": ^3.0.2 + "@octokit/core": ^3.5.1 + "@octokit/plugin-enterprise-compatibility": 1.3.0 + "@octokit/plugin-retry": ^3.0.9 + "@octokit/plugin-throttling": ^3.6.2 + "@octokit/rest": ^18.12.0 + await-to-js: ^3.0.0 + chalk: ^4.0.0 + cosmiconfig: 7.0.0 + deepmerge: ^4.0.0 + dotenv: ^8.0.0 + endent: ^2.1.0 + enquirer: ^2.3.4 + env-ci: ^5.0.1 + fast-glob: ^3.1.1 + fp-ts: ^2.5.3 + fromentries: ^1.2.0 + gitlog: ^4.0.3 + https-proxy-agent: ^5.0.0 + import-cwd: ^3.0.0 + import-from: ^3.0.0 + io-ts: ^2.1.2 + lodash.chunk: ^4.2.0 + log-symbols: ^4.0.0 + node-fetch: 2.6.7 + parse-author: ^2.0.0 + parse-github-url: 1.0.2 + pretty-ms: ^7.0.0 + requireg: ^0.2.2 + semver: ^7.0.0 + signale: ^1.4.0 + tapable: ^2.2.0 + terminal-link: ^2.1.1 + tinycolor2: ^1.4.1 + ts-node: ^10.9.1 + tslib: 2.1.0 + type-fest: ^0.21.1 + typescript-memoize: ^1.0.0-alpha.3 + url-join: ^4.0.0 + peerDependencies: + typescript: ">=2.7" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 717677f9ab4d62a96c47db71fc3f99976b8d4d6992bf96aec8f76044d5217022c3b18975ddc9263eb05cdc88b09e04b4faf7dfa6667ef45cbf7aec626ef4b432 + languageName: node + linkType: hard + +"@auto-it/first-time-contributor@npm:^10.46.0": + version: 10.46.0 + resolution: "@auto-it/first-time-contributor@npm:10.46.0" + dependencies: + "@auto-it/bot-list": 10.46.0 + "@auto-it/core": 10.46.0 + array.prototype.flatmap: ^1.2.2 + endent: ^2.1.0 + tslib: 2.1.0 + url-join: ^4.0.0 + checksum: ed4df0ab40134ae431d6b436ecc77a5dd6cd2476ed116de34f64a89a2943f22211ea2a43cb12c30008c6d4f9a640a38130cbf1e46795c337e520736a31c0c207 + languageName: node + linkType: hard + +"@auto-it/npm@npm:10.46.0": + version: 10.46.0 + resolution: "@auto-it/npm@npm:10.46.0" + dependencies: + "@auto-it/core": 10.46.0 + "@auto-it/package-json-utils": 10.46.0 + await-to-js: ^3.0.0 + endent: ^2.1.0 + env-ci: ^5.0.1 + fp-ts: ^2.5.3 + get-monorepo-packages: ^1.1.0 + io-ts: ^2.1.2 + registry-url: ^5.1.0 + semver: ^7.0.0 + tslib: 2.1.0 + typescript-memoize: ^1.0.0-alpha.3 + url-join: ^4.0.0 + user-home: ^2.0.0 + checksum: ac554056910b9308bc4527c20dbc8c11249ae36621fff446d46659ce64cf7f07d4ef4c52eb9dbac172495a6c22cf4395bb18e6eaedc74cf665843c3a9758b017 + languageName: node + linkType: hard + +"@auto-it/omit-commits@npm:^10.46.0": + version: 10.46.0 + resolution: "@auto-it/omit-commits@npm:10.46.0" + dependencies: + "@auto-it/core": 10.46.0 + fp-ts: ^2.5.3 + io-ts: ^2.1.2 + tslib: 2.1.0 + checksum: f7b5ffe1e871daa618c082ab9cd15922839b778e90983ade66804f5dab1f76dbab4ebe6908eb173267a7036f4aa2fadc75859901098cb278a93cb9171ff93b58 + languageName: node + linkType: hard + +"@auto-it/omit-release-notes@npm:^10.46.0": + version: 10.46.0 + resolution: "@auto-it/omit-release-notes@npm:10.46.0" + dependencies: + "@auto-it/core": 10.46.0 + fp-ts: ^2.5.3 + io-ts: ^2.1.2 + tslib: 2.1.0 + checksum: af2ea152821f9f18222c71c30e07273c3ad0154df4543f7fcd3e21a129ebfdd9ce5eaa0473e0043fd7a87ce8a0e69728f0c1db7cb263d658657fd920f7b22918 + languageName: node + linkType: hard + +"@auto-it/package-json-utils@npm:10.46.0": + version: 10.46.0 + resolution: "@auto-it/package-json-utils@npm:10.46.0" + dependencies: + parse-author: ^2.0.0 + parse-github-url: 1.0.2 + checksum: a6cade0027a4e724056b7d9371ff46766cebab9b5a77fe0f44f6e7651bd2a1899986aac44e75f0d73a021840bb561ca877c9ccd7be9f544584c5984cd3873cba + languageName: node + linkType: hard + +"@auto-it/released@npm:10.46.0, @auto-it/released@npm:^10.46.0": + version: 10.46.0 + resolution: "@auto-it/released@npm:10.46.0" + dependencies: + "@auto-it/bot-list": 10.46.0 + "@auto-it/core": 10.46.0 + deepmerge: ^4.0.0 + fp-ts: ^2.5.3 + io-ts: ^2.1.2 + tslib: 2.1.0 + checksum: 476423dbc5fdcebedd0681a8e1546e2e7e7ff135e8f09536dca62fee2e468796b7bc2159c03562a4fbbee125ae7f763a8e1972de6ef0b71acaff24a9398da45f + languageName: node + linkType: hard + +"@auto-it/version-file@npm:10.46.0": + version: 10.46.0 + resolution: "@auto-it/version-file@npm:10.46.0" + dependencies: + "@auto-it/core": 10.46.0 + fp-ts: ^2.5.3 + io-ts: ^2.1.2 + semver: ^7.0.0 + tslib: 1.10.0 + checksum: fc9b7d09eaeb525279a2a1dbd7a8f56bc4a1883e3319c5a0fa94d5091e2d235f4badd323113d9778642cf12a0ef1110c991f40bcc2ff79fd2b69636865bbdb03 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/code-frame@npm:7.18.6" + dependencies: + "@babel/highlight": ^7.18.6 + checksum: 195e2be3172d7684bf95cff69ae3b7a15a9841ea9d27d3c843662d50cdd7d6470fd9c8e64be84d031117e4a4083486effba39f9aef6bbb2c89f7f21bcfba33ba + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.20.5": + version: 7.21.0 + resolution: "@babel/compat-data@npm:7.21.0" + checksum: dbf632c532f9c75ba0be7d1dc9f6cd3582501af52f10a6b90415d634ec5878735bd46064c91673b10317af94d4cc99c4da5bd9d955978cdccb7905fc33291e4d + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": + version: 7.21.3 + resolution: "@babel/core@npm:7.21.3" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.21.3 + "@babel/helper-compilation-targets": ^7.20.7 + "@babel/helper-module-transforms": ^7.21.2 + "@babel/helpers": ^7.21.0 + "@babel/parser": ^7.21.3 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.3 + "@babel/types": ^7.21.3 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.2 + semver: ^6.3.0 + checksum: bef25fbea96f461bf79bd1d0e4f0cdce679fd5ada464a89c1141ddba59ae1adfdbb23e04440c266ed525712d33d5ffd818cd8b0c25b1dee0e648d5559516153a + languageName: node + linkType: hard + +"@babel/generator@npm:^7.21.3, @babel/generator@npm:^7.7.2": + version: 7.21.3 + resolution: "@babel/generator@npm:7.21.3" + dependencies: + "@babel/types": ^7.21.3 + "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 + jsesc: ^2.5.1 + checksum: be6bb5a32a0273260b91210d4137b7b5da148a2db8dd324654275cb0af865ae59de5e1536e93ac83423b2586415059e1c24cf94293026755cf995757238da749 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-compilation-targets@npm:7.20.7" + dependencies: + "@babel/compat-data": ^7.20.5 + "@babel/helper-validator-option": ^7.18.6 + browserslist: ^4.21.3 + lru-cache: ^5.1.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 8c32c873ba86e2e1805b30e0807abd07188acbe00ebb97576f0b09061cc65007f1312b589eccb4349c5a8c7f8bb9f2ab199d41da7030bf103d9f347dcd3a3cf4 + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-environment-visitor@npm:7.18.9" + checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helper-function-name@npm:7.21.0" + dependencies: + "@babel/template": ^7.20.7 + "@babel/types": ^7.21.0 + checksum: d63e63c3e0e3e8b3138fa47b0cd321148a300ef12b8ee951196994dcd2a492cc708aeda94c2c53759a5c9177fffaac0fd8778791286746f72a000976968daf4e + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-hoist-variables@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: fd9c35bb435fda802bf9ff7b6f2df06308a21277c6dec2120a35b09f9de68f68a33972e2c15505c1a1a04b36ec64c9ace97d4a9e26d6097b76b4396b7c5fa20f + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-module-imports@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: f393f8a3b3304b1b7a288a38c10989de754f01d29caf62ce7c4e5835daf0a27b81f3ac687d9d2780d39685aae7b55267324b512150e7b2be967b0c493b6a1def + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.21.2": + version: 7.21.2 + resolution: "@babel/helper-module-transforms@npm:7.21.2" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-simple-access": ^7.20.2 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.19.1 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.2 + "@babel/types": ^7.21.2 + checksum: 8a1c129a4f90bdf97d8b6e7861732c9580f48f877aaaafbc376ce2482febebcb8daaa1de8bc91676d12886487603f8c62a44f9e90ee76d6cac7f9225b26a49e1 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.20.2 + resolution: "@babel/helper-plugin-utils@npm:7.20.2" + checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/helper-simple-access@npm:7.20.2" + dependencies: + "@babel/types": ^7.20.2 + checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1 + languageName: node + linkType: hard + +"@babel/helper-split-export-declaration@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-split-export-declaration@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: c6d3dede53878f6be1d869e03e9ffbbb36f4897c7cc1527dc96c56d127d834ffe4520a6f7e467f5b6f3c2843ea0e81a7819d66ae02f707f6ac057f3d57943a2b + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.19.4": + version: 7.19.4 + resolution: "@babel/helper-string-parser@npm:7.19.4" + checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": + version: 7.19.1 + resolution: "@babel/helper-validator-identifier@npm:7.19.1" + checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.18.6": + version: 7.21.0 + resolution: "@babel/helper-validator-option@npm:7.21.0" + checksum: 8ece4c78ffa5461fd8ab6b6e57cc51afad59df08192ed5d84b475af4a7193fc1cb794b59e3e7be64f3cdc4df7ac78bf3dbb20c129d7757ae078e6279ff8c2f07 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helpers@npm:7.21.0" + dependencies: + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.0 + "@babel/types": ^7.21.0 + checksum: 9370dad2bb665c551869a08ac87c8bdafad53dbcdce1f5c5d498f51811456a3c005d9857562715151a0f00b2e912ac8d89f56574f837b5689f5f5072221cdf54 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/highlight@npm:7.18.6" + dependencies: + "@babel/helper-validator-identifier": ^7.18.6 + chalk: ^2.0.0 + js-tokens: ^4.0.0 + checksum: 92d8ee61549de5ff5120e945e774728e5ccd57fd3b2ed6eace020ec744823d4a98e242be1453d21764a30a14769ecd62170fba28539b211799bbaf232bbb2789 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.3": + version: 7.21.3 + resolution: "@babel/parser@npm:7.21.3" + bin: + parser: ./bin/babel-parser.js + checksum: a71e6456a1260c2a943736b56cc0acdf5f2a53c6c79e545f56618967e51f9b710d1d3359264e7c979313a7153741b1d95ad8860834cc2ab4ce4f428b13cc07be + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 + languageName: node + linkType: hard + +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.8.3": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": ^7.12.13 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.18.6 + resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6d37ea972970195f1ffe1a54745ce2ae456e0ac6145fae9aa1480f297248b262ea6ebb93010eddb86ebfacb94f57c05a1fc5d232b9a67325b09060299d515c67 + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.8.3": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.20.0 + resolution: "@babel/plugin-syntax-typescript@npm:7.20.0" + dependencies: + "@babel/helper-plugin-utils": ^7.19.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6189c0b5c32ba3c9a80a42338bd50719d783b20ef29b853d4f03929e971913d3cefd80184e924ae98ad6db09080be8fe6f1ffde9a6db8972523234f0274d36f7 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.7.6": + version: 7.21.0 + resolution: "@babel/runtime@npm:7.21.0" + dependencies: + regenerator-runtime: ^0.13.11 + checksum: 7b33e25bfa9e0e1b9e8828bb61b2d32bdd46b41b07ba7cb43319ad08efc6fda8eb89445193e67d6541814627df0ca59122c0ea795e412b99c5183a0540d338ab + languageName: node + linkType: hard + +"@babel/template@npm:^7.20.7, @babel/template@npm:^7.3.3": + version: 7.20.7 + resolution: "@babel/template@npm:7.20.7" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: 2eb1a0ab8d415078776bceb3473d07ab746e6bb4c2f6ca46ee70efb284d75c4a32bb0cd6f4f4946dec9711f9c0780e8e5d64b743208deac6f8e9858afadc349e + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.21.0, @babel/traverse@npm:^7.21.2, @babel/traverse@npm:^7.21.3, @babel/traverse@npm:^7.7.2": + version: 7.21.3 + resolution: "@babel/traverse@npm:7.21.3" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.21.3 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.21.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.21.3 + "@babel/types": ^7.21.3 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 0af5bcd47a2fc501592b90ac1feae9d449afb9ab0772a4f6e68230f4cd3a475795d538c1de3f880fe3414b6c2820bac84d02c6549eea796f39d74a603717447b + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.2, @babel/types@npm:^7.21.3, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": + version: 7.21.3 + resolution: "@babel/types@npm:7.21.3" + dependencies: + "@babel/helper-string-parser": ^7.19.4 + "@babel/helper-validator-identifier": ^7.19.1 + to-fast-properties: ^2.0.0 + checksum: b750274718ba9cefd0b81836c464009bb6ba339fccce51b9baff497a0a2d96c044c61dc90cf203cec0adc770454b53a9681c3f7716883c802b85ab84c365ba35 + languageName: node + linkType: hard + +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": 0.3.9 + checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa + languageName: node + linkType: hard + +"@endemolshinegroup/cosmiconfig-typescript-loader@npm:^3.0.2": + version: 3.0.2 + resolution: "@endemolshinegroup/cosmiconfig-typescript-loader@npm:3.0.2" + dependencies: + lodash.get: ^4 + make-error: ^1 + ts-node: ^9 + tslib: ^2 + peerDependencies: + cosmiconfig: ">=6" + checksum: 7fe0198622b1063c40572034df7e8ba867865a1b4815afe230795929abcf785758b34d7806a8e2100ba8ab4e92c5a1c3e11a980c466c4406df6e7ec6e50df8b6 + languageName: node + linkType: hard + +"@esbuild-kit/cjs-loader@npm:^2.4.2": + version: 2.4.2 + resolution: "@esbuild-kit/cjs-loader@npm:2.4.2" + dependencies: + "@esbuild-kit/core-utils": ^3.0.0 + get-tsconfig: ^4.4.0 + checksum: e346e339bfc7eff5c52c270fd0ec06a7f2341b624adfb69f84b7d83f119c35070420906f2761a0b4604e0a0ec90e35eaf12544585476c428ed6d6ee3b250c0fe + languageName: node + linkType: hard + +"@esbuild-kit/core-utils@npm:^3.0.0": + version: 3.1.0 + resolution: "@esbuild-kit/core-utils@npm:3.1.0" + dependencies: + esbuild: ~0.17.6 + source-map-support: ^0.5.21 + checksum: d54fd5adb3ce6784d84bb025ad54ddcfbab99267071a7f65298e547f56696f0b9d0dba96c535f9678a30d4887ec71cd445fdd277d65fbec1f3b504f6808f693e + languageName: node + linkType: hard + +"@esbuild-kit/esm-loader@npm:^2.5.5": + version: 2.5.5 + resolution: "@esbuild-kit/esm-loader@npm:2.5.5" + dependencies: + "@esbuild-kit/core-utils": ^3.0.0 + get-tsconfig: ^4.4.0 + checksum: 9d4a03ffc937fbec75a8456c3d45d7cdb1a65768416791a5720081753502bc9f485ba27942a46f564b12483b140a8a46c12433a4496430d93e4513e430484ec7 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/android-arm64@npm:0.17.12" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/android-arm@npm:0.17.12" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/android-x64@npm:0.17.12" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/darwin-arm64@npm:0.17.12" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/darwin-x64@npm:0.17.12" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/freebsd-arm64@npm:0.17.12" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/freebsd-x64@npm:0.17.12" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-arm64@npm:0.17.12" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-arm@npm:0.17.12" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-ia32@npm:0.17.12" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-loong64@npm:0.17.12" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-mips64el@npm:0.17.12" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-ppc64@npm:0.17.12" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-riscv64@npm:0.17.12" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-s390x@npm:0.17.12" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-x64@npm:0.17.12" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/netbsd-x64@npm:0.17.12" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/openbsd-x64@npm:0.17.12" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/sunos-x64@npm:0.17.12" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/win32-arm64@npm:0.17.12" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/win32-ia32@npm:0.17.12" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/win32-x64@npm:0.17.12" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.3.0 + resolution: "@eslint-community/eslint-utils@npm:4.3.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: f487760a692f0f1fef76e248ad72976919576ba57edc2b1b1dc1d182553bae6b5bf7b078e654da85d04f0af8a485d20bd26280002768f4fbcd2e330078340cb0 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.4.0": + version: 4.4.0 + resolution: "@eslint-community/regexpp@npm:4.4.0" + checksum: 2d127af0c752b80e8a782eacfe996a86925d21de92da3ffc6f9e615e701145e44a62e26bdd88bfac2cd76779c39ba8d9875a91046ec5e7e5f23cb647c247ea6a + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.0.2": + version: 2.0.2 + resolution: "@eslint/eslintrc@npm:2.0.2" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.5.1 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: cfcf5e12c7b2c4476482e7f12434e76eae16fcd163ee627309adb10b761e5caa4a4e52ed7be464423320ff3d11eca5b50de5bf8be3e25834222470835dd5c801 + languageName: node + linkType: hard + +"@eslint/js@npm:8.39.0": + version: 8.39.0 + resolution: "@eslint/js@npm:8.39.0" + checksum: 63fe36e2bfb5ff5705d1c1a8ccecd8eb2f81d9af239713489e767b0e398759c0177fcc75ad62581d02942f2776903a8496d5fae48dc2d883dff1b96fcb19e9e2 + languageName: node + linkType: hard + +"@gar/promisify@npm:^1.1.3": + version: 1.1.3 + resolution: "@gar/promisify@npm:1.1.3" + checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 + languageName: node + linkType: hard + +"@gitbeaker/cli@workspace:packages/cli": + version: 0.0.0-use.local + resolution: "@gitbeaker/cli@workspace:packages/cli" + dependencies: + "@gitbeaker/core": 36.0.1 + "@gitbeaker/rest": 36.0.1 + chalk: 4.1.2 + sywac: ^1.3.0 + tsup: ^6.7.0 + typescript: ^4.9.5 + xcase: ^2.0.1 + bin: + gb: dist/index.mjs + gitbeaker: dist/index.mjs + languageName: unknown + linkType: soft + +"@gitbeaker/core@36.0.1, @gitbeaker/core@workspace:packages/core": + version: 0.0.0-use.local + resolution: "@gitbeaker/core@workspace:packages/core" + dependencies: + "@gitbeaker/requester-utils": 36.0.1 + "@types/node": ^18.16.1 + get-param-names: "github:jdalrymple/get-param-names#1-improve-functionality" + qs: ^6.11.1 + tsup: ^6.7.0 + tsx: ^3.12.6 + typescript: ^4.9.5 + xcase: ^2.0.1 + languageName: unknown + linkType: soft + +"@gitbeaker/requester-utils@36.0.1, @gitbeaker/requester-utils@workspace:packages/requester-utils": + version: 0.0.0-use.local + resolution: "@gitbeaker/requester-utils@workspace:packages/requester-utils" + dependencies: + "@types/node": ^18.16.1 + qs: ^6.11.1 + tsup: ^6.7.0 + typescript: ^4.9.5 + xcase: ^2.0.1 + languageName: unknown + linkType: soft + +"@gitbeaker/rest@36.0.1, @gitbeaker/rest@workspace:packages/rest": + version: 0.0.0-use.local + resolution: "@gitbeaker/rest@workspace:packages/rest" + dependencies: + "@gitbeaker/core": 36.0.1 + "@gitbeaker/requester-utils": 36.0.1 + "@playwright/test": ^1.32.3 + "@types/node": ^18.16.1 + playwright: ^1.32.3 + tsup: ^6.7.0 + typescript: ^4.9.5 + languageName: unknown + linkType: soft + +"@humanwhocodes/config-array@npm:^0.11.8": + version: 0.11.8 + resolution: "@humanwhocodes/config-array@npm:0.11.8" + dependencies: + "@humanwhocodes/object-schema": ^1.2.1 + debug: ^4.1.1 + minimatch: ^3.0.5 + checksum: 0fd6b3c54f1674ce0a224df09b9c2f9846d20b9e54fabae1281ecfc04f2e6ad69bf19e1d6af6a28f88e8aa3990168b6cb9e1ef755868c3256a630605ec2cb1d3 + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^1.2.1": + version: 1.2.1 + resolution: "@humanwhocodes/object-schema@npm:1.2.1" + checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 + languageName: node + linkType: hard + +"@hutson/parse-repository-url@npm:^3.0.0": + version: 3.0.2 + resolution: "@hutson/parse-repository-url@npm:3.0.2" + checksum: 39992c5f183c5ca3d761d6ed9dfabcb79b5f3750bf1b7f3532e1dc439ca370138bbd426ee250fdaba460bc948e6761fbefd484b8f4f36885d71ded96138340d1 + languageName: node + linkType: hard + +"@isaacs/string-locale-compare@npm:^1.1.0": + version: 1.1.0 + resolution: "@isaacs/string-locale-compare@npm:1.1.0" + checksum: 7287da5d11497b82c542d3c2abe534808015be4f4883e71c26853277b5456f6bbe4108535db847a29f385ad6dc9318ffb0f55ee79bb5f39993233d7dccf8751d + languageName: node + linkType: hard + +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + 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 + checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 + languageName: node + linkType: hard + +"@jest/console@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/console@npm:29.5.0" + dependencies: + "@jest/types": ^29.5.0 + "@types/node": "*" + chalk: ^4.0.0 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 + slash: ^3.0.0 + checksum: 9f4f4b8fabd1221361b7f2e92d4a90f5f8c2e2b29077249996ab3c8b7f765175ffee795368f8d6b5b2bb3adb32dc09319f7270c7c787b0d259e624e00e0f64a5 + languageName: node + linkType: hard + +"@jest/core@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/core@npm:29.5.0" + dependencies: + "@jest/console": ^29.5.0 + "@jest/reporters": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 + "@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.5.0 + jest-config: ^29.5.0 + jest-haste-map: ^29.5.0 + jest-message-util: ^29.5.0 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.5.0 + jest-resolve-dependencies: ^29.5.0 + jest-runner: ^29.5.0 + jest-runtime: ^29.5.0 + jest-snapshot: ^29.5.0 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 + jest-watcher: ^29.5.0 + micromatch: ^4.0.4 + pretty-format: ^29.5.0 + slash: ^3.0.0 + strip-ansi: ^6.0.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 9e8f5243fe82d5a57f3971e1b96f320058df7c315328a3a827263f3b17f64be10c80f4a9c1b1773628b64d2de6d607c70b5b2d5bf13e7f5ad04223e9ef6aac06 + languageName: node + linkType: hard + +"@jest/create-cache-key-function@npm:^27.4.2": + version: 27.5.1 + resolution: "@jest/create-cache-key-function@npm:27.5.1" + dependencies: + "@jest/types": ^27.5.1 + checksum: a6c3a8c769aca6f66f5dc80f1c77e66980b4f213a6b2a15a92ba3595f032848a1261c06c9c798dcf2b672b1ffbefad5085af89d130548741c85ddbe0cf4284e7 + languageName: node + linkType: hard + +"@jest/environment@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/environment@npm:29.5.0" + dependencies: + "@jest/fake-timers": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/node": "*" + jest-mock: ^29.5.0 + checksum: 921de6325cd4817dec6685e5ff299b499b6379f3f9cf489b4b13588ee1f3820a0c77b49e6a087996b6de8f629f6f5251e636cba08d1bdb97d8071cc7d033c88a + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/expect-utils@npm:29.5.0" + dependencies: + jest-get-type: ^29.4.3 + checksum: c46fb677c88535cf83cf29f0a5b1f376c6a1109ddda266ad7da1a9cbc53cb441fa402dd61fc7b111ffc99603c11a9b3357ee41a1c0e035a58830bcb360871476 + languageName: node + linkType: hard + +"@jest/expect@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/expect@npm:29.5.0" + dependencies: + expect: ^29.5.0 + jest-snapshot: ^29.5.0 + checksum: bd10e295111547e6339137107d83986ab48d46561525393834d7d2d8b2ae9d5626653f3f5e48e5c3fa742ac982e97bdf1f541b53b9e1d117a247b08e938527f6 + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/fake-timers@npm:29.5.0" + dependencies: + "@jest/types": ^29.5.0 + "@sinonjs/fake-timers": ^10.0.2 + "@types/node": "*" + jest-message-util: ^29.5.0 + jest-mock: ^29.5.0 + jest-util: ^29.5.0 + checksum: 69930c6922341f244151ec0d27640852ec96237f730fc024da1f53143d31b43cde75d92f9d8e5937981cdce3b31416abc3a7090a0d22c2377512c4a6613244ee + languageName: node + linkType: hard + +"@jest/globals@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/globals@npm:29.5.0" + dependencies: + "@jest/environment": ^29.5.0 + "@jest/expect": ^29.5.0 + "@jest/types": ^29.5.0 + jest-mock: ^29.5.0 + checksum: b309ab8f21b571a7c672608682e84bbdd3d2b554ddf81e4e32617fec0a69094a290ab42e3c8b2c66ba891882bfb1b8b2736720ea1285b3ad646d55c2abefedd9 + languageName: node + linkType: hard + +"@jest/reporters@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/reporters@npm:29.5.0" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@jest/console": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 + "@jridgewell/trace-mapping": ^0.3.15 + "@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: ^5.1.0 + istanbul-lib-report: ^3.0.0 + istanbul-lib-source-maps: ^4.0.0 + istanbul-reports: ^3.1.3 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 + jest-worker: ^29.5.0 + slash: ^3.0.0 + string-length: ^4.0.1 + strip-ansi: ^6.0.0 + v8-to-istanbul: ^9.0.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 481268aac9a4a75cc49c4df1273d6b111808dec815e9d009dad717c32383ebb0cebac76e820ad1ab44e207540e1c2fe1e640d44c4f262de92ab1933e057fdeeb + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/schemas@npm:29.4.3" + dependencies: + "@sinclair/typebox": ^0.25.16 + checksum: ac754e245c19dc39e10ebd41dce09040214c96a4cd8efa143b82148e383e45128f24599195ab4f01433adae4ccfbe2db6574c90db2862ccd8551a86704b5bebd + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/source-map@npm:29.4.3" + dependencies: + "@jridgewell/trace-mapping": ^0.3.15 + callsites: ^3.0.0 + graceful-fs: ^4.2.9 + checksum: 2301d225145f8123540c0be073f35a80fd26a2f5e59550fd68525d8cea580fb896d12bf65106591ffb7366a8a19790076dbebc70e0f5e6ceb51f81827ed1f89c + languageName: node + linkType: hard + +"@jest/test-result@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/test-result@npm:29.5.0" + dependencies: + "@jest/console": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/istanbul-lib-coverage": ^2.0.0 + collect-v8-coverage: ^1.0.0 + checksum: 2e8ff5242227ab960c520c3ea0f6544c595cc1c42fa3873c158e9f4f685f4ec9670ec08a4af94ae3885c0005a43550a9595191ffbc27a0965df27d9d98bbf901 + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/test-sequencer@npm:29.5.0" + dependencies: + "@jest/test-result": ^29.5.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.5.0 + slash: ^3.0.0 + checksum: eca34b4aeb2fda6dfb7f9f4b064c858a7adf64ec5c6091b6f4ed9d3c19549177cbadcf1c615c4c182688fa1cf085c8c55c3ca6eea40719a34554b0bf071d842e + languageName: node + linkType: hard + +"@jest/transform@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/transform@npm:29.5.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^29.5.0 + "@jridgewell/trace-mapping": ^0.3.15 + 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.5.0 + jest-regex-util: ^29.4.3 + jest-util: ^29.5.0 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.2 + checksum: d55d604085c157cf5112e165ff5ac1fa788873b3b31265fb4734ca59892ee24e44119964cc47eb6d178dd9512bbb6c576d1e20e51a201ff4e24d31e818a1c92d + languageName: node + linkType: hard + +"@jest/types@npm:^27.5.1": + version: 27.5.1 + resolution: "@jest/types@npm:27.5.1" + dependencies: + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^16.0.0 + chalk: ^4.0.0 + checksum: d1f43cc946d87543ddd79d49547aab2399481d34025d5c5f2025d3d99c573e1d9832fa83cef25e9d9b07a8583500229d15bbb07b8e233d127d911d133e2f14b1 + languageName: node + linkType: hard + +"@jest/types@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/types@npm:29.5.0" + dependencies: + "@jest/schemas": ^29.4.3 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: 1811f94b19cf8a9460a289c4f056796cfc373480e0492692a6125a553cd1a63824bd846d7bb78820b7b6f758f6dd3c2d4558293bb676d541b2fa59c70fdf9d39 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.1.0": + version: 0.1.1 + resolution: "@jridgewell/gen-mapping@npm:0.1.1" + dependencies: + "@jridgewell/set-array": ^1.0.0 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.2 + resolution: "@jridgewell/gen-mapping@npm:0.3.2" + dependencies: + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 1832707a1c476afebe4d0fbbd4b9434fdb51a4c3e009ab1e9938648e21b7a97049fa6009393bdf05cab7504108413441df26d8a3c12193996e65493a4efb6882 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:3.1.0, @jridgewell/resolve-uri@npm:^3.0.3": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.14 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" + checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.17 + resolution: "@jridgewell/trace-mapping@npm:0.3.17" + dependencies: + "@jridgewell/resolve-uri": 3.1.0 + "@jridgewell/sourcemap-codec": 1.4.14 + checksum: 9d703b859cff5cd83b7308fd457a431387db5db96bd781a63bf48e183418dd9d3d44e76b9e4ae13237f6abeeb25d739ec9215c1d5bfdd08f66f750a50074a339 + languageName: node + linkType: hard + +"@lerna/child-process@npm:6.6.1": + version: 6.6.1 + resolution: "@lerna/child-process@npm:6.6.1" + dependencies: + chalk: ^4.1.0 + execa: ^5.0.0 + strong-log-transformer: ^2.1.0 + checksum: 075f872e43b462e07fe3ab690384138f7bfc8313306981e4f2251f3bf8ecc7bae37b35b404cd8cd33e403a7d81975f92bf78c6a1fc1d3140d2b6d3cc38eae555 + languageName: node + linkType: hard + +"@lerna/create@npm:6.6.1": + version: 6.6.1 + resolution: "@lerna/create@npm:6.6.1" + dependencies: + "@lerna/child-process": 6.6.1 + dedent: ^0.7.0 + fs-extra: ^9.1.0 + init-package-json: ^3.0.2 + npm-package-arg: 8.1.1 + p-reduce: ^2.1.0 + pacote: ^13.6.1 + pify: ^5.0.0 + semver: ^7.3.4 + slash: ^3.0.0 + validate-npm-package-license: ^3.0.4 + validate-npm-package-name: ^4.0.0 + yargs-parser: 20.2.4 + checksum: be8273644d6f156c3c81a89a370e13451ee92c7aeff5dba126be6a909479f2364031a327bd0f43a7beddc03c196c3effff9516201966cc903de3a2e3230dc4d1 + languageName: node + linkType: hard + +"@lerna/legacy-package-management@npm:6.6.1": + version: 6.6.1 + resolution: "@lerna/legacy-package-management@npm:6.6.1" + dependencies: + "@npmcli/arborist": 6.2.3 + "@npmcli/run-script": 4.1.7 + "@nrwl/devkit": ">=15.5.2 < 16" + "@octokit/rest": 19.0.3 + byte-size: 7.0.0 + chalk: 4.1.0 + clone-deep: 4.0.1 + cmd-shim: 5.0.0 + columnify: 1.6.0 + config-chain: 1.1.12 + conventional-changelog-core: 4.2.4 + conventional-recommended-bump: 6.1.0 + cosmiconfig: 7.0.0 + dedent: 0.7.0 + dot-prop: 6.0.1 + execa: 5.0.0 + file-url: 3.0.0 + find-up: 5.0.0 + fs-extra: 9.1.0 + 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.10 + has-unicode: 2.0.1 + inquirer: 8.2.4 + is-ci: 2.0.0 + is-stream: 2.0.0 + libnpmpublish: 6.0.4 + load-json-file: 6.2.0 + make-dir: 3.1.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.3 + npmlog: 6.0.2 + p-map: 4.0.0 + p-map-series: 2.1.0 + p-queue: 6.6.2 + p-waterfall: 2.1.1 + pacote: 13.6.2 + pify: 5.0.0 + pretty-format: 29.4.3 + read-cmd-shim: 3.0.0 + read-package-json: 5.0.1 + resolve-from: 5.0.0 + 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 + tempy: 1.0.0 + upath: 2.0.1 + uuid: 8.3.2 + write-file-atomic: 4.0.1 + write-pkg: 4.0.0 + yargs: 16.2.0 + checksum: 198cad91376e16edcb66b77cab58217f04ea97a27ccbd811842c9886330c66b2898fe3972ba91231f54c520f208a52207db7060651b2ff290d3702cfc1daaf77 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + +"@npmcli/arborist@npm:6.2.3": + version: 6.2.3 + resolution: "@npmcli/arborist@npm:6.2.3" + dependencies: + "@isaacs/string-locale-compare": ^1.1.0 + "@npmcli/fs": ^3.1.0 + "@npmcli/installed-package-contents": ^2.0.0 + "@npmcli/map-workspaces": ^3.0.2 + "@npmcli/metavuln-calculator": ^5.0.0 + "@npmcli/name-from-folder": ^2.0.0 + "@npmcli/node-gyp": ^3.0.0 + "@npmcli/package-json": ^3.0.0 + "@npmcli/query": ^3.0.0 + "@npmcli/run-script": ^6.0.0 + bin-links: ^4.0.1 + cacache: ^17.0.4 + common-ancestor-path: ^1.0.1 + hosted-git-info: ^6.1.1 + json-parse-even-better-errors: ^3.0.0 + json-stringify-nice: ^1.1.4 + minimatch: ^6.1.6 + nopt: ^7.0.0 + npm-install-checks: ^6.0.0 + npm-package-arg: ^10.1.0 + npm-pick-manifest: ^8.0.1 + npm-registry-fetch: ^14.0.3 + npmlog: ^7.0.1 + pacote: ^15.0.8 + parse-conflict-json: ^3.0.0 + proc-log: ^3.0.0 + promise-all-reject-late: ^1.0.0 + promise-call-limit: ^1.0.1 + read-package-json-fast: ^3.0.2 + semver: ^7.3.7 + ssri: ^10.0.1 + treeverse: ^3.0.0 + walk-up-path: ^1.0.0 + bin: + arborist: bin/index.js + checksum: f52261745fdcdb95813ec47d0fbe375e6448f3d62f805601a7afe447540f3ffb741834a1c2275707c17a4322e723915c1bb8abb3400dd3a3476ab281b64954bc + languageName: node + linkType: hard + +"@npmcli/fs@npm:^2.1.0": + version: 2.1.2 + resolution: "@npmcli/fs@npm:2.1.2" + dependencies: + "@gar/promisify": ^1.1.3 + semver: ^7.3.5 + checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + +"@npmcli/git@npm:^3.0.0": + version: 3.0.2 + resolution: "@npmcli/git@npm:3.0.2" + dependencies: + "@npmcli/promise-spawn": ^3.0.0 + lru-cache: ^7.4.4 + mkdirp: ^1.0.4 + npm-pick-manifest: ^7.0.0 + proc-log: ^2.0.0 + promise-inflight: ^1.0.1 + promise-retry: ^2.0.1 + semver: ^7.3.5 + which: ^2.0.2 + checksum: bdfd1229bb1113ad4883ef89b74b5dc442a2c96225d830491dd0dec4fa83d083b93cde92b6978d4956a8365521e61bc8dc1891fb905c7c693d5d6aa178f2ab44 + languageName: node + linkType: hard + +"@npmcli/git@npm:^4.0.0": + version: 4.0.4 + resolution: "@npmcli/git@npm:4.0.4" + 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 + checksum: fd8ad331138c906e090a0f0d3c1662be140fbb39f0dcf4259ee69e8dcb1a939385996dd003d7abb9ce61739e4119e2ea26b2be7ad396988ec1c1ed83179af032 + languageName: node + linkType: hard + +"@npmcli/installed-package-contents@npm:^1.0.7": + version: 1.0.7 + resolution: "@npmcli/installed-package-contents@npm:1.0.7" + dependencies: + npm-bundled: ^1.1.1 + npm-normalize-package-bin: ^1.0.1 + bin: + installed-package-contents: index.js + checksum: a4a29b99d439827ce2e7817c1f61b56be160e640696e31dc513a2c8a37c792f75cdb6258ec15a1e22904f20df0a8a3019dd3766de5e6619f259834cf64233538 + languageName: node + linkType: hard + +"@npmcli/installed-package-contents@npm:^2.0.0, @npmcli/installed-package-contents@npm:^2.0.1": + version: 2.0.2 + resolution: "@npmcli/installed-package-contents@npm:2.0.2" + dependencies: + npm-bundled: ^3.0.0 + npm-normalize-package-bin: ^3.0.0 + bin: + installed-package-contents: lib/index.js + checksum: 60789d5ed209ee5df479232f62d9d38ecec36e95701cae88320b828b8651351b32d7b47d16d4c36cc7ce5000db4bf1f3e6981bed6381bdc5687ff4bc0795682d + languageName: node + linkType: hard + +"@npmcli/map-workspaces@npm:^3.0.2": + version: 3.0.3 + resolution: "@npmcli/map-workspaces@npm:3.0.3" + dependencies: + "@npmcli/name-from-folder": ^2.0.0 + glob: ^9.3.1 + minimatch: ^7.4.2 + read-package-json-fast: ^3.0.0 + checksum: d61d152b5c3fbe56c467d447877220be4ee147a64904300adbbdfe33074b37bcb15d96d395a1292e46392766e6d1c6eae43d9daa81ae03c84561eadf333f0bc8 + languageName: node + linkType: hard + +"@npmcli/metavuln-calculator@npm:^5.0.0": + version: 5.0.0 + resolution: "@npmcli/metavuln-calculator@npm:5.0.0" + dependencies: + cacache: ^17.0.0 + json-parse-even-better-errors: ^3.0.0 + pacote: ^15.0.0 + semver: ^7.3.5 + checksum: 82a64c055b260cdc2a57b0177993d026c3b370a57dab8d83fc87319533e5adeceeeb72feafb36a3381d4090e7ca8a34169e83e6167d1f63dbe1f91bf5e6d89f0 + languageName: node + linkType: hard + +"@npmcli/move-file@npm:^2.0.0": + version: 2.0.1 + resolution: "@npmcli/move-file@npm:2.0.1" + dependencies: + mkdirp: ^1.0.4 + rimraf: ^3.0.2 + checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 + languageName: node + linkType: hard + +"@npmcli/name-from-folder@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/name-from-folder@npm:2.0.0" + checksum: fb3ef891aa57315fb6171866847f298577c8bda98a028e93e458048477133e142b4eb45ce9f3b80454f7c257612cb01754ee782d608507698dd712164436f5bd + languageName: node + linkType: hard + +"@npmcli/node-gyp@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/node-gyp@npm:2.0.0" + checksum: b6bbf0015000f9b64d31aefdc30f244b0348c57adb64017667e0304e96c38644d83da46a4581252652f5d606268df49118f9c9993b41d8020f62b7b15dd2c8d8 + languageName: node + linkType: hard + +"@npmcli/node-gyp@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/node-gyp@npm:3.0.0" + checksum: fe3802b813eecb4ade7ad77c9396cb56721664275faab027e3bd8a5e15adfbbe39e2ecc19f7885feb3cfa009b96632741cc81caf7850ba74440c6a2eee7b4ffc + languageName: node + linkType: hard + +"@npmcli/package-json@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/package-json@npm:3.0.0" + dependencies: + json-parse-even-better-errors: ^3.0.0 + checksum: d7603ec771c365346e39e24a9dda8fdb3918a55f01011d27bf377468c44991092a1fbdaaa580cfd1ff37456a933630b9a99bf3bb08438e1333c2ce559e86398d + languageName: node + linkType: hard + +"@npmcli/promise-spawn@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/promise-spawn@npm:3.0.0" + dependencies: + infer-owner: ^1.0.4 + checksum: 3454465a2731cea5875ba51f80873e2205e5bd878c31517286b0ede4ea931c7bf3de895382287e906d03710fff6f9e44186bd0eee068ce578901c5d3b58e7692 + languageName: node + linkType: hard + +"@npmcli/promise-spawn@npm:^6.0.0, @npmcli/promise-spawn@npm:^6.0.1": + version: 6.0.2 + resolution: "@npmcli/promise-spawn@npm:6.0.2" + dependencies: + which: ^3.0.0 + checksum: aa725780c13e1f97ab32ed7bcb5a207a3fb988e1d7ecdc3d22a549a22c8034740366b351c4dde4b011bcffcd8c4a7be6083d9cf7bc7e897b88837150de018528 + languageName: node + linkType: hard + +"@npmcli/query@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/query@npm:3.0.0" + dependencies: + postcss-selector-parser: ^6.0.10 + checksum: 90fca7edd5f3e59e875dd8729e6c3aa174292e5b66caa0d7db85841cc5eeb414c7eb7d7637d30f638605d05e1238e718d09b8c1a251f43cfc21d9ac6835c7b39 + languageName: node + linkType: hard + +"@npmcli/run-script@npm:4.1.7": + version: 4.1.7 + resolution: "@npmcli/run-script@npm:4.1.7" + dependencies: + "@npmcli/node-gyp": ^2.0.0 + "@npmcli/promise-spawn": ^3.0.0 + node-gyp: ^9.0.0 + read-package-json-fast: ^2.0.3 + which: ^2.0.2 + checksum: 87c32b12fed981fe8a48de985dd1ae0350bcda2830ca4a35efe4b2b96932905cccd04e6e2de5bfea8ed4e2bf3b6f8315630ff9a09c72f80ff3c49f19a9fc80ff + languageName: node + linkType: hard + +"@npmcli/run-script@npm:^4.1.0": + version: 4.2.1 + resolution: "@npmcli/run-script@npm:4.2.1" + dependencies: + "@npmcli/node-gyp": ^2.0.0 + "@npmcli/promise-spawn": ^3.0.0 + node-gyp: ^9.0.0 + read-package-json-fast: ^2.0.3 + which: ^2.0.2 + checksum: 7b8d6676353f157e68b26baf848e01e5d887bcf90ce81a52f23fc9a5d93e6ffb60057532d664cfd7aeeb76d464d0c8b0d314ee6cccb56943acb3b6c570b756c8 + languageName: node + linkType: hard + +"@npmcli/run-script@npm:^6.0.0": + version: 6.0.0 + resolution: "@npmcli/run-script@npm:6.0.0" + 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 + checksum: 9fc387f7c405ae4948921764b8b970c12ae07df22bacc242b0f68709c99a83b9d12f411ebd7e60c85a933e2d7be42c70e243ebd71a8d3f6e783e1aab5ccbb2f5 + languageName: node + linkType: hard + +"@nrwl/cli@npm:15.8.6": + version: 15.8.6 + resolution: "@nrwl/cli@npm:15.8.6" + dependencies: + nx: 15.8.6 + checksum: d576972d1556d8eaf784199d48c942f0630e6177408ff80ceae467cc7ff3a3beb2ac6774a98f15aa9b7009f72c48347b8fa4187f911959ab389e656b601a17be + languageName: node + linkType: hard + +"@nrwl/cli@npm:15.8.7": + version: 15.8.7 + resolution: "@nrwl/cli@npm:15.8.7" + dependencies: + nx: 15.8.7 + checksum: 2c5b091cf0e55d181b0c6e6fc010d94672114a133ef57aab09ab4620f4c1d0599694304db5d89863c6b5ae5004b90c8d8bc4cb61a84f66449f3c420bb445baf3 + languageName: node + linkType: hard + +"@nrwl/devkit@npm:>=15.5.2 < 16": + version: 15.8.7 + resolution: "@nrwl/devkit@npm:15.8.7" + dependencies: + "@phenomnomnominal/tsquery": 4.1.1 + ejs: ^3.1.7 + ignore: ^5.0.4 + semver: 7.3.4 + tmp: ~0.2.1 + tslib: ^2.3.0 + peerDependencies: + nx: ">= 14.1 <= 16" + checksum: 3a8a5830be6a1ad83df6277482a49120d7318922187e527a901098e1ca75d0be90eb831d2241921f2a65a1945a196b87f37982a635ae5de7feac00ad64c4884f + languageName: node + linkType: hard + +"@nrwl/nx-darwin-arm64@npm:15.8.6": + version: 15.8.6 + resolution: "@nrwl/nx-darwin-arm64@npm:15.8.6" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@nrwl/nx-darwin-arm64@npm:15.8.7": + version: 15.8.7 + resolution: "@nrwl/nx-darwin-arm64@npm:15.8.7" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@nrwl/nx-darwin-x64@npm:15.8.6": + version: 15.8.6 + resolution: "@nrwl/nx-darwin-x64@npm:15.8.6" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@nrwl/nx-darwin-x64@npm:15.8.7": + version: 15.8.7 + resolution: "@nrwl/nx-darwin-x64@npm:15.8.7" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@nrwl/nx-linux-arm-gnueabihf@npm:15.8.6": + version: 15.8.6 + resolution: "@nrwl/nx-linux-arm-gnueabihf@npm:15.8.6" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@nrwl/nx-linux-arm-gnueabihf@npm:15.8.7": + version: 15.8.7 + resolution: "@nrwl/nx-linux-arm-gnueabihf@npm:15.8.7" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@nrwl/nx-linux-arm64-gnu@npm:15.8.6": + version: 15.8.6 + resolution: "@nrwl/nx-linux-arm64-gnu@npm:15.8.6" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@nrwl/nx-linux-arm64-gnu@npm:15.8.7": + version: 15.8.7 + resolution: "@nrwl/nx-linux-arm64-gnu@npm:15.8.7" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@nrwl/nx-linux-arm64-musl@npm:15.8.6": + version: 15.8.6 + resolution: "@nrwl/nx-linux-arm64-musl@npm:15.8.6" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@nrwl/nx-linux-arm64-musl@npm:15.8.7": + version: 15.8.7 + resolution: "@nrwl/nx-linux-arm64-musl@npm:15.8.7" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@nrwl/nx-linux-x64-gnu@npm:15.8.6": + version: 15.8.6 + resolution: "@nrwl/nx-linux-x64-gnu@npm:15.8.6" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@nrwl/nx-linux-x64-gnu@npm:15.8.7": + version: 15.8.7 + resolution: "@nrwl/nx-linux-x64-gnu@npm:15.8.7" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@nrwl/nx-linux-x64-musl@npm:15.8.6": + version: 15.8.6 + resolution: "@nrwl/nx-linux-x64-musl@npm:15.8.6" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@nrwl/nx-linux-x64-musl@npm:15.8.7": + version: 15.8.7 + resolution: "@nrwl/nx-linux-x64-musl@npm:15.8.7" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@nrwl/nx-win32-arm64-msvc@npm:15.8.6": + version: 15.8.6 + resolution: "@nrwl/nx-win32-arm64-msvc@npm:15.8.6" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@nrwl/nx-win32-arm64-msvc@npm:15.8.7": + version: 15.8.7 + resolution: "@nrwl/nx-win32-arm64-msvc@npm:15.8.7" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@nrwl/nx-win32-x64-msvc@npm:15.8.6": + version: 15.8.6 + resolution: "@nrwl/nx-win32-x64-msvc@npm:15.8.6" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@nrwl/nx-win32-x64-msvc@npm:15.8.7": + version: 15.8.7 + resolution: "@nrwl/nx-win32-x64-msvc@npm:15.8.7" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@nrwl/tao@npm:15.8.6": + version: 15.8.6 + resolution: "@nrwl/tao@npm:15.8.6" + dependencies: + nx: 15.8.6 + bin: + tao: index.js + checksum: 9391a0ffbbefd85b063f489f9c0a6652bab0c4cd9b04cd1d49260dfbffb7bc13e203cd3547eee4c70e7f8baa1fba55fa8d2bc646d25da9fe2f828a4439cff7a0 + languageName: node + linkType: hard + +"@nrwl/tao@npm:15.8.7": + version: 15.8.7 + resolution: "@nrwl/tao@npm:15.8.7" + dependencies: + nx: 15.8.7 + bin: + tao: index.js + checksum: 0045c017713226e4dc8d9eb36f0cd0882a534317519404993acc6d7d6fe2e1bcd4edf6b711b50ce311712b882968d386bc28d846cf61996b60389442d9c32f21 + languageName: node + linkType: hard + +"@octokit/auth-token@npm:^2.4.4": + version: 2.5.0 + resolution: "@octokit/auth-token@npm:2.5.0" + dependencies: + "@octokit/types": ^6.0.3 + checksum: 45949296c09abcd6beb4c3f69d45b0c1f265f9581d2a9683cf4d1800c4cf8259c2f58d58e44c16c20bffb85a0282a176c0d51f4af300e428b863f27b910e6297 + languageName: node + linkType: hard + +"@octokit/auth-token@npm:^3.0.0": + version: 3.0.3 + resolution: "@octokit/auth-token@npm:3.0.3" + dependencies: + "@octokit/types": ^9.0.0 + checksum: 9b3f569cec1b7e0aa88ab6da68aed4b49b6652261bd957257541fabaf6a4d4ed99f908153cc3dd2fe15b8b0ccaff8caaafaa50bb1a4de3925b0954a47cca1900 + languageName: node + linkType: hard + +"@octokit/core@npm:^3.5.1": + version: 3.6.0 + resolution: "@octokit/core@npm:3.6.0" + dependencies: + "@octokit/auth-token": ^2.4.4 + "@octokit/graphql": ^4.5.8 + "@octokit/request": ^5.6.3 + "@octokit/request-error": ^2.0.5 + "@octokit/types": ^6.0.3 + before-after-hook: ^2.2.0 + universal-user-agent: ^6.0.0 + checksum: f81160129037bd8555d47db60cd5381637b7e3602ad70735a7bdf8f3d250c7b7114a666bb12ef7a8746a326a5d72ed30a1b8f8a5a170007f7285c8e217bef1f0 + languageName: node + linkType: hard + +"@octokit/core@npm:^4.0.0": + version: 4.2.0 + resolution: "@octokit/core@npm:4.2.0" + dependencies: + "@octokit/auth-token": ^3.0.0 + "@octokit/graphql": ^5.0.0 + "@octokit/request": ^6.0.0 + "@octokit/request-error": ^3.0.0 + "@octokit/types": ^9.0.0 + before-after-hook: ^2.2.0 + universal-user-agent: ^6.0.0 + checksum: 5ac56e7f14b42a5da8d3075a2ae41483521a78bee061a01f4a81d8c0ecd6a684b2e945d66baba0cd1fdf264639deedc3a96d0f32c4d2fc39b49ca10f52f4de39 + languageName: node + linkType: hard + +"@octokit/endpoint@npm:^6.0.1": + version: 6.0.12 + resolution: "@octokit/endpoint@npm:6.0.12" + dependencies: + "@octokit/types": ^6.0.3 + is-plain-object: ^5.0.0 + universal-user-agent: ^6.0.0 + checksum: b48b29940af11c4b9bca41cf56809754bb8385d4e3a6122671799d27f0238ba575b3fde86d2d30a84f4dbbc14430940de821e56ecc6a9a92d47fc2b29a31479d + languageName: node + linkType: hard + +"@octokit/endpoint@npm:^7.0.0": + version: 7.0.5 + resolution: "@octokit/endpoint@npm:7.0.5" + dependencies: + "@octokit/types": ^9.0.0 + is-plain-object: ^5.0.0 + universal-user-agent: ^6.0.0 + checksum: 81c9e9eabf50e48940cceff7c4d7fbc9327190296507cfe8a199ea00cd492caf8f18a841caf4e3619828924b481996eb16091826db6b5a649bee44c8718ecaa9 + languageName: node + linkType: hard + +"@octokit/graphql@npm:^4.5.8": + version: 4.8.0 + resolution: "@octokit/graphql@npm:4.8.0" + dependencies: + "@octokit/request": ^5.6.0 + "@octokit/types": ^6.0.3 + universal-user-agent: ^6.0.0 + checksum: f68afe53f63900d4a16a0a733f2f500df2695b731f8ed32edb728d50edead7f5011437f71d069c2d2f6d656227703d0c832a3c8af58ecf82bd5dcc051f2d2d74 + languageName: node + linkType: hard + +"@octokit/graphql@npm:^5.0.0": + version: 5.0.5 + resolution: "@octokit/graphql@npm:5.0.5" + dependencies: + "@octokit/request": ^6.0.0 + "@octokit/types": ^9.0.0 + universal-user-agent: ^6.0.0 + checksum: eb2d1a6305a3d1f55ff0ce92fb88b677f0bb789757152d58a79ef61171fb65ecf6fe18d6c27e236c0cee6a0c2600c2cb8370f5ac7184f8e9361c085aa4555bb1 + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^12.11.0": + version: 12.11.0 + resolution: "@octokit/openapi-types@npm:12.11.0" + checksum: 8a7d4bd6288cc4085cabe0ca9af2b87c875c303af932cb138aa1b2290eb69d32407759ac23707bb02776466e671244a902e9857896903443a69aff4b6b2b0e3b + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^14.0.0": + version: 14.0.0 + resolution: "@octokit/openapi-types@npm:14.0.0" + checksum: 0a1f8f3be998cd82c5a640e9166d43fd183b33d5d36f5e1a9b81608e94d0da87c01ec46c9988f69cd26585d4e2ffc4d3ec99ee4f75e5fe997fc86dad0aa8293c + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^16.0.0": + version: 16.0.0 + resolution: "@octokit/openapi-types@npm:16.0.0" + checksum: 844f30a545da380d63c712e0eb733366bc567d1aab34529c79fdfbec3d73810e81d83f06fdab13058a5cbc7dae786db1a9b90b5b61b1e606854ee45d5ec5f194 + languageName: node + linkType: hard + +"@octokit/plugin-enterprise-compatibility@npm:1.3.0": + version: 1.3.0 + resolution: "@octokit/plugin-enterprise-compatibility@npm:1.3.0" + dependencies: + "@octokit/request-error": ^2.1.0 + "@octokit/types": ^6.0.3 + checksum: c1abbab41ce6ebf4ec57c5d9c544e5de0305ab2a503ce5f384d287fa7393708a37b794c5fb0d2bdf312d5ab05635af0ec4f1eb3f58bfcd5ff7e13dcd1b5c42b0 + languageName: node + linkType: hard + +"@octokit/plugin-enterprise-rest@npm:6.0.1": + version: 6.0.1 + resolution: "@octokit/plugin-enterprise-rest@npm:6.0.1" + checksum: 1c9720002f31daf62f4f48e73557dcdd7fcde6e0f6d43256e3f2ec827b5548417297186c361fb1af497fdcc93075a7b681e6ff06e2f20e4a8a3e74cc09d1f7e3 + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:^2.16.8": + version: 2.21.3 + resolution: "@octokit/plugin-paginate-rest@npm:2.21.3" + dependencies: + "@octokit/types": ^6.40.0 + peerDependencies: + "@octokit/core": ">=2" + checksum: acf31de2ba4021bceec7ff49c5b0e25309fc3c009d407f153f928ddf436ab66cd4217344138378d5523f5fb233896e1db58c9c7b3ffd9612a66d760bc5d319ed + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:^3.0.0": + version: 3.1.0 + resolution: "@octokit/plugin-paginate-rest@npm:3.1.0" + dependencies: + "@octokit/types": ^6.41.0 + peerDependencies: + "@octokit/core": ">=4" + checksum: a09212a1c6e0be4a7929acd192659cb204fcb7c6a52cf7e7f1b87da0338d812c8c26e7ee44d00e8b9824d8904d6caaa978a84c26001ab982ffec5123600aa4d8 + languageName: node + linkType: hard + +"@octokit/plugin-request-log@npm:^1.0.4": + version: 1.0.4 + resolution: "@octokit/plugin-request-log@npm:1.0.4" + peerDependencies: + "@octokit/core": ">=3" + checksum: 2086db00056aee0f8ebd79797b5b57149ae1014e757ea08985b71eec8c3d85dbb54533f4fd34b6b9ecaa760904ae6a7536be27d71e50a3782ab47809094bfc0c + languageName: node + linkType: hard + +"@octokit/plugin-rest-endpoint-methods@npm:^5.12.0": + version: 5.16.2 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:5.16.2" + dependencies: + "@octokit/types": ^6.39.0 + deprecation: ^2.3.1 + peerDependencies: + "@octokit/core": ">=3" + checksum: 30fcc50c335d1093f03573d9fa3a4b7d027fc98b215c43e07e82ee8dabfa0af0cf1b963feb542312ae32d897a2f68dc671577206f30850215517bebedc5a2c73 + languageName: node + linkType: hard + +"@octokit/plugin-rest-endpoint-methods@npm:^6.0.0": + version: 6.8.1 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:6.8.1" + dependencies: + "@octokit/types": ^8.1.1 + deprecation: ^2.3.1 + peerDependencies: + "@octokit/core": ">=3" + checksum: 7ccefb3bd06089dbc6152a9555cf76f16a34673aa5512d5d353bc07434343eb97acd36ce91ef00707a5fdfa65f2fb03618071a5ef0df6c5e0bb077aea21b7b22 + languageName: node + linkType: hard + +"@octokit/plugin-retry@npm:^3.0.9": + version: 3.0.9 + resolution: "@octokit/plugin-retry@npm:3.0.9" + dependencies: + "@octokit/types": ^6.0.3 + bottleneck: ^2.15.3 + checksum: 5744780d308dd2f2b8174264604a9f8ea977374256f5eaf0314e5181c32f96ec53a3cfcee67bf1b48dc7eed401ebefebd2fa744b41cf03103affac92f397a874 + languageName: node + linkType: hard + +"@octokit/plugin-throttling@npm:^3.6.2": + version: 3.7.0 + resolution: "@octokit/plugin-throttling@npm:3.7.0" + dependencies: + "@octokit/types": ^6.0.1 + bottleneck: ^2.15.3 + peerDependencies: + "@octokit/core": ^3.5.0 + checksum: a1c29094d060f1c221c2795b899cb86cd83dc71ea61c6e2a272aabed4f7856bfac2696f3e8f31beccc7c99bbe14d172d3175cd68ae939ae5ff1d01fadf8df00b + languageName: node + linkType: hard + +"@octokit/request-error@npm:^2.0.5, @octokit/request-error@npm:^2.1.0": + version: 2.1.0 + resolution: "@octokit/request-error@npm:2.1.0" + dependencies: + "@octokit/types": ^6.0.3 + deprecation: ^2.0.0 + once: ^1.4.0 + checksum: baec2b5700498be01b4d958f9472cb776b3f3b0ea52924323a07e7a88572e24cac2cdf7eb04a0614031ba346043558b47bea2d346e98f0e8385b4261f138ef18 + languageName: node + linkType: hard + +"@octokit/request-error@npm:^3.0.0": + version: 3.0.3 + resolution: "@octokit/request-error@npm:3.0.3" + dependencies: + "@octokit/types": ^9.0.0 + deprecation: ^2.0.0 + once: ^1.4.0 + checksum: 5db0b514732686b627e6ed9ef1ccdbc10501f1b271a9b31f784783f01beee70083d7edcfeb35fbd7e569fa31fdd6762b1ff6b46101700d2d97e7e48e749520d0 + languageName: node + linkType: hard + +"@octokit/request@npm:^5.6.0, @octokit/request@npm:^5.6.3": + version: 5.6.3 + resolution: "@octokit/request@npm:5.6.3" + dependencies: + "@octokit/endpoint": ^6.0.1 + "@octokit/request-error": ^2.1.0 + "@octokit/types": ^6.16.1 + is-plain-object: ^5.0.0 + node-fetch: ^2.6.7 + universal-user-agent: ^6.0.0 + checksum: c0b4542eb4baaf880d673c758d3e0b5c4a625a4ae30abf40df5548b35f1ff540edaac74625192b1aff42a79ac661e774da4ab7d5505f1cb4ef81239b1e8510c5 + languageName: node + linkType: hard + +"@octokit/request@npm:^6.0.0": + version: 6.2.3 + resolution: "@octokit/request@npm:6.2.3" + dependencies: + "@octokit/endpoint": ^7.0.0 + "@octokit/request-error": ^3.0.0 + "@octokit/types": ^9.0.0 + is-plain-object: ^5.0.0 + node-fetch: ^2.6.7 + universal-user-agent: ^6.0.0 + checksum: fef4097be8375d20bb0b3276d8a3adf866ec628f2b0664d334f3c29b92157da847899497abdc7a5be540053819b55564990543175ad48f04e9e6f25f0395d4d3 + languageName: node + linkType: hard + +"@octokit/rest@npm:19.0.3": + version: 19.0.3 + resolution: "@octokit/rest@npm:19.0.3" + dependencies: + "@octokit/core": ^4.0.0 + "@octokit/plugin-paginate-rest": ^3.0.0 + "@octokit/plugin-request-log": ^1.0.4 + "@octokit/plugin-rest-endpoint-methods": ^6.0.0 + checksum: 9ee96976c4c22dab11b3dacd541e694f3ad9bb1d44243985dc90ce6e8a42c3e3176a206e8d3a883b63b517fc15af8c8c88d8d0ecd9bac2b86a635a9667fc6ff4 + languageName: node + linkType: hard + +"@octokit/rest@npm:^18.12.0": + version: 18.12.0 + resolution: "@octokit/rest@npm:18.12.0" + dependencies: + "@octokit/core": ^3.5.1 + "@octokit/plugin-paginate-rest": ^2.16.8 + "@octokit/plugin-request-log": ^1.0.4 + "@octokit/plugin-rest-endpoint-methods": ^5.12.0 + checksum: c18bd6676a60b66819b016b0f969fcd04d8dfa04d01b7af9af9a7410ff028c621c995185e29454c23c47906da506c1e01620711259989a964ebbfd9106f5b715 + languageName: node + linkType: hard + +"@octokit/types@npm:^6.0.1, @octokit/types@npm:^6.0.3, @octokit/types@npm:^6.16.1, @octokit/types@npm:^6.39.0, @octokit/types@npm:^6.40.0, @octokit/types@npm:^6.41.0": + version: 6.41.0 + resolution: "@octokit/types@npm:6.41.0" + dependencies: + "@octokit/openapi-types": ^12.11.0 + checksum: fd6f75e0b19b90d1a3d244d2b0c323ed8f2f05e474a281f60a321986683548ef2e0ec2b3a946aa9405d6092e055344455f69f58957c60f58368c8bdda5b7d2ab + languageName: node + linkType: hard + +"@octokit/types@npm:^8.1.1": + version: 8.2.1 + resolution: "@octokit/types@npm:8.2.1" + dependencies: + "@octokit/openapi-types": ^14.0.0 + checksum: 92f2fe5ea8c4c6ddbb2363c74cd865c64e5753eaa4895bc925b5064390890b1441c5406015d8a92285f386cc7e6fe714c47fe4beda370fcda9177153299c9e37 + languageName: node + linkType: hard + +"@octokit/types@npm:^9.0.0": + version: 9.0.0 + resolution: "@octokit/types@npm:9.0.0" + dependencies: + "@octokit/openapi-types": ^16.0.0 + checksum: 5c7f5cca8f00f7c4daa0d00f4fe991c1598ec47cd6ced50b1c5fbe9721bb9dee0adc2acdee265a3a715bb984e53ef3dc7f1cfb7326f712c6d809d59fc5c6648d + languageName: node + linkType: hard + +"@parcel/watcher@npm:2.0.4": + version: 2.0.4 + resolution: "@parcel/watcher@npm:2.0.4" + dependencies: + node-addon-api: ^3.2.1 + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 890bdc69a52942791b276caa2cd65ef816576d6b5ada91aa28cf302b35d567c801dafe167f2525dcb313f5b420986ea11bd56228dd7ddde1116944d8f924a0a1 + languageName: node + linkType: hard + +"@phenomnomnominal/tsquery@npm:4.1.1": + version: 4.1.1 + resolution: "@phenomnomnominal/tsquery@npm:4.1.1" + dependencies: + esquery: ^1.0.1 + peerDependencies: + typescript: ^3 || ^4 + checksum: 64eb6d90aafa889f62fe73d128b7be2b3295dffde4d5dff63bad75d512b6bc1d8419d8fc784a1a60b45aba4cda2eaf6e233bf59797a1d91b26fac27d99dae047 + languageName: node + linkType: hard + +"@pkgr/utils@npm:^2.3.1": + version: 2.3.1 + resolution: "@pkgr/utils@npm:2.3.1" + dependencies: + cross-spawn: ^7.0.3 + is-glob: ^4.0.3 + open: ^8.4.0 + picocolors: ^1.0.0 + tiny-glob: ^0.2.9 + tslib: ^2.4.0 + checksum: 118a1971120253740121a1db0a6658c21195b7da962acf9c124b507a3df707cfc97b0b84a16edcbd4352853b182e8337da9fc6e8e3d06c60d75ae4fb42321c75 + languageName: node + linkType: hard + +"@playwright/test@npm:^1.32.3": + version: 1.32.3 + resolution: "@playwright/test@npm:1.32.3" + dependencies: + "@types/node": "*" + fsevents: 2.3.2 + playwright-core: 1.32.3 + dependenciesMeta: + fsevents: + optional: true + bin: + playwright: cli.js + checksum: f248e5851d04183954ec6f3a5f2c8e3b0ea0085a83e0e695068c5c2eb6acd4dddb16829a429829a4eb9fe0a4518f6a5594890cf9bf4259255c9e07a5964be625 + languageName: node + linkType: hard + +"@sigstore/protobuf-specs@npm:^0.1.0": + version: 0.1.0 + resolution: "@sigstore/protobuf-specs@npm:0.1.0" + checksum: 9959bc5176906609dda6ad2a1f5226fac1e49fcb4d29f38969d2a2e3a05cba8e2479721ba78c46a507513abacb63f25a991e5e8856c300204cded455f34ba8c5 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.25.16": + version: 0.25.24 + resolution: "@sinclair/typebox@npm:0.25.24" + checksum: 10219c58f40b8414c50b483b0550445e9710d4fe7b2c4dccb9b66533dd90ba8e024acc776026cebe81e87f06fa24b07fdd7bc30dd277eb9cc386ec50151a3026 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^2.0.0": + version: 2.0.0 + resolution: "@sinonjs/commons@npm:2.0.0" + dependencies: + type-detect: 4.0.8 + checksum: 5023ba17edf2b85ed58262313b8e9b59e23c6860681a9af0200f239fe939e2b79736d04a260e8270ddd57196851dde3ba754d7230be5c5234e777ae2ca8af137 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.0.2 + resolution: "@sinonjs/fake-timers@npm:10.0.2" + dependencies: + "@sinonjs/commons": ^2.0.0 + checksum: c62aa98e7cefda8dedc101ce227abc888dc46b8ff9706c5f0a8dfd9c3ada97d0a5611384738d9ba0b26b59f99c2ba24efece8e779bb08329e9e87358fa309824 + languageName: node + linkType: hard + +"@swc/core-darwin-arm64@npm:1.3.55": + version: 1.3.55 + resolution: "@swc/core-darwin-arm64@npm:1.3.55" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-darwin-x64@npm:1.3.55": + version: 1.3.55 + resolution: "@swc/core-darwin-x64@npm:1.3.55" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@swc/core-linux-arm-gnueabihf@npm:1.3.55": + version: 1.3.55 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.55" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@swc/core-linux-arm64-gnu@npm:1.3.55": + version: 1.3.55 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.55" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-arm64-musl@npm:1.3.55": + version: 1.3.55 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.55" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-linux-x64-gnu@npm:1.3.55": + version: 1.3.55 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.55" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-x64-musl@npm:1.3.55": + version: 1.3.55 + resolution: "@swc/core-linux-x64-musl@npm:1.3.55" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-win32-arm64-msvc@npm:1.3.55": + version: 1.3.55 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.55" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-win32-ia32-msvc@npm:1.3.55": + version: 1.3.55 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.55" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@swc/core-win32-x64-msvc@npm:1.3.55": + version: 1.3.55 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.55" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@swc/core@npm:^1.3.55": + version: 1.3.55 + resolution: "@swc/core@npm:1.3.55" + dependencies: + "@swc/core-darwin-arm64": 1.3.55 + "@swc/core-darwin-x64": 1.3.55 + "@swc/core-linux-arm-gnueabihf": 1.3.55 + "@swc/core-linux-arm64-gnu": 1.3.55 + "@swc/core-linux-arm64-musl": 1.3.55 + "@swc/core-linux-x64-gnu": 1.3.55 + "@swc/core-linux-x64-musl": 1.3.55 + "@swc/core-win32-arm64-msvc": 1.3.55 + "@swc/core-win32-ia32-msvc": 1.3.55 + "@swc/core-win32-x64-msvc": 1.3.55 + peerDependencies: + "@swc/helpers": ^0.5.0 + dependenciesMeta: + "@swc/core-darwin-arm64": + optional: true + "@swc/core-darwin-x64": + optional: true + "@swc/core-linux-arm-gnueabihf": + optional: true + "@swc/core-linux-arm64-gnu": + optional: true + "@swc/core-linux-arm64-musl": + optional: true + "@swc/core-linux-x64-gnu": + optional: true + "@swc/core-linux-x64-musl": + optional: true + "@swc/core-win32-arm64-msvc": + optional: true + "@swc/core-win32-ia32-msvc": + optional: true + "@swc/core-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc/helpers": + optional: true + checksum: e8ae32e21e78761597b802bd76bb5f0d819441454c4cc5624c077dfa8cf84760eb589e4a1eb6fdc1b1ec65a4b03f7ab42413952b38234f5c13b8b2afb4d453f4 + languageName: node + linkType: hard + +"@swc/jest@npm:^0.2.26": + version: 0.2.26 + resolution: "@swc/jest@npm:0.2.26" + dependencies: + "@jest/create-cache-key-function": ^27.4.2 + jsonc-parser: ^3.2.0 + peerDependencies: + "@swc/core": "*" + checksum: 771821ed08cf168ca0b6307dee7689253d0af0685acd08408ac431860a7c42ace892db2cb6bb6dcfe297edbdce0f2e22d44ed4ed72d1c621be9e841cffd408a0 + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.9 + resolution: "@tsconfig/node10@npm:1.0.9" + checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.3 + resolution: "@tsconfig/node16@npm:1.0.3" + checksum: 3a8b657dd047495b7ad23437d6afd20297ce90380ff0bdee93fc7d39a900dbd8d9e26e53ff6b465e7967ce2adf0b218782590ce9013285121e6a5928fbd6819f + languageName: node + linkType: hard + +"@tufjs/models@npm:1.0.1": + version: 1.0.1 + resolution: "@tufjs/models@npm:1.0.1" + dependencies: + minimatch: ^7.4.2 + checksum: 2f8ebc8e8ef56be67051077b09c7611f50e04d89f8277e3ab518565fbbdf5c81e725c66ae3793cdcc9ec443eb1229dccc3af5d96ec71a134e4c00ea749733bcd + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.1.14": + version: 7.20.0 + resolution: "@types/babel__core@npm:7.20.0" + dependencies: + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: 49b601a0a7637f1f387442c8156bd086cfd10ff4b82b0e1994e73a6396643b5435366fb33d6b604eade8467cca594ef97adcbc412aede90bb112ebe88d0ad6df + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.4 + resolution: "@types/babel__generator@npm:7.6.4" + dependencies: + "@babel/types": ^7.0.0 + checksum: 20effbbb5f8a3a0211e95959d06ae70c097fb6191011b73b38fe86deebefad8e09ee014605e0fd3cdaedc73d158be555866810e9166e1f09e4cfd880b874dcb0 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.1 + resolution: "@types/babel__template@npm:7.4.1" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + checksum: 649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": + version: 7.18.3 + resolution: "@types/babel__traverse@npm:7.18.3" + dependencies: + "@babel/types": ^7.3.0 + checksum: d20953338b2f012ab7750932ece0a78e7d1645b0a6ff42d49be90f55e9998085da1374a9786a7da252df89555c6586695ba4d1d4b4e88ab2b9f306bcd35e00d3 + languageName: node + linkType: hard + +"@types/command-line-args@npm:^5.0.0": + version: 5.2.0 + resolution: "@types/command-line-args@npm:5.2.0" + checksum: 423121d2d083765f5b78d090115f3be82d53a39cec9de63719cbd07021e6330fab19b75e2290af1f7dda84efd7964dc498eb10b2b465991de27045db95aa1eef + languageName: node + linkType: hard + +"@types/command-line-usage@npm:^5.0.1": + version: 5.0.2 + resolution: "@types/command-line-usage@npm:5.0.2" + checksum: 9c0eabf5e86a405d118dcfb5f4bceae43080efe603a0f240664716a05283dcb389e94e999188d12b10a0aa4452a920445131f1011e7484403f146607cd2577f0 + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.6 + resolution: "@types/graceful-fs@npm:4.1.6" + dependencies: + "@types/node": "*" + checksum: c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": + version: 2.0.4 + resolution: "@types/istanbul-lib-coverage@npm:2.0.4" + checksum: a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.0 + resolution: "@types/istanbul-lib-report@npm:3.0.0" + dependencies: + "@types/istanbul-lib-coverage": "*" + checksum: 656398b62dc288e1b5226f8880af98087233cdb90100655c989a09f3052b5775bf98ba58a16c5ae642fb66c61aba402e07a9f2bff1d1569e3b306026c59f3f36 + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.1 + resolution: "@types/istanbul-reports@npm:3.0.1" + dependencies: + "@types/istanbul-lib-report": "*" + checksum: f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903 + languageName: node + linkType: hard + +"@types/jest@npm:^29.5.1": + version: 29.5.1 + resolution: "@types/jest@npm:29.5.1" + dependencies: + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: 0a22491dec86333c0e92b897be2c809c922a7b2b0aa5604ac369810d6b2360908b4a3f2c6892e8a237a54fa1f10ecefe0e823ec5fcb7915195af4dfe88d2197e + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.9": + version: 7.0.11 + resolution: "@types/json-schema@npm:7.0.11" + checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d + languageName: node + linkType: hard + +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac + languageName: node + linkType: hard + +"@types/minimatch@npm:^3.0.3": + version: 3.0.5 + resolution: "@types/minimatch@npm:3.0.5" + checksum: c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 + languageName: node + linkType: hard + +"@types/minimist@npm:^1.2.0": + version: 1.2.2 + resolution: "@types/minimist@npm:1.2.2" + checksum: b8da83c66eb4aac0440e64674b19564d9d86c80ae273144db9681e5eeff66f238ade9515f5006ffbfa955ceff8b89ad2bd8ec577d7caee74ba101431fb07045d + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 18.15.5 + resolution: "@types/node@npm:18.15.5" + checksum: 5fbf3453bd5ce1402bb2964e55d928fc8a8a7de5451b1b0fe66587fecb8a3eb86854ca9cefa5076a5971e2cff00e1773ceeb5d872a54f6c6ddfbbc1064b4e91a + languageName: node + linkType: hard + +"@types/node@npm:^18.16.1": + version: 18.16.1 + resolution: "@types/node@npm:18.16.1" + checksum: 799026b949a48993cba7c9b81b2eabfdfb34c880744cb44c1c990fbedc9e315f3634d126eb2cf9a6e0795577c01016e2326d98565bef695ada9d363fadeb6946 + languageName: node + linkType: hard + +"@types/normalize-package-data@npm:^2.4.0": + version: 2.4.1 + resolution: "@types/normalize-package-data@npm:2.4.1" + checksum: e87bccbf11f95035c89a132b52b79ce69a1e3652fe55962363063c9c0dae0fe2477ebc585e03a9652adc6f381d24ba5589cc5e51849df4ced3d3e004a7d40ed5 + languageName: node + linkType: hard + +"@types/parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "@types/parse-json@npm:4.0.0" + checksum: fd6bce2b674b6efc3db4c7c3d336bd70c90838e8439de639b909ce22f3720d21344f52427f1d9e57b265fcb7f6c018699b99e5e0c208a1a4823014269a6bf35b + languageName: node + linkType: hard + +"@types/prettier@npm:^2.1.5": + version: 2.7.2 + resolution: "@types/prettier@npm:2.7.2" + checksum: b47d76a5252265f8d25dd2fe2a5a61dc43ba0e6a96ffdd00c594cb4fd74c1982c2e346497e3472805d97915407a09423804cc2110a0b8e1b22cffcab246479b7 + languageName: node + linkType: hard + +"@types/semver@npm:^7.3.12": + version: 7.3.13 + resolution: "@types/semver@npm:7.3.13" + checksum: 00c0724d54757c2f4bc60b5032fe91cda6410e48689633d5f35ece8a0a66445e3e57fa1d6e07eb780f792e82ac542948ec4d0b76eb3484297b79bd18b8cf1cb0 + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.0": + version: 2.0.1 + resolution: "@types/stack-utils@npm:2.0.1" + checksum: 205fdbe3326b7046d7eaf5e494d8084f2659086a266f3f9cf00bccc549c8e36e407f88168ad4383c8b07099957ad669f75f2532ed4bc70be2b037330f7bae019 + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.0 + resolution: "@types/yargs-parser@npm:21.0.0" + checksum: b2f4c8d12ac18a567440379909127cf2cec393daffb73f246d0a25df36ea983b93b7e9e824251f959e9f928cbc7c1aab6728d0a0ff15d6145f66cec2be67d9a2 + languageName: node + linkType: hard + +"@types/yargs@npm:^16.0.0": + version: 16.0.5 + resolution: "@types/yargs@npm:16.0.5" + dependencies: + "@types/yargs-parser": "*" + checksum: 22697f7cc8aa32dcc10981a87f035e183303a58351c537c81fb450270d5c494b1d918186210e445b0eb2e4a8b34a8bda2a595f346bdb1c9ed2b63d193cb00430 + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.23 + resolution: "@types/yargs@npm:17.0.23" + dependencies: + "@types/yargs-parser": "*" + checksum: c5f787d7a9a36ea94ba5d3f340fc5d93d2860eff8fa9731cd614ed23212e4fca75637e2386e37e376a720e4bf088ceed6f39050f1c3638fc1b75bce5c70b1ad4 + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^5.59.1": + version: 5.59.1 + resolution: "@typescript-eslint/eslint-plugin@npm:5.59.1" + dependencies: + "@eslint-community/regexpp": ^4.4.0 + "@typescript-eslint/scope-manager": 5.59.1 + "@typescript-eslint/type-utils": 5.59.1 + "@typescript-eslint/utils": 5.59.1 + debug: ^4.3.4 + grapheme-splitter: ^1.0.4 + ignore: ^5.2.0 + natural-compare-lite: ^1.4.0 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependencies: + "@typescript-eslint/parser": ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 9ada3ae721594ddd8101a6093e6383bc95e4dcb19b3929210dee5480637786473a9eba2e69e61e560fa592965f4fd02aeb98ddfda91b00b448ae01c5d77431d6 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^5.59.1": + version: 5.59.1 + resolution: "@typescript-eslint/parser@npm:5.59.1" + dependencies: + "@typescript-eslint/scope-manager": 5.59.1 + "@typescript-eslint/types": 5.59.1 + "@typescript-eslint/typescript-estree": 5.59.1 + debug: ^4.3.4 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: d324d32a69e06ab12aacb72cd3e2a8eb8ade6c2a4d4e6bb013941588a675e818a8ebd973bef1cd818da6a76eb00908bf66d84ef214c3f015dfcb40f8067a335e + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:5.56.0": + version: 5.56.0 + resolution: "@typescript-eslint/scope-manager@npm:5.56.0" + dependencies: + "@typescript-eslint/types": 5.56.0 + "@typescript-eslint/visitor-keys": 5.56.0 + checksum: bacac255ee52148cee6622be2811c0d7e25419058b89f1a11f4c1303faef4535a0a1237549f9556ec1d7a297c640ce4357183a1a8465d72e1393b7d8fb43874b + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:5.59.1": + version: 5.59.1 + resolution: "@typescript-eslint/scope-manager@npm:5.59.1" + dependencies: + "@typescript-eslint/types": 5.59.1 + "@typescript-eslint/visitor-keys": 5.59.1 + checksum: ae7758181d0f18d1ad20abf95164553fa98c20410968d538ac7abd430ec59f69e30d4da16ad968d029feced1ed49abc65daf6685c996eb4529d798e8320204ff + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:5.59.1": + version: 5.59.1 + resolution: "@typescript-eslint/type-utils@npm:5.59.1" + dependencies: + "@typescript-eslint/typescript-estree": 5.59.1 + "@typescript-eslint/utils": 5.59.1 + debug: ^4.3.4 + tsutils: ^3.21.0 + peerDependencies: + eslint: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: ff46cc049995bb6505a6170550a9e658c42cd5699a95e1976822318fef2963381223505f797051fc727938ace66d4a7dc072a4b4cadbbdf91d2fda1a16c05c98 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:5.56.0": + version: 5.56.0 + resolution: "@typescript-eslint/types@npm:5.56.0" + checksum: 82ca11553bbb1bbfcaf7e7760b03c0d898940238dc002552c21af3e58f7d482c64c3c6cf0666521aff2a1e7b4b58bb6e4d9a00b1e4998a16b5039f5d288d003a + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:5.59.1": + version: 5.59.1 + resolution: "@typescript-eslint/types@npm:5.59.1" + checksum: 40ea7ccf59c4951797d3761e53c866a5979e07fbdabef9dc07d3a3f625a99d4318d5329ae8e628cdfdc0bb9bb6e6d8dfb740f33c7bf318e63fa0a863b9ae85c7 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:5.56.0": + version: 5.56.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.56.0" + dependencies: + "@typescript-eslint/types": 5.56.0 + "@typescript-eslint/visitor-keys": 5.56.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: ec3e85201786aa9adddba7cb834a9f330a7f55c729ee9ccf847dbdc2f7437b760f3774152ccad6d0aa48d13fd78df766c880e3a7ca42e01a20aba0e1a1ed61c5 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:5.59.1": + version: 5.59.1 + resolution: "@typescript-eslint/typescript-estree@npm:5.59.1" + dependencies: + "@typescript-eslint/types": 5.59.1 + "@typescript-eslint/visitor-keys": 5.59.1 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: e33081937225f38e717ac2f9e90c4a8c6b71b701923eea3e03be76d8c466f0d3c6a4ec1d65c9fc1da4f1989416d386305353c5b53aa736d3af9503061001e3eb + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:5.59.1": + version: 5.59.1 + resolution: "@typescript-eslint/utils@npm:5.59.1" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@types/json-schema": ^7.0.9 + "@types/semver": ^7.3.12 + "@typescript-eslint/scope-manager": 5.59.1 + "@typescript-eslint/types": 5.59.1 + "@typescript-eslint/typescript-estree": 5.59.1 + eslint-scope: ^5.1.1 + semver: ^7.3.7 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: ca32c90efa57e937ebf812221e070c0604ca99f900fbca60578b42d40c923d5a94fd9503cf5918ecd75b687b68a1be562f7c6593a329bc40b880c95036a021c0 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:^5.10.0": + version: 5.56.0 + resolution: "@typescript-eslint/utils@npm:5.56.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@types/json-schema": ^7.0.9 + "@types/semver": ^7.3.12 + "@typescript-eslint/scope-manager": 5.56.0 + "@typescript-eslint/types": 5.56.0 + "@typescript-eslint/typescript-estree": 5.56.0 + eslint-scope: ^5.1.1 + semver: ^7.3.7 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 413e8d4bf7023ee5ba4f695b62e796a1f94930bb92fe5aa0cee58f63b9837116c23f618825a9c671f610e50f5630188b6059b4ed6b05a2a3336f01d8e977becb + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.56.0": + version: 5.56.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.56.0" + dependencies: + "@typescript-eslint/types": 5.56.0 + eslint-visitor-keys: ^3.3.0 + checksum: 568fda40134e153d7befb59b55698f7919ba780d2d3431d8745feabf2e0fbb8aa7a02173b3c467dd20a0f6594e5248a1f82bb25d6c37827716d77452e86cad29 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.59.1": + version: 5.59.1 + resolution: "@typescript-eslint/visitor-keys@npm:5.59.1" + dependencies: + "@typescript-eslint/types": 5.59.1 + eslint-visitor-keys: ^3.3.0 + checksum: f98e399147310cad67de718a8a6336f053d46753bade380c89ddac3dd49512555c3f613636b255ce0b5e2b004654d1c167eb5e53fc8085148b637a5afc20cdd8 + languageName: node + linkType: hard + +"@yarnpkg/lockfile@npm:^1.1.0": + version: 1.1.0 + resolution: "@yarnpkg/lockfile@npm:1.1.0" + checksum: 05b881b4866a3546861fee756e6d3812776ea47fa6eb7098f983d6d0eefa02e12b66c3fff931574120f196286a7ad4879ce02743c8bb2be36c6a576c7852083a + languageName: node + linkType: hard + +"@yarnpkg/parsers@npm:^3.0.0-rc.18": + version: 3.0.0-rc.40 + resolution: "@yarnpkg/parsers@npm:3.0.0-rc.40" + dependencies: + js-yaml: ^3.10.0 + tslib: ^2.4.0 + checksum: 64df0d8dad4cd43af5fcff758b0cfc47e7dc56e00eed87e3bd6ce8a9ea265c41fe758c1e01607e630bae46c9f8324ca853bced58be3d1c93492e125757ab7f30 + languageName: node + linkType: hard + +"@zkochan/js-yaml@npm:0.0.6": + version: 0.0.6 + resolution: "@zkochan/js-yaml@npm:0.0.6" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: 51b81597a1d1d79c778b8fae48317eaad78d75223d0b7477ad2b35f47cf63b19504da430bb7a03b326e668b282874242cc123e323e57293be038684cb5e755f8 + languageName: node + linkType: hard + +"JSONStream@npm:^1.0.4": + version: 1.3.5 + resolution: "JSONStream@npm:1.3.5" + dependencies: + jsonparse: ^1.2.0 + through: ">=2.2.7 <3" + bin: + JSONStream: ./bin.js + checksum: 2605fa124260c61bad38bb65eba30d2f72216a78e94d0ab19b11b4e0327d572b8d530c0c9cc3b0764f727ad26d39e00bf7ebad57781ca6368394d73169c59e46 + languageName: node + linkType: hard + +"abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 + languageName: node + linkType: hard + +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: ^5.0.0 + checksum: 170bdba9b47b7e65906a28c8ce4f38a7a369d78e2271706f020849c1bfe0ee2067d4261df8bbb66eb84f79208fd5b710df759d64191db58cfba7ce8ef9c54b75 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.1.1": + version: 8.2.0 + resolution: "acorn-walk@npm:8.2.0" + checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 + languageName: node + linkType: hard + +"acorn@npm:^8.4.1, acorn@npm:^8.8.0": + version: 8.8.2 + resolution: "acorn@npm:8.8.2" + bin: + acorn: bin/acorn + checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 + languageName: node + linkType: hard + +"add-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "add-stream@npm:1.0.0" + checksum: 3e9e8b0b8f0170406d7c3a9a39bfbdf419ccccb0fd2a396338c0fda0a339af73bf738ad414fc520741de74517acf0dd92b4a36fd3298a47fd5371eee8f2c5a06 + languageName: node + linkType: hard + +"agent-base@npm:6, agent-base@npm:^6.0.2": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1": + version: 4.3.0 + resolution: "agentkeepalive@npm:4.3.0" + dependencies: + debug: ^4.1.0 + depd: ^2.0.0 + humanize-ms: ^1.2.1 + checksum: 982453aa44c11a06826c836025e5162c846e1200adb56f2d075400da7d32d87021b3b0a58768d949d824811f5654223d5a8a3dad120921a2439625eb847c6260 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv@npm:^6.10.0, ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 + languageName: node + linkType: hard + +"all-contributors-cli@npm:6.19.0": + version: 6.19.0 + resolution: "all-contributors-cli@npm:6.19.0" + dependencies: + "@babel/runtime": ^7.7.6 + async: ^3.0.1 + chalk: ^4.0.0 + didyoumean: ^1.2.1 + inquirer: ^7.0.4 + json-fixer: ^1.5.1 + lodash: ^4.11.2 + node-fetch: ^2.6.0 + pify: ^5.0.0 + yargs: ^15.0.1 + bin: + all-contributors: dist/cli.js + checksum: 42e0d00ec0a9c141247e48a017b04ee8fff8edb6e36ee728de1992bd0ca0a05f018d17b95a98e5952c670fe640d12f39629ba51abe3008b67ae288d9cd164861 + languageName: node + linkType: hard + +"ansi-colors@npm:^4.1.1": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: ^0.21.3 + checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.0.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"any-promise@npm:^1.0.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de + languageName: node + linkType: hard + +"anymatch@npm:^3.0.3, anymatch@npm:^3.1.1, anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0, aproba@npm:^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^3.0.0": + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" + dependencies: + delegates: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^4.0.0": + version: 4.0.0 + resolution: "are-we-there-yet@npm:4.0.0" + dependencies: + delegates: ^1.0.0 + readable-stream: ^4.1.0 + checksum: 35d6a65ce9a0c53d8d8eeef8805528c483c5c3512f2050b32c07e61becc440c4ec8178d6ee6cedc1e5a81b819eb55d9c0a9fc7d9f862cae4c7dc30ec393f0a58 + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: ~1.0.2 + checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + +"array-back@npm:^3.0.1, array-back@npm:^3.1.0": + version: 3.1.0 + resolution: "array-back@npm:3.1.0" + checksum: 7205004fcd0f9edd926db921af901b083094608d5b265738d0290092f9822f73accb468e677db74c7c94ef432d39e5ed75a7b1786701e182efb25bbba9734209 + languageName: node + linkType: hard + +"array-back@npm:^4.0.1, array-back@npm:^4.0.2": + version: 4.0.2 + resolution: "array-back@npm:4.0.2" + checksum: f30603270771eeb54e5aad5f54604c62b3577a18b6db212a7272b2b6c32049121b49431f656654790ed1469411e45f387e7627c0de8fd0515995cc40df9b9294 + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "array-buffer-byte-length@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + is-array-buffer: ^3.0.1 + checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 + languageName: node + linkType: hard + +"array-differ@npm:^3.0.0": + version: 3.0.0 + resolution: "array-differ@npm:3.0.0" + checksum: 117edd9df5c1530bd116c6e8eea891d4bd02850fd89b1b36e532b6540e47ca620a373b81feca1c62d1395d9ae601516ba538abe5e8172d41091da2c546b05fb7 + languageName: node + linkType: hard + +"array-ify@npm:^1.0.0": + version: 1.0.0 + resolution: "array-ify@npm:1.0.0" + checksum: c0502015b319c93dd4484f18036bcc4b654eb76a4aa1f04afbcef11ac918859bb1f5d71ba1f0f1141770db9eef1a4f40f1761753650873068010bbf7bcdae4a4 + languageName: node + linkType: hard + +"array-includes@npm:^3.1.6": + version: 3.1.6 + resolution: "array-includes@npm:3.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + get-intrinsic: ^1.1.3 + is-string: ^1.0.7 + checksum: f22f8cd8ba8a6448d91eebdc69f04e4e55085d09232b5216ee2d476dab3ef59984e8d1889e662c6a0ed939dcb1b57fd05b2c0209c3370942fc41b752c82a2ca5 + languageName: node + linkType: hard + +"array-union@npm:^1.0.1": + version: 1.0.2 + resolution: "array-union@npm:1.0.2" + dependencies: + array-uniq: ^1.0.1 + checksum: 82cec6421b6e6766556c484835a6d476a873f1b71cace5ab2b4f1b15b1e3162dc4da0d16f7a2b04d4aec18146c6638fe8f661340b31ba8e469fd811a1b45dc8d + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + languageName: node + linkType: hard + +"array-uniq@npm:^1.0.1": + version: 1.0.3 + resolution: "array-uniq@npm:1.0.3" + checksum: 1625f06b093d8bf279b81adfec6e72951c0857d65b5e3f65f053fffe9f9dd61c2fc52cff57e38a4700817e7e3f01a4faa433d505ea9e33cdae4514c334e0bf9e + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.3.1": + version: 1.3.1 + resolution: "array.prototype.flat@npm:1.3.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + es-shim-unscopables: ^1.0.0 + checksum: 5a8415949df79bf6e01afd7e8839bbde5a3581300e8ad5d8449dea52639e9e59b26a467665622783697917b43bf39940a6e621877c7dd9b3d1c1f97484b9b88b + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.2.2, array.prototype.flatmap@npm:^1.3.1": + version: 1.3.1 + resolution: "array.prototype.flatmap@npm:1.3.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + es-shim-unscopables: ^1.0.0 + checksum: 8c1c43a4995f12cf12523436da28515184c753807b3f0bc2ca6c075f71c470b099e2090cc67dba8e5280958fea401c1d0c59e1db0143272aef6cd1103921a987 + languageName: node + linkType: hard + +"arrify@npm:^1.0.1": + version: 1.0.1 + resolution: "arrify@npm:1.0.1" + checksum: 745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 + languageName: node + linkType: hard + +"arrify@npm:^2.0.1": + version: 2.0.1 + resolution: "arrify@npm:2.0.1" + checksum: 067c4c1afd182806a82e4c1cb8acee16ab8b5284fbca1ce29408e6e91281c36bb5b612f6ddfbd40a0f7a7e0c75bf2696eb94c027f6e328d6e9c52465c98e4209 + languageName: node + linkType: hard + +"astral-regex@npm:^2.0.0": + version: 2.0.0 + resolution: "astral-regex@npm:2.0.0" + checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766 + languageName: node + linkType: hard + +"async@npm:^3.0.1, async@npm:^3.2.3": + version: 3.2.4 + resolution: "async@npm:3.2.4" + checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e + languageName: node + linkType: hard + +"author-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "author-regex@npm:1.0.0" + checksum: 9ad8bffb02978c7a53cbe0b0ff55988fa9f4429797b2c3783f0964df6ee198663285d7f0f3f981766a8c4fe91633ba62582244c1b54d50096007a0fe115b6898 + languageName: node + linkType: hard + +"auto@npm:^10.46.0": + version: 10.46.0 + resolution: "auto@npm:10.46.0" + dependencies: + "@auto-it/core": 10.46.0 + "@auto-it/npm": 10.46.0 + "@auto-it/released": 10.46.0 + "@auto-it/version-file": 10.46.0 + await-to-js: ^3.0.0 + chalk: ^4.0.0 + command-line-application: ^0.10.1 + endent: ^2.1.0 + module-alias: ^2.2.2 + signale: ^1.4.0 + terminal-link: ^2.1.1 + tslib: 2.1.0 + bin: + auto: dist/bin/auto.js + checksum: e2dd27d80134bd054a33ed9ff036f6138dc49583626cc2872cc240bb0d48f82e987fcbe3fdab4935ca9bf602adbf25b9a901a931e6b86dc6d5d6c012a2d477f0 + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.5": + version: 1.0.5 + resolution: "available-typed-arrays@npm:1.0.5" + checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a + languageName: node + linkType: hard + +"await-to-js@npm:^3.0.0": + version: 3.0.0 + resolution: "await-to-js@npm:3.0.0" + checksum: b6e9dcf9f0990312d2ae28fcfa0a2c2d1ba48baaa161591fba61d3accf97072ce8a7187ee4e889f3148e1707a7ed1d174b9dd04ce4f79f02d7f8c9e017e90f8e + languageName: node + linkType: hard + +"axios@npm:^1.0.0": + version: 1.3.4 + resolution: "axios@npm:1.3.4" + dependencies: + follow-redirects: ^1.15.0 + form-data: ^4.0.0 + proxy-from-env: ^1.1.0 + checksum: 7440edefcf8498bc3cdf39de00443e8101f249972c83b739c6e880d9d669fea9486372dbe8739e88b3bf8bb1ad15f6106693f206f078f4516fe8fd47b1c3093c + languageName: node + linkType: hard + +"babel-jest@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-jest@npm:29.5.0" + dependencies: + "@jest/transform": ^29.5.0 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^29.5.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: eafb6d37deb71f0c80bf3c80215aa46732153e5e8bcd73f6ff47d92e5c0c98c8f7f75995d0efec6289c371edad3693cd8fa2367b0661c4deb71a3a7117267ede + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + 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 + checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-plugin-jest-hoist@npm:29.5.0" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: 099b5254073b6bc985b6d2d045ad26fb8ed30ff8ae6404c4fe8ee7cd0e98a820f69e3dfb871c7c65aae0f4b65af77046244c07bb92d49ef9005c90eedf681539 + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.0.0": + version: 1.0.1 + resolution: "babel-preset-current-node-syntax@npm:1.0.1" + 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 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 + languageName: node + linkType: hard + +"babel-preset-jest@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-preset-jest@npm:29.5.0" + dependencies: + babel-plugin-jest-hoist: ^29.5.0 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 5566ca2762766c9319b4973d018d2fa08c0fcf6415c72cc54f4c8e7199e851ea8f5e6c6730f03ed7ed44fc8beefa959dd15911f2647dee47c615ff4faeddb1ad + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"before-after-hook@npm:^2.2.0": + version: 2.2.3 + resolution: "before-after-hook@npm:2.2.3" + checksum: a1a2430976d9bdab4cd89cb50d27fa86b19e2b41812bf1315923b0cba03371ebca99449809226425dd3bcef20e010db61abdaff549278e111d6480034bebae87 + languageName: node + linkType: hard + +"bin-links@npm:^4.0.1": + version: 4.0.1 + resolution: "bin-links@npm:4.0.1" + dependencies: + cmd-shim: ^6.0.0 + npm-normalize-package-bin: ^3.0.0 + read-cmd-shim: ^4.0.0 + write-file-atomic: ^5.0.0 + checksum: a806561750039bcd7d4234efe5c0b8b7ba0ea8495086740b0da6395abe311e2cdb75f8324787354193f652d2ac5ab038c4ca926ed7bcc6ce9bc2001607741104 + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 + languageName: node + linkType: hard + +"bl@npm:^4.0.3, bl@npm:^4.1.0": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: ^5.5.0 + inherits: ^2.0.4 + readable-stream: ^3.4.0 + checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 + languageName: node + linkType: hard + +"bottleneck@npm:^2.15.3": + version: 2.19.5 + resolution: "bottleneck@npm:2.19.5" + checksum: c5eef1bbea12cef1f1405e7306e7d24860568b0f7ac5eeab706a86762b3fc65ef6d1c641c8a166e4db90f412fc5c948fc5ce8008a8cd3d28c7212ef9c3482bda + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.2, braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + languageName: node + linkType: hard + +"browserslist@npm:^4.21.3": + version: 4.21.5 + resolution: "browserslist@npm:4.21.5" + dependencies: + caniuse-lite: ^1.0.30001449 + electron-to-chromium: ^1.4.284 + node-releases: ^2.0.8 + update-browserslist-db: ^1.0.10 + bin: + browserslist: cli.js + checksum: 9755986b22e73a6a1497fd8797aedd88e04270be33ce66ed5d85a1c8a798292a65e222b0f251bafa1c2522261e237d73b08b58689d4920a607e5a53d56dc4706 + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: ^0.4.0 + checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb + languageName: node + linkType: hard + +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.1.13 + checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 + languageName: node + linkType: hard + +"buffer@npm:^6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.2.1 + checksum: 5ad23293d9a731e4318e420025800b42bf0d264004c0286c8cc010af7a270c7a0f6522e84f54b9ad65cbd6db20b8badbfd8d2ebf4f80fa03dab093b89e68c3f9 + languageName: node + linkType: hard + +"builtins@npm:^1.0.3": + version: 1.0.3 + resolution: "builtins@npm:1.0.3" + checksum: 47ce94f7eee0e644969da1f1a28e5f29bd2e48b25b2bbb61164c345881086e29464ccb1fb88dbc155ea26e8b1f5fc8a923b26c8c1ed0935b67b644d410674513 + languageName: node + linkType: hard + +"builtins@npm:^5.0.0": + version: 5.0.1 + resolution: "builtins@npm:5.0.1" + dependencies: + semver: ^7.0.0 + checksum: 66d204657fe36522822a95b288943ad11b58f5eaede235b11d8c4edaa28ce4800087d44a2681524c340494aadb120a0068011acabe99d30e8f11a7d826d83515 + languageName: node + linkType: hard + +"bundle-require@npm:^4.0.0": + version: 4.0.1 + resolution: "bundle-require@npm:4.0.1" + dependencies: + load-tsconfig: ^0.2.3 + peerDependencies: + esbuild: ">=0.17" + checksum: 737217e37b72d7bee431b5d839b86ba604430f3ec346f073071de2ce65f0915189d4394ddd4685e0366b2930f38c95742b58c7101b8c53d9a8381d453f0b3b8a + languageName: node + linkType: hard + +"byte-size@npm:7.0.0": + version: 7.0.0 + resolution: "byte-size@npm:7.0.0" + checksum: 6cdd45fb64ac3f80d5cbbc01df7974a4613b3e64bd792b6b8211c8669ca3d1f7efd9379ba24cebfc371ce3e890817dcdaf0bd7ed99571fe2de4b946e6c31a138 + languageName: node + linkType: hard + +"cac@npm:^6.7.12": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a + languageName: node + linkType: hard + +"cacache@npm:^16.0.0, cacache@npm:^16.1.0": + version: 16.1.3 + resolution: "cacache@npm:16.1.3" + 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 + checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 + languageName: node + linkType: hard + +"cacache@npm:^17.0.0, cacache@npm:^17.0.4": + version: 17.0.5 + resolution: "cacache@npm:17.0.5" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^9.3.1 + lru-cache: ^7.7.1 + minipass: ^4.0.0 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + promise-inflight: ^1.0.1 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: 83312d74acf4d17e378fc1f09ace1dedcb0a1b1033a0e9e22246052b8715cda7bdc8b7ab6dcadd3cb3f2965266def476835488cad5aea810159d452749757fbd + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind@npm:1.0.2" + dependencies: + function-bind: ^1.1.1 + get-intrinsic: ^1.0.2 + checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + languageName: node + linkType: hard + +"camelcase-keys@npm:^6.2.2": + version: 6.2.2 + resolution: "camelcase-keys@npm:6.2.2" + dependencies: + camelcase: ^5.3.1 + map-obj: ^4.0.0 + quick-lru: ^4.0.1 + checksum: 43c9af1adf840471e54c68ab3e5fe8a62719a6b7dbf4e2e86886b7b0ff96112c945736342b837bd2529ec9d1c7d1934e5653318478d98e0cf22c475c04658e2a + languageName: node + linkType: hard + +"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b + languageName: node + linkType: hard + +"camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001449": + version: 1.0.30001469 + resolution: "caniuse-lite@npm:1.0.30001469" + checksum: 8e496509d7e9ff189c72205675b5db0c5f1b6a09917027441e835efae0848a468a8c4e7d2b409ffc202438fcd23ae53e017f976a03c22c04d12d3c0e1e33e5de + languageName: node + linkType: hard + +"chalk@npm:4.1.0": + version: 4.1.0 + resolution: "chalk@npm:4.1.0" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: 5561c7b4c063badee3e16d04bce50bd033e1be1bf4c6948639275683ffa7a1993c44639b43c22b1c505f0f813a24b1889037eb182546b48946f9fe7cdd0e7d13 + languageName: node + linkType: hard + +"chalk@npm:4.1.2, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"chalk@npm:5.2.0": + version: 5.2.0 + resolution: "chalk@npm:5.2.0" + checksum: 03d8060277de6cf2fd567dc25fcf770593eb5bb85f460ce443e49255a30ff1242edd0c90a06a03803b0466ff0687a939b41db1757bec987113e83de89a003caa + languageName: node + linkType: hard + +"chalk@npm:^2.0.0, chalk@npm:^2.3.2, chalk@npm:^2.4.1, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 + languageName: node + linkType: hard + +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 6fd5da1f5d18ff5712c1e0aed41da200d7c51c28f11b36ee3c7b483f3696dabc08927fc6b227735eb8f0e1215c9a8abd8154637f3eff8cada5959df7f58b024d + languageName: node + linkType: hard + +"chokidar@npm:^3.5.1": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.2 + glob-parent: ~5.1.2 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.6.0 + dependenciesMeta: + fsevents: + optional: true + checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"ci-info@npm:^2.0.0": + version: 2.0.0 + resolution: "ci-info@npm:2.0.0" + checksum: 3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0": + version: 3.8.0 + resolution: "ci-info@npm:3.8.0" + checksum: d0a4d3160497cae54294974a7246202244fff031b0a6ea20dd57b10ec510aa17399c41a1b0982142c105f3255aff2173e5c0dd7302ee1b2f28ba3debda375098 + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^1.0.0": + version: 1.2.2 + resolution: "cjs-module-lexer@npm:1.2.2" + checksum: 977f3f042bd4f08e368c890d91eecfbc4f91da0bc009a3c557bc4dfbf32022ad1141244ac1178d44de70fc9f3dea7add7cd9a658a34b9fae98a55d8f92331ce5 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cli-cursor@npm:3.1.0, cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: ^3.1.0 + checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 + languageName: node + linkType: hard + +"cli-spinners@npm:2.6.1": + version: 2.6.1 + resolution: "cli-spinners@npm:2.6.1" + checksum: 423409baaa7a58e5104b46ca1745fbfc5888bbd0b0c5a626e052ae1387060839c8efd512fb127e25769b3dc9562db1dc1b5add6e0b93b7ef64f477feb6416a45 + languageName: node + linkType: hard + +"cli-spinners@npm:^2.5.0": + version: 2.7.0 + resolution: "cli-spinners@npm:2.7.0" + checksum: a9afaf73f58d1f951fb23742f503631b3cf513f43f4c7acb1b640100eb76bfa16efbcd1994d149ffc6603a6d75dd3d4a516a76f125f90dce437de9b16fd0ee6f + languageName: node + linkType: hard + +"cli-truncate@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-truncate@npm:2.1.0" + dependencies: + slice-ansi: ^3.0.0 + string-width: ^4.2.0 + checksum: bf1e4e6195392dc718bf9cd71f317b6300dc4a9191d052f31046b8773230ece4fa09458813bf0e3455a5e68c0690d2ea2c197d14a8b85a7b5e01c97f4b5feb5d + languageName: node + linkType: hard + +"cli-truncate@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-truncate@npm:3.1.0" + dependencies: + slice-ansi: ^5.0.0 + string-width: ^5.0.0 + checksum: c3243e41974445691c63f8b405df1d5a24049dc33d324fe448dc572e561a7b772ae982692900b1a5960901cc4fc7def25a629b9c69a4208ee89d12ab3332617a + languageName: node + linkType: hard + +"cli-width@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-width@npm:3.0.0" + checksum: 4c94af3769367a70e11ed69aa6095f1c600c0ff510f3921ab4045af961820d57c0233acfa8b6396037391f31b4c397e1f614d234294f979ff61430a6c166c3f6 + languageName: node + linkType: hard + +"cliui@npm:^6.0.0": + version: 6.0.0 + resolution: "cliui@npm:6.0.0" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^6.2.0 + checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42 + languageName: node + linkType: hard + +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^7.0.0 + checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 + languageName: node + linkType: hard + +"clone-deep@npm:4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: ^2.0.4 + kind-of: ^6.0.2 + shallow-clone: ^3.0.0 + checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd + languageName: node + linkType: hard + +"cmd-shim@npm:5.0.0": + version: 5.0.0 + resolution: "cmd-shim@npm:5.0.0" + dependencies: + mkdirp-infer-owner: ^2.0.0 + checksum: 83d2a46cdf4adbb38d3d3184364b2df0e4c001ac770f5ca94373825d7a48838b4cb8a59534ef48f02b0d556caa047728589ca65c640c17c0b417b3afb34acfbb + languageName: node + linkType: hard + +"cmd-shim@npm:^6.0.0": + version: 6.0.1 + resolution: "cmd-shim@npm:6.0.1" + checksum: 359006b3a5bb4a0ff161a44ccc18fbba947db748ef0dd12273e476792e316a5edb0945d74bfa1e91cd88ce0511025fde87901eda092c479d83cfcd6734562683 + languageName: node + linkType: hard + +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 + languageName: node + linkType: hard + +"collect-v8-coverage@npm:^1.0.0": + version: 1.0.1 + resolution: "collect-v8-coverage@npm:1.0.1" + checksum: 4efe0a1fccd517b65478a2364b33dadd0a43fc92a56f59aaece9b6186fe5177b2de471253587de7c91516f07c7268c2f6770b6cbcffc0e0ece353b766ec87e55 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b + languageName: node + linkType: hard + +"colorette@npm:^2.0.19": + version: 2.0.19 + resolution: "colorette@npm:2.0.19" + checksum: 888cf5493f781e5fcf54ce4d49e9d7d698f96ea2b2ef67906834bb319a392c667f9ec69f4a10e268d2946d13a9503d2d19b3abaaaf174e3451bfe91fb9d82427 + languageName: node + linkType: hard + +"columnify@npm:1.6.0": + version: 1.6.0 + resolution: "columnify@npm:1.6.0" + dependencies: + strip-ansi: ^6.0.1 + wcwidth: ^1.0.0 + checksum: 0d590023616a27bcd2135c0f6ddd6fac94543263f9995538bbe391068976e30545e5534d369737ec7c3e9db4e53e70a277462de46aeb5a36e6997b4c7559c335 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"command-line-application@npm:^0.10.1": + version: 0.10.1 + resolution: "command-line-application@npm:0.10.1" + dependencies: + "@types/command-line-args": ^5.0.0 + "@types/command-line-usage": ^5.0.1 + chalk: ^2.4.1 + command-line-args: ^5.1.1 + command-line-usage: ^6.0.0 + meant: ^1.0.1 + remove-markdown: ^0.3.0 + tslib: 1.10.0 + checksum: d8a17064eaeef076e6d7e665df4392b2119653fc3097b01bf55bc80fc5141f42e3c8d22224bcecc4a680f105878c451a9486188b119d7054f8e73aa7a2a2e738 + languageName: node + linkType: hard + +"command-line-args@npm:^5.1.1": + version: 5.2.1 + resolution: "command-line-args@npm:5.2.1" + dependencies: + array-back: ^3.1.0 + find-replace: ^3.0.0 + lodash.camelcase: ^4.3.0 + typical: ^4.0.0 + checksum: e759519087be3cf2e86af8b9a97d3058b4910cd11ee852495be881a067b72891f6a32718fb685ee6d41531ab76b2b7bfb6602f79f882cd4b7587ff1e827982c7 + languageName: node + linkType: hard + +"command-line-usage@npm:^6.0.0": + version: 6.1.3 + resolution: "command-line-usage@npm:6.1.3" + dependencies: + array-back: ^4.0.2 + chalk: ^2.4.2 + table-layout: ^1.0.2 + typical: ^5.2.0 + checksum: 8261d4e5536eb0bcddee0ec5e89c05bb2abd18e5760785c8078ede5020bc1c612cbe28eb6586f5ed4a3660689748e5aaad4a72f21566f4ef39393694e2fa1a0b + languageName: node + linkType: hard + +"commander@npm:^10.0.0": + version: 10.0.0 + resolution: "commander@npm:10.0.0" + checksum: 9f6495651f878213005ac744dd87a85fa3d9f2b8b90d1c19d0866d666bda7f735adfd7c2f10dfff345782e2f80ea258f98bb4efcef58e4e502f25f883940acfd + languageName: node + linkType: hard + +"commander@npm:^4.0.0": + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977 + languageName: node + linkType: hard + +"common-ancestor-path@npm:^1.0.1": + version: 1.0.1 + resolution: "common-ancestor-path@npm:1.0.1" + checksum: 1d2e4186067083d8cc413f00fc2908225f04ae4e19417ded67faa6494fb313c4fcd5b28a52326d1a62b466e2b3a4325e92c31133c5fee628cdf8856b3a57c3d7 + languageName: node + linkType: hard + +"compare-func@npm:^2.0.0": + version: 2.0.0 + resolution: "compare-func@npm:2.0.0" + dependencies: + array-ify: ^1.0.0 + dot-prop: ^5.1.0 + checksum: fb71d70632baa1e93283cf9d80f30ac97f003aabee026e0b4426c9716678079ef5fea7519b84d012cbed938c476493866a38a79760564a9e21ae9433e40e6f0d + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"concat-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "concat-stream@npm:2.0.0" + dependencies: + buffer-from: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^3.0.2 + typedarray: ^0.0.6 + checksum: d7f75d48f0ecd356c1545d87e22f57b488172811b1181d96021c7c4b14ab8855f5313280263dca44bb06e5222f274d047da3e290a38841ef87b59719bde967c7 + languageName: node + linkType: hard + +"config-chain@npm:1.1.12": + version: 1.1.12 + resolution: "config-chain@npm:1.1.12" + dependencies: + ini: ^1.3.4 + proto-list: ~1.2.1 + checksum: a16332f87212b4015afcdfc95fe42b40b162e7f10b4f4370ab3239979b6e69a41b4e6fb34d7891aa028a557f2340da236f810df433b18dfa5c408b2eb8489bf7 + languageName: node + linkType: hard + +"confusing-browser-globals@npm:^1.0.10": + version: 1.0.11 + resolution: "confusing-browser-globals@npm:1.0.11" + checksum: 3afc635abd37e566477f610e7978b15753f0e84025c25d49236f1f14d480117185516bdd40d2a2167e6bed8048641a9854964b9c067e3dcdfa6b5d0ad3c3a5ef + languageName: node + linkType: hard + +"console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed + languageName: node + linkType: hard + +"conventional-changelog-angular@npm:5.0.12": + version: 5.0.12 + resolution: "conventional-changelog-angular@npm:5.0.12" + dependencies: + compare-func: ^2.0.0 + q: ^1.5.1 + checksum: 552db8762d210a5172b1ad8cd95312e2e2a0483ba43f8d30b075a56ccf05231fdca1d4d5843028d43bec6bc7f903f480005efc5386587321a15a1fc4d2b73016 + languageName: node + linkType: hard + +"conventional-changelog-core@npm:4.2.4": + version: 4.2.4 + resolution: "conventional-changelog-core@npm:4.2.4" + dependencies: + add-stream: ^1.0.0 + conventional-changelog-writer: ^5.0.0 + conventional-commits-parser: ^3.2.0 + dateformat: ^3.0.0 + get-pkg-repo: ^4.0.0 + git-raw-commits: ^2.0.8 + git-remote-origin-url: ^2.0.0 + git-semver-tags: ^4.1.1 + lodash: ^4.17.15 + normalize-package-data: ^3.0.0 + q: ^1.5.1 + read-pkg: ^3.0.0 + read-pkg-up: ^3.0.0 + through2: ^4.0.0 + checksum: 56d5194040495ea316e53fd64cb3614462c318f0fe54b1bf25aba6fba9b3d51cb9fdf7ac5b766f17e5529a3f90e317257394e00b0a9a5ce42caf3a59f82afb3a + languageName: node + linkType: hard + +"conventional-changelog-preset-loader@npm:^2.3.4": + version: 2.3.4 + resolution: "conventional-changelog-preset-loader@npm:2.3.4" + checksum: 23a889b7fcf6fe7653e61f32a048877b2f954dcc1e0daa2848c5422eb908e6f24c78372f8d0d2130b5ed941c02e7010c599dccf44b8552602c6c8db9cb227453 + languageName: node + linkType: hard + +"conventional-changelog-writer@npm:^5.0.0": + version: 5.0.1 + resolution: "conventional-changelog-writer@npm:5.0.1" + dependencies: + conventional-commits-filter: ^2.0.7 + dateformat: ^3.0.0 + handlebars: ^4.7.7 + json-stringify-safe: ^5.0.1 + lodash: ^4.17.15 + meow: ^8.0.0 + semver: ^6.0.0 + split: ^1.0.0 + through2: ^4.0.0 + bin: + conventional-changelog-writer: cli.js + checksum: 5c0129db44577f14b1f8de225b62a392a9927ba7fe3422cb21ad71a771b8472bd03badb7c87cb47419913abc3f2ce3759b69f59550cdc6f7a7b0459015b3b44c + languageName: node + linkType: hard + +"conventional-commits-filter@npm:^2.0.7": + version: 2.0.7 + resolution: "conventional-commits-filter@npm:2.0.7" + dependencies: + lodash.ismatch: ^4.4.0 + modify-values: ^1.0.0 + checksum: feb567f680a6da1baaa1ef3cff393b3c56a5828f77ab9df5e70626475425d109a6fee0289b4979223c62bbd63bf9c98ef532baa6fcb1b66ee8b5f49077f5d46c + languageName: node + linkType: hard + +"conventional-commits-parser@npm:^3.2.0": + version: 3.2.4 + resolution: "conventional-commits-parser@npm:3.2.4" + dependencies: + JSONStream: ^1.0.4 + is-text-path: ^1.0.1 + lodash: ^4.17.15 + meow: ^8.0.0 + split2: ^3.0.0 + through2: ^4.0.0 + bin: + conventional-commits-parser: cli.js + checksum: 1627ff203bc9586d89e47a7fe63acecf339aba74903b9114e23d28094f79d4e2d6389bf146ae561461dcba8fc42e7bc228165d2b173f15756c43f1d32bc50bfd + languageName: node + linkType: hard + +"conventional-recommended-bump@npm:6.1.0": + version: 6.1.0 + resolution: "conventional-recommended-bump@npm:6.1.0" + dependencies: + concat-stream: ^2.0.0 + conventional-changelog-preset-loader: ^2.3.4 + conventional-commits-filter: ^2.0.7 + conventional-commits-parser: ^3.2.0 + git-raw-commits: ^2.0.8 + git-semver-tags: ^4.1.1 + meow: ^8.0.0 + q: ^1.5.1 + bin: + conventional-recommended-bump: cli.js + checksum: da1d7a5f3b9f7706bede685cdcb3db67997fdaa43c310fd5bf340955c84a4b85dbb9427031522ee06dad290b730a54be987b08629d79c73720dbad3a2531146b + languageName: node + linkType: hard + +"convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + +"cosmiconfig@npm:7.0.0": + version: 7.0.0 + resolution: "cosmiconfig@npm:7.0.0" + dependencies: + "@types/parse-json": ^4.0.0 + import-fresh: ^3.2.1 + parse-json: ^5.0.0 + path-type: ^4.0.0 + yaml: ^1.10.0 + checksum: 6801feaa0249e9b9fdde5b3d70dc33b4f9c69095bec94d67e3fe08b66eac24dc7e2099f053597cfbc94b743de269aa5d2cfa7da3fde765433423b06bd122941a + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"crypto-random-string@npm:^2.0.0": + version: 2.0.0 + resolution: "crypto-random-string@npm:2.0.0" + checksum: 0283879f55e7c16fdceacc181f87a0a65c53bc16ffe1d58b9d19a6277adcd71900d02bb2c4843dd55e78c51e30e89b0fec618a7f170ebcc95b33182c28f05fd6 + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2 + languageName: node + linkType: hard + +"dargs@npm:^7.0.0": + version: 7.0.0 + resolution: "dargs@npm:7.0.0" + checksum: b8f1e3cba59c42e1f13a114ad4848c3fc1cf7470f633ee9e9f1043762429bc97d91ae31b826fb135eefde203a3fdb20deb0c0a0222ac29d937b8046085d668d1 + languageName: node + linkType: hard + +"dateformat@npm:^3.0.0": + version: 3.0.3 + resolution: "dateformat@npm:3.0.3" + checksum: ca4911148abb09887bd9bdcd632c399b06f3ecad709a18eb594d289a1031982f441e08e281db77ffebcb2cbcbfa1ac578a7cbfbf8743f41009aa5adc1846ed34 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: ^2.1.1 + checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c + languageName: node + linkType: hard + +"decamelize-keys@npm:^1.1.0": + version: 1.1.1 + resolution: "decamelize-keys@npm:1.1.1" + dependencies: + decamelize: ^1.1.0 + map-obj: ^1.0.0 + checksum: fc645fe20b7bda2680bbf9481a3477257a7f9304b1691036092b97ab04c0ab53e3bf9fcc2d2ae382536568e402ec41fb11e1d4c3836a9abe2d813dd9ef4311e0 + languageName: node + linkType: hard + +"decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa + languageName: node + linkType: hard + +"dedent@npm:0.7.0, dedent@npm:^0.7.0": + version: 0.7.0 + resolution: "dedent@npm:0.7.0" + checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0, deep-extend@npm:~0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 + languageName: node + linkType: hard + +"deepmerge@npm:^4.0.0, deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: ^1.0.2 + checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a + languageName: node + linkType: hard + +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2 + languageName: node + linkType: hard + +"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4": + version: 1.2.0 + resolution: "define-properties@npm:1.2.0" + dependencies: + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: e60aee6a19b102df4e2b1f301816804e81ab48bb91f00d0d935f269bf4b3f79c88b39e4f89eaa132890d23267335fd1140dfcd8d5ccd61031a0a2c41a54e33a6 + languageName: node + linkType: hard + +"del@npm:^6.0.0": + version: 6.1.1 + resolution: "del@npm:6.1.1" + dependencies: + globby: ^11.0.1 + graceful-fs: ^4.2.4 + is-glob: ^4.0.1 + is-path-cwd: ^2.2.0 + is-path-inside: ^3.0.2 + p-map: ^4.0.0 + rimraf: ^3.0.2 + slash: ^3.0.0 + checksum: 563288b73b8b19a7261c47fd21a330eeab6e2acd7c6208c49790dfd369127120dd7836cdf0c1eca216b77c94782a81507eac6b4734252d3bef2795cb366996b6 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd + languageName: node + linkType: hard + +"depd@npm:^2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a + languageName: node + linkType: hard + +"deprecation@npm:^2.0.0, deprecation@npm:^2.3.1": + version: 2.3.1 + resolution: "deprecation@npm:2.3.1" + checksum: f56a05e182c2c195071385455956b0c4106fe14e36245b00c689ceef8e8ab639235176a96977ba7c74afb173317fac2e0ec6ec7a1c6d1e6eaa401c586c714132 + languageName: node + linkType: hard + +"detect-indent@npm:^5.0.0": + version: 5.0.0 + resolution: "detect-indent@npm:5.0.0" + checksum: 61763211daa498e00eec073aba95d544ae5baed19286a0a655697fa4fffc9f4539c8376e2c7df8fa11d6f8eaa16c1e6a689f403ac41ee78a060278cdadefe2ff + languageName: node + linkType: hard + +"detect-newline@npm:^3.0.0": + version: 3.1.0 + resolution: "detect-newline@npm:3.1.0" + checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 + languageName: node + linkType: hard + +"didyoumean@npm:^1.2.1": + version: 1.2.2 + resolution: "didyoumean@npm:1.2.2" + checksum: d5d98719d58b3c2fa59663c4c42ba9716f1fd01245c31d5fce31915bd3aa26e6aac149788e007358f778ebbd68a2256eb5973e8ca6f221df221ba060115acf2e + languageName: node + linkType: hard + +"diff-sequences@npm:^29.4.3": + version: 29.4.3 + resolution: "diff-sequences@npm:29.4.3" + checksum: 28b265e04fdddcf7f9f814effe102cc95a9dec0564a579b5aed140edb24fc345c611ca52d76d725a3cab55d3888b915b5e8a4702e0f6058968a90fa5f41fcde7 + languageName: node + linkType: hard + +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d + languageName: node + linkType: hard + +"dir-glob@npm:^2.0.0": + version: 2.2.2 + resolution: "dir-glob@npm:2.2.2" + dependencies: + path-type: ^3.0.0 + checksum: 3aa48714a9f7845ffc30ab03a5c674fe760477cc55e67b0847333371549227d93953e6627ec160f75140c5bea5c5f88d13c01de79bd1997a588efbcf06980842 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: ^4.0.0 + checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: ^2.0.2 + checksum: a45e277f7feaed309fe658ace1ff286c6e2002ac515af0aaf37145b8baa96e49899638c7cd47dccf84c3d32abfc113246625b3ac8f552d1046072adee13b0dc8 + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: ^2.0.2 + checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce + languageName: node + linkType: hard + +"dot-prop@npm:6.0.1": + version: 6.0.1 + resolution: "dot-prop@npm:6.0.1" + dependencies: + is-obj: ^2.0.0 + checksum: 0f47600a4b93e1dc37261da4e6909652c008832a5d3684b5bf9a9a0d3f4c67ea949a86dceed9b72f5733ed8e8e6383cc5958df3bbd0799ee317fd181f2ece700 + languageName: node + linkType: hard + +"dot-prop@npm:^5.1.0": + version: 5.3.0 + resolution: "dot-prop@npm:5.3.0" + dependencies: + is-obj: ^2.0.0 + checksum: d5775790093c234ef4bfd5fbe40884ff7e6c87573e5339432870616331189f7f5d86575c5b5af2dcf0f61172990f4f734d07844b1f23482fff09e3c4bead05ea + languageName: node + linkType: hard + +"dotenv@npm:^8.0.0": + version: 8.6.0 + resolution: "dotenv@npm:8.6.0" + checksum: 38e902c80b0666ab59e9310a3d24ed237029a7ce34d976796349765ac96b8d769f6df19090f1f471b77a25ca391971efde8a1ea63bb83111bd8bec8e5cc9b2cd + languageName: node + linkType: hard + +"dotenv@npm:~10.0.0": + version: 10.0.0 + resolution: "dotenv@npm:10.0.0" + checksum: f412c5fe8c24fbe313d302d2500e247ba8a1946492db405a4de4d30dd0eb186a88a43f13c958c5a7de303938949c4231c56994f97d05c4bc1f22478d631b4005 + languageName: node + linkType: hard + +"duplexer@npm:^0.1.1": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"ejs@npm:^3.1.7": + version: 3.1.9 + resolution: "ejs@npm:3.1.9" + dependencies: + jake: ^10.8.5 + bin: + ejs: bin/cli.js + checksum: af6f10eb815885ff8a8cfacc42c6b6cf87daf97a4884f87a30e0c3271fedd85d76a3a297d9c33a70e735b97ee632887f85e32854b9cdd3a2d97edf931519a35f + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.284": + version: 1.4.335 + resolution: "electron-to-chromium@npm:1.4.335" + checksum: a3c9ee2412427ed0853f065f1dde64db1b567abf53d5e50e8cfba1544af4bda970f59a4f4df3dad81078c948b3277dffb42042e6a859288246d68b58db81a555 + languageName: node + linkType: hard + +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: ^1.4.0 + checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + +"endent@npm:^2.1.0": + version: 2.1.0 + resolution: "endent@npm:2.1.0" + dependencies: + dedent: ^0.7.0 + fast-json-parse: ^1.0.3 + objectorarray: ^1.0.5 + checksum: c352831088fce745a39ddbd5f87a17e073ea6556e7e96e9010d945a3f3020f836b9a84657123fa01e897db9216f4b080d950b5ded9bf3a8227f14a34efaaaf7c + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.12.0": + version: 5.12.0 + resolution: "enhanced-resolve@npm:5.12.0" + dependencies: + graceful-fs: ^4.2.4 + tapable: ^2.2.0 + checksum: bf3f787facaf4ce3439bef59d148646344e372bef5557f0d37ea8aa02c51f50a925cd1f07b8d338f18992c29f544ec235a8c64bcdb56030196c48832a5494174 + languageName: node + linkType: hard + +"enquirer@npm:^2.3.4, enquirer@npm:~2.3.6": + version: 2.3.6 + resolution: "enquirer@npm:2.3.6" + dependencies: + ansi-colors: ^4.1.1 + checksum: 1c0911e14a6f8d26721c91e01db06092a5f7675159f0261d69c403396a385afd13dd76825e7678f66daffa930cfaa8d45f506fb35f818a2788463d022af1b884 + languageName: node + linkType: hard + +"env-ci@npm:^5.0.1": + version: 5.5.0 + resolution: "env-ci@npm:5.5.0" + dependencies: + execa: ^5.0.0 + fromentries: ^1.3.2 + java-properties: ^1.0.0 + checksum: 0984298e0eca8461f898f5ab92edb8d1d440a117aa1864ee04b8e3cb785a8f48d3a30d1ede88f9775da8e8ae38b2afdb890072d819170f085ae47507e324e915 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"envinfo@npm:^7.7.4": + version: 7.8.1 + resolution: "envinfo@npm:7.8.1" + bin: + envinfo: dist/cli.js + checksum: de736c98d6311c78523628ff127af138451b162e57af5293c1b984ca821d0aeb9c849537d2fde0434011bed33f6bca5310ca2aab8a51a3f28fc719e89045d648 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: ^0.2.1 + checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 + languageName: node + linkType: hard + +"es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4": + version: 1.21.2 + resolution: "es-abstract@npm:1.21.2" + dependencies: + array-buffer-byte-length: ^1.0.0 + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + es-set-tostringtag: ^2.0.1 + es-to-primitive: ^1.2.1 + function.prototype.name: ^1.1.5 + get-intrinsic: ^1.2.0 + get-symbol-description: ^1.0.0 + globalthis: ^1.0.3 + gopd: ^1.0.1 + has: ^1.0.3 + has-property-descriptors: ^1.0.0 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + internal-slot: ^1.0.5 + is-array-buffer: ^3.0.2 + is-callable: ^1.2.7 + is-negative-zero: ^2.0.2 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + is-string: ^1.0.7 + is-typed-array: ^1.1.10 + is-weakref: ^1.0.2 + object-inspect: ^1.12.3 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.4.3 + safe-regex-test: ^1.0.0 + string.prototype.trim: ^1.2.7 + string.prototype.trimend: ^1.0.6 + string.prototype.trimstart: ^1.0.6 + typed-array-length: ^1.0.4 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.9 + checksum: 037f55ee5e1cdf2e5edbab5524095a4f97144d95b94ea29e3611b77d852fd8c8a40e7ae7101fa6a759a9b9b1405f188c3c70928f2d3cd88d543a07fc0d5ad41a + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.1": + version: 2.0.1 + resolution: "es-set-tostringtag@npm:2.0.1" + dependencies: + get-intrinsic: ^1.1.3 + has: ^1.0.3 + has-tostringtag: ^1.0.0 + checksum: ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884 + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.0": + version: 1.0.0 + resolution: "es-shim-unscopables@npm:1.0.0" + dependencies: + has: ^1.0.3 + checksum: 83e95cadbb6ee44d3644dfad60dcad7929edbc42c85e66c3e99aefd68a3a5c5665f2686885cddb47dfeabfd77bd5ea5a7060f2092a955a729bbd8834f0d86fa1 + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" + dependencies: + is-callable: ^1.1.4 + is-date-object: ^1.0.1 + is-symbol: ^1.0.2 + checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed + languageName: node + linkType: hard + +"esbuild@npm:^0.17.6, esbuild@npm:~0.17.6": + version: 0.17.12 + resolution: "esbuild@npm:0.17.12" + dependencies: + "@esbuild/android-arm": 0.17.12 + "@esbuild/android-arm64": 0.17.12 + "@esbuild/android-x64": 0.17.12 + "@esbuild/darwin-arm64": 0.17.12 + "@esbuild/darwin-x64": 0.17.12 + "@esbuild/freebsd-arm64": 0.17.12 + "@esbuild/freebsd-x64": 0.17.12 + "@esbuild/linux-arm": 0.17.12 + "@esbuild/linux-arm64": 0.17.12 + "@esbuild/linux-ia32": 0.17.12 + "@esbuild/linux-loong64": 0.17.12 + "@esbuild/linux-mips64el": 0.17.12 + "@esbuild/linux-ppc64": 0.17.12 + "@esbuild/linux-riscv64": 0.17.12 + "@esbuild/linux-s390x": 0.17.12 + "@esbuild/linux-x64": 0.17.12 + "@esbuild/netbsd-x64": 0.17.12 + "@esbuild/openbsd-x64": 0.17.12 + "@esbuild/sunos-x64": 0.17.12 + "@esbuild/win32-arm64": 0.17.12 + "@esbuild/win32-ia32": 0.17.12 + "@esbuild/win32-x64": 0.17.12 + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: ea6d33eb1bc6c9e00dcee5e253c7e935251b4801d376661fd9f19a9dcffc27f970078a6f7116d6c78ee825ceff9b974594b0b616bd560ce4d875a951aa92977b + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"eslint-config-airbnb-base@npm:^15.0.0": + version: 15.0.0 + resolution: "eslint-config-airbnb-base@npm:15.0.0" + dependencies: + confusing-browser-globals: ^1.0.10 + object.assign: ^4.1.2 + object.entries: ^1.1.5 + semver: ^6.3.0 + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.2 + checksum: 38626bad2ce2859fccac86b30cd2b86c9b7d8d71d458331860861dc05290a5b198bded2f4fb89efcb9046ec48f8ab4c4fb00365ba8916f27b172671da28b93ea + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^8.8.0": + version: 8.8.0 + resolution: "eslint-config-prettier@npm:8.8.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 1e94c3882c4d5e41e1dcfa2c368dbccbfe3134f6ac7d40101644d3bfbe3eb2f2ffac757f3145910b5eacf20c0e85e02b91293d3126d770cbf3dc390b3564681c + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.7": + version: 0.3.7 + resolution: "eslint-import-resolver-node@npm:0.3.7" + dependencies: + debug: ^3.2.7 + is-core-module: ^2.11.0 + resolve: ^1.22.1 + checksum: 3379aacf1d2c6952c1b9666c6fa5982c3023df695430b0d391c0029f6403a7775414873d90f397e98ba6245372b6c8960e16e74d9e4a3b0c0a4582f3bdbe3d6e + languageName: node + linkType: hard + +"eslint-import-resolver-typescript@npm:^3.5.5": + version: 3.5.5 + resolution: "eslint-import-resolver-typescript@npm:3.5.5" + dependencies: + debug: ^4.3.4 + enhanced-resolve: ^5.12.0 + eslint-module-utils: ^2.7.4 + get-tsconfig: ^4.5.0 + globby: ^13.1.3 + is-core-module: ^2.11.0 + is-glob: ^4.0.3 + synckit: ^0.8.5 + peerDependencies: + eslint: "*" + eslint-plugin-import: "*" + checksum: 27e6276fdff5d377c9036362ff736ac29852106e883ff589ea9092dc57d4bc2a67a82d75134221124f05045f9a7e2114a159b2c827d1f9f64d091f7afeab0f58 + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.7.4": + version: 2.7.4 + resolution: "eslint-module-utils@npm:2.7.4" + dependencies: + debug: ^3.2.7 + peerDependenciesMeta: + eslint: + optional: true + checksum: 5da13645daff145a5c922896b258f8bba560722c3767254e458d894ff5fbb505d6dfd945bffa932a5b0ae06714da2379bd41011c4c20d2d59cc83e23895360f7 + languageName: node + linkType: hard + +"eslint-plugin-import@npm:^2.27.5": + version: 2.27.5 + resolution: "eslint-plugin-import@npm:2.27.5" + dependencies: + array-includes: ^3.1.6 + array.prototype.flat: ^1.3.1 + array.prototype.flatmap: ^1.3.1 + debug: ^3.2.7 + doctrine: ^2.1.0 + eslint-import-resolver-node: ^0.3.7 + eslint-module-utils: ^2.7.4 + has: ^1.0.3 + is-core-module: ^2.11.0 + is-glob: ^4.0.3 + minimatch: ^3.1.2 + object.values: ^1.1.6 + resolve: ^1.22.1 + semver: ^6.3.0 + tsconfig-paths: ^3.14.1 + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + checksum: f500571a380167e25d72a4d925ef9a7aae8899eada57653e5f3051ec3d3c16d08271fcefe41a30a9a2f4fefc232f066253673ee4ea77b30dba65ae173dade85d + languageName: node + linkType: hard + +"eslint-plugin-jest-extended@npm:^2.0.0": + version: 2.0.0 + resolution: "eslint-plugin-jest-extended@npm:2.0.0" + dependencies: + "@typescript-eslint/utils": ^5.10.0 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 978925d8d93c0df34e265a9b3cfd265766b5e5da0ffb6236d17771fc662ef80e140c10ea23f56232b0bebf01eada7766e1e0100693328e8fe4ad2a02dff0989c + languageName: node + linkType: hard + +"eslint-plugin-jest@npm:^27.2.1": + version: 27.2.1 + resolution: "eslint-plugin-jest@npm:27.2.1" + dependencies: + "@typescript-eslint/utils": ^5.10.0 + peerDependencies: + "@typescript-eslint/eslint-plugin": ^5.0.0 + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + "@typescript-eslint/eslint-plugin": + optional: true + jest: + optional: true + checksum: 579a4d26304cc6748b2e6dff6c965ea7a21b618d8b051eb02727d25cf5c7767f6db8ef5237531635ff77e242b983b973e7cb8c820a4d20d5bda73358c452a8ab + languageName: node + linkType: hard + +"eslint-plugin-prettier@npm:^4.2.1": + version: 4.2.1 + resolution: "eslint-plugin-prettier@npm:4.2.1" + dependencies: + prettier-linter-helpers: ^1.0.0 + peerDependencies: + eslint: ">=7.28.0" + prettier: ">=2.0.0" + peerDependenciesMeta: + eslint-config-prettier: + optional: true + checksum: b9e839d2334ad8ec7a5589c5cb0f219bded260839a857d7a486997f9870e95106aa59b8756ff3f37202085ebab658de382b0267cae44c3a7f0eb0bcc03a4f6d6 + languageName: node + linkType: hard + +"eslint-scope@npm:^5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^4.1.1 + checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.0": + version: 7.2.0 + resolution: "eslint-scope@npm:7.2.0" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: 64591a2d8b244ade9c690b59ef238a11d5c721a98bcee9e9f445454f442d03d3e04eda88e95a4daec558220a99fa384309d9faae3d459bd40e7a81b4063980ae + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0": + version: 3.3.0 + resolution: "eslint-visitor-keys@npm:3.3.0" + checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.4.0": + version: 3.4.0 + resolution: "eslint-visitor-keys@npm:3.4.0" + checksum: 33159169462d3989321a1ec1e9aaaf6a24cc403d5d347e9886d1b5bfe18ffa1be73bdc6203143a28a606b142b1af49787f33cff0d6d0813eb5f2e8d2e1a6043c + languageName: node + linkType: hard + +"eslint@npm:^8.39.0": + version: 8.39.0 + resolution: "eslint@npm:8.39.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.4.0 + "@eslint/eslintrc": ^2.0.2 + "@eslint/js": 8.39.0 + "@humanwhocodes/config-array": ^0.11.8 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + ajv: ^6.10.0 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.2.0 + eslint-visitor-keys: ^3.4.0 + espree: ^9.5.1 + esquery: ^1.4.2 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + grapheme-splitter: ^1.0.4 + ignore: ^5.2.0 + import-fresh: ^3.0.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + is-path-inside: ^3.0.3 + js-sdsl: ^4.1.4 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.1 + strip-ansi: ^6.0.1 + strip-json-comments: ^3.1.0 + text-table: ^0.2.0 + bin: + eslint: bin/eslint.js + checksum: d7a074ff326e7ea482500dc0427a7d4b0260460f0f812d19b46b1cca681806b67309f23da9d17cd3de8eb74dd3c14cb549c4d58b05b140564d14cc1a391122a0 + languageName: node + linkType: hard + +"espree@npm:^9.5.1": + version: 9.5.1 + resolution: "espree@npm:9.5.1" + dependencies: + acorn: ^8.8.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.0 + checksum: cdf6e43540433d917c4f2ee087c6e987b2063baa85a1d9cdaf51533d78275ebd5910c42154e7baf8e3e89804b386da0a2f7fad2264d8f04420e7506bf87b3b88 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 + languageName: node + linkType: hard + +"esquery@npm:^1.0.1, esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" + dependencies: + estraverse: ^5.1.0 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: ^5.2.0 + checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 + languageName: node + linkType: hard + +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 1ffe3bb22a6d51bdeb6bf6f7cf97d2ff4a74b017ad12284cc9e6a279e727dc30a5de6bb613e5596ff4dc3e517841339ad09a7eec44266eccb1aa201a30448166 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.4": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 + languageName: node + linkType: hard + +"events@npm:^3.3.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 + languageName: node + linkType: hard + +"execa@npm:5.0.0": + version: 5.0.0 + resolution: "execa@npm:5.0.0" + 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 + checksum: a044367ebdcc68ca019810cb134510fc77bbc55c799122258ee0e00e289c132941ab48c2a331a036699c42bc8d479d451ae67c105fce5ce5cc813e7dd92d642b + languageName: node + linkType: hard + +"execa@npm:^5.0.0": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + 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 + checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 + languageName: node + linkType: hard + +"execa@npm:^7.0.0": + version: 7.1.1 + resolution: "execa@npm:7.1.1" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^6.0.1 + human-signals: ^4.3.0 + is-stream: ^3.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^5.1.0 + onetime: ^6.0.0 + signal-exit: ^3.0.7 + strip-final-newline: ^3.0.0 + checksum: 21fa46fc69314ace4068cf820142bdde5b643a5d89831c2c9349479c1555bff137a291b8e749e7efca36535e4e0a8c772c11008ca2e84d2cbd6ca141a3c8f937 + languageName: node + linkType: hard + +"exit@npm:^0.1.2": + version: 0.1.2 + resolution: "exit@npm:0.1.2" + checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 + languageName: node + linkType: hard + +"expect@npm:^29.0.0, expect@npm:^29.5.0": + version: 29.5.0 + resolution: "expect@npm:29.5.0" + dependencies: + "@jest/expect-utils": ^29.5.0 + jest-get-type: ^29.4.3 + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 + checksum: 58f70b38693df6e5c6892db1bcd050f0e518d6f785175dc53917d4fa6a7359a048e5690e19ddcb96b65c4493881dd89a3dabdab1a84dfa55c10cdbdabf37b2d7 + languageName: node + linkType: hard + +"external-editor@npm:^3.0.3": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: ^0.7.0 + iconv-lite: ^0.4.24 + tmp: ^0.0.33 + checksum: 1c2a616a73f1b3435ce04030261bed0e22d4737e14b090bb48e58865da92529c9f2b05b893de650738d55e692d071819b45e1669259b2b354bc3154d27a698c7 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + languageName: node + linkType: hard + +"fast-diff@npm:^1.1.2": + version: 1.2.0 + resolution: "fast-diff@npm:1.2.0" + checksum: 1b5306eaa9e826564d9e5ffcd6ebd881eb5f770b3f977fcbf38f05c824e42172b53c79920e8429c54eb742ce15a0caf268b0fdd5b38f6de52234c4a8368131ae + languageName: node + linkType: hard + +"fast-glob@npm:3.2.7": + version: 3.2.7 + resolution: "fast-glob@npm:3.2.7" + 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.4 + checksum: 2f4708ff112d2b451888129fdd9a0938db88b105b0ddfd043c064e3c4d3e20eed8d7c7615f7565fee660db34ddcf08a2db1bf0ab3c00b87608e4719694642d78 + languageName: node + linkType: hard + +"fast-glob@npm:^3.1.1, fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9": + version: 3.2.12 + resolution: "fast-glob@npm:3.2.12" + 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.4 + checksum: 0b1990f6ce831c7e28c4d505edcdaad8e27e88ab9fa65eedadb730438cfc7cde4910d6c975d6b7b8dc8a73da4773702ebcfcd6e3518e73938bb1383badfe01c2 + languageName: node + linkType: hard + +"fast-json-parse@npm:^1.0.3": + version: 1.0.3 + resolution: "fast-json-parse@npm:1.0.3" + checksum: c19117c56ec18a9aa133c8ebf450c99d1037117e47a3cb9aff91b60580ba48d0fd8484b696c26749a1b9cb4914084177b3fa9ebef72063a74dee7d9ead987603 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.15.0 + resolution: "fastq@npm:1.15.0" + dependencies: + reusify: ^1.0.4 + checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a + languageName: node + linkType: hard + +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: 2.1.1 + checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 + languageName: node + linkType: hard + +"figures@npm:3.2.0, figures@npm:^3.0.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: ^1.0.5 + checksum: 85a6ad29e9aca80b49b817e7c89ecc4716ff14e3779d9835af554db91bac41c0f289c418923519392a1e582b4d10482ad282021330cd045bb7b80c84152f2a2b + languageName: node + linkType: hard + +"figures@npm:^2.0.0": + version: 2.0.0 + resolution: "figures@npm:2.0.0" + dependencies: + escape-string-regexp: ^1.0.5 + checksum: 081beb16ea57d1716f8447c694f637668322398b57017b20929376aaf5def9823b35245b734cdd87e4832dc96e9c6f46274833cada77bfe15e5f980fea1fd21f + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: ^3.0.4 + checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 + languageName: node + linkType: hard + +"file-url@npm:3.0.0": + version: 3.0.0 + resolution: "file-url@npm:3.0.0" + checksum: 4724f669ee22468f23a39e37b8349a14f94dd9abda8385920db9900a2b2ae5ad90a314d85ea0089b6f45e9d0850833a6d1e41ac15a81a5618685129c6d7c7629 + languageName: node + linkType: hard + +"filelist@npm:^1.0.1": + version: 1.0.4 + resolution: "filelist@npm:1.0.4" + dependencies: + minimatch: ^5.0.1 + checksum: a303573b0821e17f2d5e9783688ab6fbfce5d52aaac842790ae85e704a6f5e4e3538660a63183d6453834dedf1e0f19a9dadcebfa3e926c72397694ea11f5160 + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + languageName: node + linkType: hard + +"find-replace@npm:^3.0.0": + version: 3.0.0 + resolution: "find-replace@npm:3.0.0" + dependencies: + array-back: ^3.0.1 + checksum: 6b04bcfd79027f5b84aa1dfe100e3295da989bdac4b4de6b277f4d063e78f5c9e92ebc8a1fec6dd3b448c924ba404ee051cc759e14a3ee3e825fa1361025df08 + languageName: node + linkType: hard + +"find-up@npm:5.0.0, find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + +"find-up@npm:^2.0.0": + version: 2.1.0 + resolution: "find-up@npm:2.1.0" + dependencies: + locate-path: ^2.0.0 + checksum: 43284fe4da09f89011f08e3c32cd38401e786b19226ea440b75386c1b12a4cb738c94969808d53a84f564ede22f732c8409e3cfc3f7fb5b5c32378ad0bbf28bd + languageName: node + linkType: hard + +"find-up@npm:^4.0.0, find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: ^5.0.0 + path-exists: ^4.0.0 + checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.0.4 + resolution: "flat-cache@npm:3.0.4" + dependencies: + flatted: ^3.1.0 + rimraf: ^3.0.2 + checksum: 4fdd10ecbcbf7d520f9040dd1340eb5dfe951e6f0ecf2252edeec03ee68d989ec8b9a20f4434270e71bcfd57800dc09b3344fca3966b2eb8f613072c7d9a2365 + languageName: node + linkType: hard + +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d + languageName: node + linkType: hard + +"flatted@npm:^3.1.0": + version: 3.2.7 + resolution: "flatted@npm:3.2.7" + checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.0": + version: 1.15.2 + resolution: "follow-redirects@npm:1.15.2" + peerDependenciesMeta: + debug: + optional: true + checksum: faa66059b66358ba65c234c2f2a37fcec029dc22775f35d9ad6abac56003268baf41e55f9ee645957b32c7d9f62baf1f0b906e68267276f54ec4b4c597c2b190 + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: ^1.1.3 + checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + languageName: node + linkType: hard + +"fp-ts@npm:^2.5.3": + version: 2.13.1 + resolution: "fp-ts@npm:2.13.1" + checksum: 618e0028aca9ff1d52b86f438499ccab149825bdab14c678d22c3e2ccbf9d36fd1f26d463bf0ae1e63f5cd79dd54c8218af2cca0daeea68b039307b751ae9563 + languageName: node + linkType: hard + +"fromentries@npm:^1.2.0, fromentries@npm:^1.3.2": + version: 1.3.2 + resolution: "fromentries@npm:1.3.2" + checksum: 33729c529ce19f5494f846f0dd4945078f4e37f4e8955f4ae8cc7385c218f600e9d93a7d225d17636c20d1889106fd87061f911550861b7072f53bf891e6b341 + languageName: node + linkType: hard + +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d + languageName: node + linkType: hard + +"fs-extra@npm:9.1.0, fs-extra@npm:^9.1.0": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: ^1.0.0 + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20 + languageName: node + linkType: hard + +"fs-extra@npm:^11.1.0": + version: 11.1.1 + resolution: "fs-extra@npm:11.1.1" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: fb883c68245b2d777fbc1f2082c9efb084eaa2bbf9fddaa366130d196c03608eebef7fb490541276429ee1ca99f317e2d73e96f5ca0999eefedf5a624ae1edfd + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.1 + resolution: "fs-minipass@npm:3.0.1" + dependencies: + minipass: ^4.0.0 + checksum: ce1fd3ccef7d64caa9ee5f566db1abe250b6e0067defe53003288537b310956e6f42c433c3ee6001e044f656ce8ba5a0b2e5b5589c513c67b57470d11c3d9b07 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:2.3.2, fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": + version: 2.3.2 + resolution: "fsevents@npm:2.3.2" + dependencies: + node-gyp: latest + checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@2.3.2#~builtin, fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": + version: 2.3.2 + resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.1": + version: 1.1.1 + resolution: "function-bind@npm:1.1.1" + checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.5": + version: 1.1.5 + resolution: "function.prototype.name@npm:1.1.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.19.0 + functions-have-names: ^1.2.2 + checksum: acd21d733a9b649c2c442f067567743214af5fa248dbeee69d8278ce7df3329ea5abac572be9f7470b4ec1cd4d8f1040e3c5caccf98ebf2bf861a0deab735c27 + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.2": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 + languageName: node + linkType: hard + +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + 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 + checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d + languageName: node + linkType: hard + +"gauge@npm:^5.0.0": + version: 5.0.0 + resolution: "gauge@npm:5.0.0" + 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 + checksum: 663c3e9418a81274824301c5282d047f13e1612ccb458d96ea6cae5f63012c171af2829041501c459f7fa64845bbc5362d3574573747e9a114745d64ceb2480b + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0": + version: 1.2.0 + resolution: "get-intrinsic@npm:1.2.0" + dependencies: + function-bind: ^1.1.1 + has: ^1.0.3 + has-symbols: ^1.0.3 + checksum: 78fc0487b783f5c58cf2dccafc3ae656ee8d2d8062a8831ce4a95e7057af4587a1d4882246c033aca0a7b4965276f4802b45cc300338d1b77a73d3e3e3f4877d + languageName: node + linkType: hard + +"get-monorepo-packages@npm:^1.1.0": + version: 1.2.0 + resolution: "get-monorepo-packages@npm:1.2.0" + dependencies: + globby: ^7.1.1 + load-json-file: ^4.0.0 + checksum: f9321c11b8e11f02138758db6589d8ab8b7e1b05e78cac92493b635faea10aa100c20fe40f2cf110c82ec100c118c6c131dff4c65d32a721c617dc2928f7b277 + languageName: node + linkType: hard + +"get-package-type@npm:^0.1.0": + version: 0.1.0 + resolution: "get-package-type@npm:0.1.0" + checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 + languageName: node + linkType: hard "get-param-names@github:jdalrymple/get-param-names#1-improve-functionality": - version "1.0.1" - resolved "https://codeload.github.com/jdalrymple/get-param-names/tar.gz/ce58f9269c0ca1798326d07b4043e73451af8fc1" - dependencies: - strip-json-comments "^3.0.1" - -get-pkg-repo@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.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: - version "5.1.1" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0, get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -"get-tsconfig@npm:@unts/get-tsconfig@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@unts/get-tsconfig/-/get-tsconfig-4.1.1.tgz#f2d308a0c9e56a73b815b0525d4bf37a28914cdd" - integrity sha512-8mPf1bBzF2S+fyuyYOQWjDcaJTTgJ14UAnXW9I3KwrqioRWG1byRXHwciYdqXpbdOiu7Fg4WJbymBIakGk+aMA== - -git-raw-commits@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1" - integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ== - dependencies: - dargs "^7.0.0" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" - integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== - dependencies: - meow "^8.0.0" - semver "^6.0.0" - -git-up@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-6.0.0.tgz#dbd6e4eee270338be847a0601e6d0763c90b74db" - integrity sha512-6RUFSNd1c/D0xtGnyWN2sxza2bZtZ/EmI9448n6rCZruFwV/ezeEn2fJP7XnUQGwf0RAtd/mmUCbtH6JPYA2SA== - dependencies: - is-ssh "^1.4.0" - parse-url "^7.0.2" - -git-url-parse@^12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-12.0.0.tgz#4ba70bc1e99138321c57e3765aaf7428e5abb793" - integrity sha512-I6LMWsxV87vysX1WfsoglXsXg6GjQRKq7+Dgiseo+h0skmp5Hp2rzmcEIRQot9CPA+uzU7x1x7jZdqvTFGnB+Q== - dependencies: - git-up "^6.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= - dependencies: - ini "^1.3.2" - -gitlog@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gitlog/-/gitlog-4.0.4.tgz#8da6c08748dc290eb6c2fc11e3c505fb73715564" - integrity sha512-jeY2kO7CVyTa6cUM7ZD2ZxIyBkna1xvW2esV/3o8tbhiUneX1UBQCH4D9aMrHgGiohBjyXbuZogyjKXslnY5Yg== - dependencies: - debug "^4.1.1" - tslib "^1.14.1" - -glob-parent@^5.1.1, glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - 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" - -glob@^8.0.1: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -global-modules@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" - integrity sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0= - dependencies: - global-prefix "^0.1.4" - is-windows "^0.2.0" - -global-prefix@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" - integrity sha1-jTvGuNo8qBEqFg2NSW/wRiv+948= - dependencies: - homedir-polyfill "^1.0.0" - ini "^1.3.4" - is-windows "^0.2.0" - which "^1.2.12" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.6.0, globals@^13.9.0: - version "13.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" - integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== - dependencies: - type-fest "^0.20.2" - -globalyzer@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" - integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== - -globby@^11.0.2, globby@^11.0.3, globby@^11.0.4: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -globby@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" - integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - -globby@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -globrex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" - integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== - -got@^11.8.3: - version "11.8.5" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" - integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== - 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" - -got@^12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/got/-/got-12.0.0.tgz#2ee3d5ff25eabc47dae975d376ddcee1d450bec1" - integrity sha512-gNNNghQ1yw0hyzie1FLK6gY90BQlXU9zSByyRygnbomHPruKQ6hAKKbpO1RfNZp8b+qNzNipGeRG3tUelKcVsA== - dependencies: - "@sindresorhus/is" "^4.2.0" - "@szmarczak/http-timer" "^5.0.1" - "@types/cacheable-request" "^6.0.2" - "@types/responselike" "^1.0.0" - cacheable-lookup "^6.0.4" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - form-data-encoder "1.7.1" - get-stream "^6.0.1" - http2-wrapper "^2.1.9" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^2.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== - -graceful-fs@^4.2.6: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -handlebars@^4.7.6: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hasha@^5.0.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" - integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== - dependencies: - is-stream "^2.0.0" - type-fest "^0.8.0" - -headers-utils@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/headers-utils/-/headers-utils-3.0.2.tgz#dfc65feae4b0e34357308aefbcafa99c895e59ef" - integrity sha512-xAxZkM1dRyGV2Ou5bzMxBPNLoRCjcX+ya7KSWybQD2KwLphxsapUVK6x/02o7f4VU6GPSXch9vNY2+gkU8tYWQ== - -homedir-polyfill@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" - integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.0.0.tgz#df7a06678b4ebd722139786303db80fdf302ea56" - integrity sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q== - dependencies: - lru-cache "^7.5.1" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - -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== - -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.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.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -http2-wrapper@^2.1.9: - version "2.1.9" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.1.9.tgz#d27b9475f132973a74b4ee50901b951ff6e56020" - integrity sha512-z5jPLkDXHsQM762XFo4XproHTXT0lMQscKCQMPGccHDzY0kNxmUxWyGkW66zB2RGAr9pF9Tzc5Dmmv8Uh8HW3Q== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.2.0" - -https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -human-signals@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" - integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= - dependencies: - ms "^2.0.0" - -husky@^7.0.0: - version "7.0.4" - resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" - integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== - -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.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.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-walk@3.0.4, ignore-walk@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" - integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== - dependencies: - minimatch "^3.0.4" - -ignore-walk@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" - integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== - dependencies: - minimatch "^5.0.1" - -ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.4, ignore@^5.1.8: - version "5.1.9" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" - integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== - -ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -import-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" - integrity sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg== - dependencies: - import-from "^3.0.0" - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" - integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== - dependencies: - resolve-from "^5.0.0" - -import-local@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0" - integrity sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.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.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -init-package-json@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-2.0.5.tgz#78b85f3c36014db42d8f32117252504f68022646" - integrity sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA== - dependencies: - npm-package-arg "^8.1.5" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "^4.1.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^3.0.0" - -inquirer@^7.0.4, inquirer@^7.3.3: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -io-ts@^2.1.2: - version "2.2.16" - resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-2.2.16.tgz#597dffa03db1913fc318c9c6df6931cb4ed808b2" - integrity sha512-y5TTSa6VP6le0hhmIyN0dqEXkrZeJLeC5KApJq6VLci3UEKF80lZ+KuoUs02RhBxNWlrqSNxzfI7otLX1Euv8Q== - -ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.0, is-core-module@^2.8.1, is-core-module@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" - integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-fullwidth-code-point@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -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-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-interactive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" - integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-number-object@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" - integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.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.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-obj@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-reference@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-shared-array-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" - integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== - -is-ssh@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" - integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== - dependencies: - protocols "^2.0.1" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= - dependencies: - text-extensions "^1.0.0" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-unicode-supported@^1.0.0, is-unicode-supported@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.1.0.tgz#9127b71f9fa82f52ca5c20e982e7bec0ee31ee1e" - integrity sha512-lDcxivp8TJpLG75/DpatAqNzOpDPSpED8XNtrpBHTdQ2InQ1PbW78jhwSxyxhhu+xbVSast2X38bwj8atwoUQA== - -is-weakref@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2" - integrity sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ== - dependencies: - call-bind "^1.0.0" - -is-windows@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" - integrity sha1-3hqm1j6indJIc3tp8f+LgALSEIw= - -is-windows@^1.0.2: - 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.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-hook@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" - integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== - dependencies: - append-transform "^2.0.0" - -istanbul-lib-instrument@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" - integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== - 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-processinfo@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz#e1426514662244b2f25df728e8fd1ba35fe53b9c" - integrity sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw== - dependencies: - archy "^1.0.0" - cross-spawn "^7.0.0" - istanbul-lib-coverage "^3.0.0-alpha.1" - make-dir "^3.0.0" - p-map "^3.0.0" - rimraf "^3.0.0" - uuid "^3.3.3" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.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.0.2: - version "3.0.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.5.tgz#a2580107e71279ea6d661ddede929ffc6d693384" - integrity sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -istanbul-reports@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.3.tgz#4bcae3103b94518117930d51283690960b50d3c2" - integrity sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -java-properties@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" - integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== - -jest-changed-files@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.4.2.tgz#da2547ea47c6e6a5f6ed336151bd2075736eb4a5" - integrity sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A== - dependencies: - "@jest/types" "^27.4.2" - execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.4.6.tgz#d3af34c0eb742a967b1919fbb351430727bcea6c" - integrity sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^0.7.0" - expect "^27.4.6" - is-generator-fn "^2.0.0" - jest-each "^27.4.6" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" - jest-runtime "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" - pretty-format "^27.4.6" - slash "^3.0.0" - stack-utils "^2.0.3" - throat "^6.0.1" - -jest-cli@^27.4.7: - version "27.4.7" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.4.7.tgz#d00e759e55d77b3bcfea0715f527c394ca314e5a" - integrity sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw== - dependencies: - "@jest/core" "^27.4.7" - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - jest-config "^27.4.7" - jest-util "^27.4.2" - jest-validate "^27.4.6" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.4.7: - version "27.4.7" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.4.7.tgz#4f084b2acbd172c8b43aa4cdffe75d89378d3972" - integrity sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.4.6" - "@jest/types" "^27.4.2" - babel-jest "^27.4.6" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-circus "^27.4.6" - jest-environment-jsdom "^27.4.6" - jest-environment-node "^27.4.6" - jest-get-type "^27.4.0" - jest-jasmine2 "^27.4.6" - jest-regex-util "^27.4.0" - jest-resolve "^27.4.6" - jest-runner "^27.4.6" - jest-util "^27.4.2" - jest-validate "^27.4.6" - micromatch "^4.0.4" - pretty-format "^27.4.6" - slash "^3.0.0" - -jest-diff@^27.0.0, jest-diff@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.4.6.tgz#93815774d2012a2cbb6cf23f84d48c7a2618f98d" - integrity sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w== - dependencies: - chalk "^4.0.0" - diff-sequences "^27.4.0" - jest-get-type "^27.4.0" - pretty-format "^27.4.6" - -jest-diff@^28.0.0: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.1.tgz#1a3eedfd81ae79810931c63a1d0f201b9120106c" - integrity sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg== - dependencies: - chalk "^4.0.0" - diff-sequences "^28.1.1" - jest-get-type "^28.0.2" - pretty-format "^28.1.1" - -jest-docblock@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.4.0.tgz#06c78035ca93cbbb84faf8fce64deae79a59f69f" - integrity sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg== - dependencies: - detect-newline "^3.0.0" - -jest-each@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.4.6.tgz#e7e8561be61d8cc6dbf04296688747ab186c40ff" - integrity sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA== - dependencies: - "@jest/types" "^27.4.2" - chalk "^4.0.0" - jest-get-type "^27.4.0" - jest-util "^27.4.2" - pretty-format "^27.4.6" - -jest-environment-jsdom@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz#c23a394eb445b33621dfae9c09e4c8021dea7b36" - integrity sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/fake-timers" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - jest-mock "^27.4.6" - jest-util "^27.4.2" - jsdom "^16.6.0" - -jest-environment-node@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.4.6.tgz#ee8cd4ef458a0ef09d087c8cd52ca5856df90242" - integrity sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/fake-timers" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - jest-mock "^27.4.6" - jest-util "^27.4.2" - -jest-extended@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/jest-extended/-/jest-extended-3.0.0.tgz#c7cdd8c2326a9744de0b12677436c71353f39b5c" - integrity sha512-lhL+MCISeki6hGpRR7m8ViVR9pYlJHLj178OdvnYaOiXuXVaEkMiI8JfyZKEN/so8YzzbIfED1FGDSWWmxRNjg== - dependencies: - jest-diff "^28.0.0" - jest-get-type "^28.0.0" - -jest-get-type@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.4.0.tgz#7503d2663fffa431638337b3998d39c5e928e9b5" - integrity sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ== - -jest-get-type@^28.0.0, jest-get-type@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" - integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== - -jest-haste-map@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.4.6.tgz#c60b5233a34ca0520f325b7e2cc0a0140ad0862a" - integrity sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ== - dependencies: - "@jest/types" "^27.4.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^27.4.0" - jest-serializer "^27.4.0" - jest-util "^27.4.2" - jest-worker "^27.4.6" - micromatch "^4.0.4" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.3.2" - -jest-jasmine2@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz#109e8bc036cb455950ae28a018f983f2abe50127" - integrity sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/source-map" "^27.4.0" - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.4.6" - is-generator-fn "^2.0.0" - jest-each "^27.4.6" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" - jest-runtime "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" - pretty-format "^27.4.6" - throat "^6.0.1" - -jest-leak-detector@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz#ed9bc3ce514b4c582637088d9faf58a33bd59bf4" - integrity sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA== - dependencies: - jest-get-type "^27.4.0" - pretty-format "^27.4.6" - -jest-matcher-utils@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz#53ca7f7b58170638590e946f5363b988775509b8" - integrity sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA== - dependencies: - chalk "^4.0.0" - jest-diff "^27.4.6" - jest-get-type "^27.4.0" - pretty-format "^27.4.6" - -jest-message-util@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.4.6.tgz#9fdde41a33820ded3127465e1a5896061524da31" - integrity sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.4.2" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.4" - pretty-format "^27.4.6" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.4.6.tgz#77d1ba87fbd33ccb8ef1f061697e7341b7635195" - integrity sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw== - dependencies: - "@jest/types" "^27.4.2" - "@types/node" "*" - -jest-playwright-preset@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/jest-playwright-preset/-/jest-playwright-preset-1.7.0.tgz#bd5998d1a9090fdf68a9dc4421da4c0d45f9156c" - integrity sha512-G25Nik+By0SNniMDdkouDL/yA1LdqjzsXNSVU4xnRX1typjXRmzRE0aSgqxas2sRi8cwG3M1ioHdkLLsp6sang== - dependencies: - expect-playwright "^0.7.0" - jest-process-manager "^0.3.1" - nyc "^15.1.0" - playwright-core ">=1.2.0" - rimraf "^3.0.2" - uuid "^8.3.2" - -jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== - -jest-process-manager@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/jest-process-manager/-/jest-process-manager-0.3.1.tgz#e748da83ea66ac5073087feb1150ba1270332b2e" - integrity sha512-x9W54UgZ7IkzUHgXtnI1x4GKOVjxtwW0CA/7yGbTHtT/YhENO0Lic2yfVyC/gekn7OIEMcQmy0L1r9WLQABfqw== - dependencies: - "@types/wait-on" "^5.2.0" - chalk "^4.1.0" - cwd "^0.10.0" - exit "^0.1.2" - find-process "^1.4.4" - prompts "^2.4.1" - signal-exit "^3.0.3" - spawnd "^5.0.0" - tree-kill "^1.2.2" - wait-on "^5.3.0" - -jest-regex-util@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.4.0.tgz#e4c45b52653128843d07ad94aec34393ea14fbca" - integrity sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg== - -jest-resolve-dependencies@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz#fc50ee56a67d2c2183063f6a500cc4042b5e2327" - integrity sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw== - dependencies: - "@jest/types" "^27.4.2" - jest-regex-util "^27.4.0" - jest-snapshot "^27.4.6" - -jest-resolve@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.4.6.tgz#2ec3110655e86d5bfcfa992e404e22f96b0b5977" - integrity sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw== - dependencies: - "@jest/types" "^27.4.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" - jest-pnp-resolver "^1.2.2" - jest-util "^27.4.2" - jest-validate "^27.4.6" - resolve "^1.20.0" - resolve.exports "^1.1.0" - slash "^3.0.0" - -jest-runner@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.4.6.tgz#1d390d276ec417e9b4d0d081783584cbc3e24773" - integrity sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg== - dependencies: - "@jest/console" "^27.4.6" - "@jest/environment" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.8.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-docblock "^27.4.0" - jest-environment-jsdom "^27.4.6" - jest-environment-node "^27.4.6" - jest-haste-map "^27.4.6" - jest-leak-detector "^27.4.6" - jest-message-util "^27.4.6" - jest-resolve "^27.4.6" - jest-runtime "^27.4.6" - jest-util "^27.4.2" - jest-worker "^27.4.6" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.4.6.tgz#83ae923818e3ea04463b22f3597f017bb5a1cffa" - integrity sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/fake-timers" "^27.4.6" - "@jest/globals" "^27.4.6" - "@jest/source-map" "^27.4.0" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - execa "^5.0.0" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" - jest-message-util "^27.4.6" - jest-mock "^27.4.6" - jest-regex-util "^27.4.0" - jest-resolve "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-serializer@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.4.0.tgz#34866586e1cae2388b7d12ffa2c7819edef5958a" - integrity sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-snapshot@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.4.6.tgz#e2a3b4fff8bdce3033f2373b2e525d8b6871f616" - integrity sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ== - dependencies: - "@babel/core" "^7.7.2" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/traverse" "^7.7.2" - "@babel/types" "^7.0.0" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^27.4.6" - graceful-fs "^4.2.4" - jest-diff "^27.4.6" - jest-get-type "^27.4.0" - jest-haste-map "^27.4.6" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" - jest-util "^27.4.2" - natural-compare "^1.4.0" - pretty-format "^27.4.6" - semver "^7.3.2" - -jest-util@^27.0.0, jest-util@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.4.2.tgz#ed95b05b1adfd761e2cda47e0144c6a58e05a621" - integrity sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA== - dependencies: - "@jest/types" "^27.4.2" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.4" - picomatch "^2.2.3" - -jest-validate@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.4.6.tgz#efc000acc4697b6cf4fa68c7f3f324c92d0c4f1f" - integrity sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ== - dependencies: - "@jest/types" "^27.4.2" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^27.4.0" - leven "^3.1.0" - pretty-format "^27.4.6" - -jest-watcher@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.4.6.tgz#673679ebeffdd3f94338c24f399b85efc932272d" - integrity sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw== - dependencies: - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^27.4.2" - string-length "^4.0.1" - -jest-worker@^26.2.1: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest-worker@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.6.tgz#5d2d93db419566cb680752ca0792780e71b3273e" - integrity sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^27.0.4: - version "27.4.7" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.4.7.tgz#87f74b9026a1592f2da05b4d258e57505f28eca4" - integrity sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg== - dependencies: - "@jest/core" "^27.4.7" - import-local "^3.0.2" - jest-cli "^27.4.7" - -joi@^17.3.0: - version "17.4.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.4.2.tgz#02f4eb5cf88e515e614830239379dcbbe28ce7f7" - integrity sha512-Lm56PP+n0+Z2A2rfRvsfWVDXGEWjXxatPopkQ8qQ5mxCEhwHG+Ettgg5o98FFaxilOxozoa14cFhrE/hOzh/Nw== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.0" - "@sideway/formula" "^3.0.0" - "@sideway/pinpoint" "^2.0.0" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@3.14.1, js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.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" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-fixer@^1.5.1: - version "1.6.12" - resolved "https://registry.yarnpkg.com/json-fixer/-/json-fixer-1.6.12.tgz#352026c905c6366e214c9f10f77d6d7f93c48322" - integrity sha512-BGO9HExf0ZUVYvuWsps71Re513Ss0il1Wp7wYWkir2NthzincvNJEUu82KagEfAkGdjOMsypj3t2JB7drBKWnA== - dependencies: - "@babel/runtime" "^7.14.6" - chalk "^4.1.1" - pegjs "^0.10.0" - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.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.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@2.x, json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.2.0, jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= - -just-diff-apply@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.3.1.tgz#30f40809ffed55ad76dccf73fa9b85a76964c867" - integrity sha512-dgFenZnMsc1xGNqgdtgnh7DK+Oy352CE3VZLbzcbQpsBs9iI2K3M0IRrdgREZ72eItTjbl0suRyvKRdVQa9GbA== - -just-diff@^5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.0.3.tgz#4c9c514dec5526b25ab977590e3c39a0cf271554" - integrity sha512-a8p80xcpJ6sdurk5PxDKb4mav9MeKjA3zFKZpCWBIfvg8mznfnmb13MKZvlrwJ+Lhis0wM3uGAzE0ArhFHvIcg== - -keyv@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.4.tgz#f040b236ea2b06ed15ed86fbef8407e1a1c8e376" - integrity sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -ky@0.28.7: - version "0.28.7" - resolved "https://registry.yarnpkg.com/ky/-/ky-0.28.7.tgz#10c42be863fb96c1846d6e71e229263ffb72eb15" - integrity sha512-a23i6qSr/ep15vdtw/zyEQIDLoUaKDg9Jf04CYl/0ns/wXNYna26zJpI+MeIFaPeDvkrjLPrKtKOiiI3IE53RQ== - -lerna@^5.1.8: - version "5.1.8" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-5.1.8.tgz#77b2f10882c3eaec256fa9a643a21957e6ca7ec2" - integrity sha512-KrpFx2l1x1X7wb9unqRU7OZTaNs5+67VQ1vxf8fIMgdtCAjEqkLxF/F3xLs+KBMws5PV19Q9YtPHn7SiwDl7iQ== - dependencies: - "@lerna/add" "5.1.8" - "@lerna/bootstrap" "5.1.8" - "@lerna/changed" "5.1.8" - "@lerna/clean" "5.1.8" - "@lerna/cli" "5.1.8" - "@lerna/create" "5.1.8" - "@lerna/diff" "5.1.8" - "@lerna/exec" "5.1.8" - "@lerna/import" "5.1.8" - "@lerna/info" "5.1.8" - "@lerna/init" "5.1.8" - "@lerna/link" "5.1.8" - "@lerna/list" "5.1.8" - "@lerna/publish" "5.1.8" - "@lerna/run" "5.1.8" - "@lerna/version" "5.1.8" - import-local "^3.0.2" - npmlog "^6.0.2" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -li@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/li/-/li-1.3.0.tgz#22c59bcaefaa9a8ef359cf759784e4bf106aea1b" - integrity sha1-IsWbyu+qmo7zWc91l4TkvxBq6hs= - -libnpmaccess@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.3.tgz#dfb0e5b0a53c315a2610d300e46b4ddeb66e7eec" - integrity sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ== - dependencies: - aproba "^2.0.0" - minipass "^3.1.1" - npm-package-arg "^8.1.2" - npm-registry-fetch "^11.0.0" - -libnpmpublish@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.2.tgz#be77e8bf5956131bcb45e3caa6b96a842dec0794" - integrity sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw== - dependencies: - normalize-package-data "^3.0.2" - npm-package-arg "^8.1.2" - npm-registry-fetch "^11.0.0" - semver "^7.1.3" - ssri "^8.0.1" - -lilconfig@2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" - integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -lint-staged@^13.0.3: - version "13.0.3" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.0.3.tgz#d7cdf03a3830b327a2b63c6aec953d71d9dc48c6" - integrity sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug== - dependencies: - cli-truncate "^3.1.0" - colorette "^2.0.17" - commander "^9.3.0" - debug "^4.3.4" - execa "^6.1.0" - lilconfig "2.0.5" - listr2 "^4.0.5" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-inspect "^1.12.2" - pidtree "^0.6.0" - string-argv "^0.3.1" - yaml "^2.1.1" - -listr2@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" - integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.16" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.5.5" - through "^2.3.8" - wrap-ansi "^7.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -load-json-file@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.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" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= - -lodash.chunk@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" - integrity sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw= - -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" - integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= - -lodash.get@^4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= - -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash@^4.11.2, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.7.0: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-symbols@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.0.0.tgz#7720d3c6a56c365e1f658916069ba18d941092ca" - integrity sha512-zBsSKauX7sM0kcqrf8VpMRPqcWzU6a/Wi7iEl0QlVSCiIZ4CctaLdfVdiZUn6q2/nenyt392qJqpw9FhNAwqxQ== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^1.0.0" - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lowercase-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: - version "7.12.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.12.0.tgz#be2649a992c8a9116efda5c487538dcf715f3476" - integrity sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw== - -magic-string@^0.22.5: - version "0.22.5" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" - integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== - dependencies: - vlq "^0.2.2" - -magic-string@^0.25.3, magic-string@^0.25.7: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.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-dir@^3.0.0, make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@1.x, make-error@^1, make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: - version "10.1.8" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz#3b6e93dd8d8fdb76c0d7bf32e617f37c3108435a" - integrity sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g== - 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@^8.0.9: - version "8.0.14" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222" - integrity sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.0.5" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - promise-retry "^2.0.1" - socks-proxy-agent "^5.0.0" - ssri "^8.0.0" - -make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.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" - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - -meant@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.3.tgz#67769af9de1d158773e928ae82c456114903554c" - integrity sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw== - -meow@^8.0.0: - version "8.1.2" - resolved "https://registry.yarnpkg.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-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.51.0: - version "1.51.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" - integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== - -mime-types@^2.1.12: - version "2.1.34" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" - integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== - dependencies: - mime-db "1.51.0" - -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.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.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimalistic-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== - dependencies: - brace-expansion "^2.0.1" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.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.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-fetch@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.0.tgz#ca1754a5f857a3be99a9271277246ac0b44c3ff8" - integrity sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg== - dependencies: - minipass "^3.1.6" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.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.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.1.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732" - integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw== - dependencies: - yallist "^4.0.0" - -minipass@^3.1.6: - version "3.3.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== - dependencies: - yallist "^4.0.0" - -minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== - dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -module-alias@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.2.tgz#151cdcecc24e25739ff0aa6e51e1c5716974c0e0" - integrity sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.0.0, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multimatch@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.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, mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -negotiator@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nested-error-stacks@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz#d2cc9fc5235ddb371fc44d506234339c8e4b0a4b" - integrity sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A== - -node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-fetch@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-fetch@^2.6.0, node-fetch@^2.6.1: - version "2.6.6" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" - integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^3.0.0: - version "3.2.8" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.2.8.tgz#0d9516dcf43a758d78d6dbe538adf0b1f6a4944e" - integrity sha512-KtpD1YhGszhntMpBDyp5lyagk8KIMopC1LEb7cQUAh7zcosaX5uK8HnbNb2i3NTQK3sIawCItS0uFC3QzcLHdg== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - -node-gyp@^8.4.1: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-gyp@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.0.0.tgz#e1da2067427f3eb5bb56820cb62bc6b1e4bd2089" - integrity sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^10.0.3" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-preload@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" - integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== - dependencies: - process-on-spawn "^1.0.0" - -node-releases@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" - integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.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.2: - version "3.0.3" - resolved "https://registry.yarnpkg.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@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.0.tgz#1122d5359af21d4cd08718b92b058a658594177c" - integrity sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g== - dependencies: - hosted-git-info "^5.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^6.0.1, normalize-url@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-bundled@^1.1.1, npm-bundled@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" - integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-install-checks@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" - integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-package-arg@^8.0.0, npm-package-arg@^8.1.0, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: - version "8.1.5" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" - integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== - dependencies: - hosted-git-info "^4.0.1" - semver "^7.3.4" - validate-npm-package-name "^3.0.0" - -npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.0.tgz#a60e9f1e7c03e4e3e4e994ea87fff8b90b522987" - integrity sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw== - dependencies: - hosted-git-info "^5.0.0" - proc-log "^2.0.1" - semver "^7.3.5" - validate-npm-package-name "^4.0.0" - -npm-packlist@^2.1.4: - version "2.2.2" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.2.2.tgz#076b97293fa620f632833186a7a8f65aaa6148c8" - integrity sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg== - dependencies: - glob "^7.1.6" - ignore-walk "^3.0.3" - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -npm-packlist@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.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-pick-manifest@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz#76dda30a7cd6b99be822217a935c2f5eacdaca4c" - integrity sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg== - dependencies: - npm-install-checks "^5.0.0" - npm-normalize-package-bin "^1.0.1" - npm-package-arg "^9.0.0" - semver "^7.3.5" - -npm-registry-fetch@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76" - integrity sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA== - dependencies: - make-fetch-happen "^9.0.1" - minipass "^3.1.3" - minipass-fetch "^1.3.0" - minipass-json-stream "^1.0.1" - minizlib "^2.0.0" - npm-package-arg "^8.0.0" - -npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz#26dc4b26d0a545886e807748032ba2aefaaae96b" - integrity sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w== - dependencies: - make-fetch-happen "^10.0.6" - minipass "^3.1.6" - minipass-fetch "^2.0.3" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^9.0.1" - proc-log "^2.0.0" - -npm-registry-fetch@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz#86f3feb4ce00313bc0b8f1f8f69daae6face1661" - integrity sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA== - dependencies: - "@npmcli/ci-detect" "^1.0.0" - lru-cache "^6.0.0" - make-fetch-happen "^8.0.9" - minipass "^3.1.3" - minipass-fetch "^1.3.0" - minipass-json-stream "^1.0.1" - minizlib "^2.0.0" - npm-package-arg "^8.0.0" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== - dependencies: - path-key "^4.0.0" - -npmlog@^6.0.0, npmlog@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.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" - -nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -nyc@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" - integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== - dependencies: - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - caching-transform "^4.0.0" - convert-source-map "^1.7.0" - decamelize "^1.2.0" - find-cache-dir "^3.2.0" - find-up "^4.1.0" - foreground-child "^2.0.0" - get-package-type "^0.1.0" - glob "^7.1.6" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-hook "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-processinfo "^2.0.2" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - make-dir "^3.0.0" - node-preload "^0.2.1" - p-map "^3.0.0" - process-on-spawn "^1.0.0" - resolve-from "^5.0.0" - rimraf "^3.0.0" - signal-exit "^3.0.2" - spawn-wrap "^2.0.0" - test-exclude "^6.0.0" - yargs "^15.0.2" - -object-inspect@^1.11.0, object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.entries@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" - integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.values@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -objectorarray@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/objectorarray/-/objectorarray-1.0.5.tgz#2c05248bbefabd8f43ad13b41085951aac5e68a5" - integrity sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -open@^8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -openpgp@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/openpgp/-/openpgp-5.3.1.tgz#001df6b33546fbed044686d4d6af7e80ed9354d2" - integrity sha512-CxjY4gZ3D0pp6dJUmcM6EgjvDv0u+LsY+3ymULPZYRUPa0tmigDXHNUm5EX+omqmU401DTQNO6ud+QA6UpCdEA== - dependencies: - asn1.js "^5.0.0" - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ora@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-6.0.1.tgz#68caa9fd6c485a40d6f46c50a3940fa3df99c7f3" - integrity sha512-TDdKkKHdWE6jo/6pIa5U5AWcSVfpNRFJ8sdRJpioGNVPLAzZzHs/N+QhUfF7ZbyoC+rnDuNTKzeDJUbAza9g4g== - dependencies: - bl "^5.0.0" - chalk "^4.1.2" - cli-cursor "^4.0.0" - cli-spinners "^2.6.0" - is-interactive "^2.0.0" - is-unicode-supported "^1.1.0" - log-symbols "^5.0.0" - strip-ansi "^7.0.1" - wcwidth "^1.0.1" - -os-homedir@^1.0.0, os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-cancelable@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" - integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map-series@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" - integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== - -p-map@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" - integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.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.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" - integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== - -p-queue@^6.6.2: - version "6.6.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" - integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== - dependencies: - eventemitter3 "^4.0.4" - p-timeout "^3.2.0" - -p-reduce@^2.0.0, p-reduce@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" - integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== - -p-timeout@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== - dependencies: - p-finally "^1.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.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.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" - integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== - dependencies: - p-reduce "^2.0.0" - -package-hash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" - integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== - dependencies: - graceful-fs "^4.1.15" - hasha "^5.0.0" - lodash.flattendeep "^4.4.0" - release-zalgo "^1.0.0" - -pacote@^13.0.3, pacote@^13.0.5, pacote@^13.4.1: - version "13.6.1" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.1.tgz#ac6cbd9032b4c16e5c1e0c60138dfe44e4cc589d" - integrity sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw== - dependencies: - "@npmcli/git" "^3.0.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/promise-spawn" "^3.0.0" - "@npmcli/run-script" "^4.1.0" - cacache "^16.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.6" - mkdirp "^1.0.4" - npm-package-arg "^9.0.0" - npm-packlist "^5.1.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.1" - proc-log "^2.0.0" - promise-retry "^2.0.1" - read-package-json "^5.0.0" - read-package-json-fast "^2.0.3" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-author@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/parse-author/-/parse-author-2.0.0.tgz#d3460bf1ddd0dfaeed42da754242e65fb684a81f" - integrity sha1-00YL8d3Q367tQtp1QkLmX7aEqB8= - dependencies: - author-regex "^1.0.0" - -parse-conflict-json@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" - integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== - dependencies: - json-parse-even-better-errors "^2.3.1" - just-diff "^5.0.1" - just-diff-apply "^5.2.0" - -parse-github-url@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395" - integrity sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw== - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse-ms@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" - integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - -parse-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-5.0.0.tgz#f933152f3c6d34f4cf36cfc3d07b138ac113649d" - integrity sha512-qOpH55/+ZJ4jUu/oLO+ifUKjFPNZGfnPJtzvGzKN/4oLMil5m9OH4VpOj6++9/ytJcfks4kzH2hhi87GL/OU9A== - dependencies: - protocols "^2.0.0" - -parse-url@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-7.0.2.tgz#d21232417199b8d371c6aec0cedf1406fd6393f0" - integrity sha512-PqO4Z0eCiQ08Wj6QQmrmp5YTTxpYfONdOEamrtvK63AmzXpcavIVQubGHxOEwiIoDZFb8uDOoQFS0NCcjqIYQg== - dependencies: - is-ssh "^1.4.0" - normalize-url "^6.1.0" - parse-path "^5.0.0" - protocols "^2.0.1" - -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-network-drive@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/path-is-network-drive/-/path-is-network-drive-1.0.10.tgz#d9d7164e6d05a49d7876813a53ec5c4ae86aa542" - integrity sha512-D6kJYPUSKGZBpTM2nv10sOWNdC056p4JDx0y7ARe6gop0aXXm5G86Gn/SyKvaf0Ce8c9Guctf+J+qoFmzuhDQg== - dependencies: - tslib "^2.3.1" - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -path-parse@^1.0.5, path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-strip-sep@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-strip-sep/-/path-strip-sep-1.0.7.tgz#51f31fd53099b7ba59876b7b9e6492397441223d" - integrity sha512-9xDVZPblHde4lTuTDnwqBKr9LTbPZW+Iae63ho500+BpEiZe3X6wvLInHgbB6FSMtwCTvztljw3k2zcNDNESzg== - dependencies: - tslib "^2.3.1" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pegjs@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" - integrity sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0= - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.2, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pidtree@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" - integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== - -pirates@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== - -pkg-conf@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" - integrity sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg= - dependencies: - find-up "^2.0.0" - load-json-file "^4.0.0" - -"pkg-dir@< 6 >= 5": - 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 "^5.0.0" - -pkg-dir@^4.1.0, 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" - -playwright-core@1.23.2, playwright-core@>=1.2.0: - version "1.23.2" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.23.2.tgz#ddc15b3251e42ee0eed82a96ece3f7b2641d75a4" - integrity sha512-UGbutIr0nBALDHWW/HcXfyK6ZdmefC99Moo4qyTr89VNIkYZuDrW8Sw554FyFUamcFSdKOgDPk6ECSkofGIZjQ== - -playwright@^1.9.2: - version "1.23.2" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.23.2.tgz#379eccbaed58ba23152d02934b4bc5104b4b7e60" - integrity sha512-c7nyyuDRifGBUNb+/zZh4AjyQXQISVHZY2cpHCsSIWueZNtY7q6Qfv0hJbVdtJhWSGgcix0hmES30l5jlPmy5Q== - dependencies: - playwright-core "1.23.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^2.3.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" - integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== - -pretty-format@^27.0.0: - version "27.4.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.2.tgz#e4ce92ad66c3888423d332b40477c87d1dac1fb8" - integrity sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw== - dependencies: - "@jest/types" "^27.4.2" - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -pretty-format@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.6.tgz#1b784d2f53c68db31797b2348fa39b49e31846b7" - integrity sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -pretty-format@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.1.tgz#f731530394e0f7fcd95aba6b43c50e02d86b95cb" - integrity sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw== - dependencies: - "@jest/schemas" "^28.0.2" - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -pretty-ms@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" - integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== - dependencies: - parse-ms "^2.1.0" - -proc-log@^2.0.0, proc-log@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" - integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== - -process-es6@^0.11.6: - version "0.11.6" - resolved "https://registry.yarnpkg.com/process-es6/-/process-es6-0.11.6.tgz#c6bb389f9a951f82bd4eb169600105bd2ff9c778" - integrity sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g= - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process-on-spawn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" - integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== - dependencies: - fromentries "^1.2.0" - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" - integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -prompts@^2.0.1, prompts@^2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= - dependencies: - read "1" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - -protocols@^2.0.0, protocols@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" - integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== - -psl@^1.1.33: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qs@^6.10.1: - version "6.10.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.2.tgz#c1431bea37fc5b24c5bdbafa20f16bdf2a4b9ffe" - integrity sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw== - dependencies: - side-channel "^1.0.4" - -query-string@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.0.tgz#96b88f27b39794f97b8c8ccd060bc900495078ef" - integrity sha512-wnJ8covk+S9isYR5JIXPt93kFUmI2fQ4R/8130fuq+qwLiGVTurg7Klodgfw4NSz/oe7xnyi09y3lSrogUeM3g== - dependencies: - decode-uri-component "^0.2.0" - filter-obj "^1.1.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.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.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -rc@^1.2.8, rc@~1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -read-cmd-shim@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" - integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== - -read-cmd-shim@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" - integrity sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog== - -read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" - -read-package-json@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-3.0.1.tgz#c7108f0b9390257b08c21e3004d2404c806744b9" - integrity sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng== - dependencies: - glob "^7.1.1" - json-parse-even-better-errors "^2.3.0" - normalize-package-data "^3.0.0" - npm-normalize-package-bin "^1.0.0" - -read-package-json@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-4.1.1.tgz#153be72fce801578c1c86b8ef2b21188df1b9eea" - integrity sha512-P82sbZJ3ldDrWCOSKxJT0r/CXMWR0OR3KRh55SgKo3p91GSIEEC32v3lSHAvO/UcH3/IoL7uqhOFBduAnwdldw== - dependencies: - glob "^7.1.1" - json-parse-even-better-errors "^2.3.0" - normalize-package-data "^3.0.0" - npm-normalize-package-bin "^1.0.0" - -read-package-json@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.1.tgz#1ed685d95ce258954596b13e2e0e76c7d0ab4c26" - integrity sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg== - dependencies: - glob "^8.0.1" - json-parse-even-better-errors "^2.3.1" - normalize-package-data "^4.0.0" - npm-normalize-package-bin "^1.0.1" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.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.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -read@1, read@~1.0.1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= - dependencies: - mute-stream "~0.0.4" - -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdir-scoped-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -reduce-flatten@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" - integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== - -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -registry-url@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - -release-zalgo@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" - integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= - dependencies: - es6-error "^4.0.1" - -remove-markdown@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/remove-markdown/-/remove-markdown-0.3.0.tgz#5e4b667493a93579728f3d52ecc1db9ca505dc98" - integrity sha1-XktmdJOpNXlyjz1S7MHbnKUF3Jg= - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -requireg@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/requireg/-/requireg-0.2.2.tgz#437e77a5316a54c9bcdbbf5d1f755fe093089830" - integrity sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg== - dependencies: - nested-error-stacks "~2.0.1" - rc "~1.2.7" - resolve "~1.7.1" - -resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: - version "1.2.1" - 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@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" - integrity sha1-shklmlYC+sXFxJatiUpujMQwJh4= - dependencies: - expand-tilde "^1.2.2" - global-modules "^0.2.3" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.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.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve.exports@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" - integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== - -resolve@1.20.0, resolve@^1.10.0, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -resolve@~1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" - integrity sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw== - dependencies: - path-parse "^1.0.5" - -responselike@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" - integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== - dependencies: - lowercase-keys "^2.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup-plugin-inject@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz#e4233855bfba6c0c12a312fd6649dff9a13ee9f4" - integrity sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w== - dependencies: - estree-walker "^0.6.1" - magic-string "^0.25.3" - rollup-pluginutils "^2.8.1" - -rollup-plugin-node-globals@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz#5e1f24a9bb97c0ef51249f625e16c7e61b7c020b" - integrity sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g== - dependencies: - acorn "^5.7.3" - buffer-es6 "^4.9.3" - estree-walker "^0.5.2" - magic-string "^0.22.5" - process-es6 "^0.11.6" - rollup-pluginutils "^2.3.1" - -rollup-plugin-node-polyfills@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz#53092a2744837164d5b8a28812ba5f3ff61109fd" - integrity sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA== - dependencies: - rollup-plugin-inject "^3.0.0" - -rollup-plugin-preserve-shebangs@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-preserve-shebangs/-/rollup-plugin-preserve-shebangs-0.2.0.tgz#e48894c1f68c6fd54b0de10bd26906224d5dc7cd" - integrity sha512-OEyTIfZwUJ7yUAVAbegac/bNvp1WJzgZcQNCFprWX42wwwOqlJwrev9lUmzZdYVgCWct+03xUPvZg4RfgkM9oQ== - dependencies: - magic-string "^0.25.7" - -rollup-plugin-terser@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" - integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== - dependencies: - "@babel/code-frame" "^7.10.4" - jest-worker "^26.2.1" - serialize-javascript "^4.0.0" - terser "^5.0.0" - -rollup-plugin-typescript2@^0.31.1: - version "0.31.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.31.1.tgz#3b3a0e29b29b2ed8244b1a78fd8e2cac93ab79a4" - integrity sha512-sklqXuQwQX+stKi4kDfEkneVESPi3YM/2S899vfRdF9Yi40vcC50Oq4A4cSZJNXsAQE/UsBZl5fAOsBLziKmjw== - dependencies: - "@rollup/pluginutils" "^4.1.0" - "@yarn-tool/resolve-package" "^1.0.36" - find-cache-dir "^3.3.1" - fs-extra "8.1.0" - resolve "1.20.0" - tslib "2.2.0" - -rollup-pluginutils@^2.3.1, rollup-pluginutils@^2.8.1: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^2.47.0: - version "2.76.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.76.0.tgz#c69fe03db530ac53fcb9523b3caa0d3c0b9491a1" - integrity sha512-9jwRIEY1jOzKLj3nsY/yot41r19ITdQrhs+q3ggNWhr9TQgduHqANvPpS32RNpzGklJu3G1AJfvlZLi/6wFgWA== - optionalDependencies: - fsevents "~2.3.2" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^6.6.0, rxjs@^6.6.3: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@^7.5.5: - version "7.5.6" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" - integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== - dependencies: - tslib "^2.1.0" - -safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -"semver@2 || 3 || 4 || 5", semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.5" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f" - integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ== - -signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" - integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== - dependencies: - chalk "^2.3.2" - figures "^2.0.0" - pkg-conf "^2.1.0" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" - integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - dependencies: - ansi-styles "^6.0.0" - is-fullwidth-code-point "^4.0.0" - -smart-buffer@^4.1.0, smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" - integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== - dependencies: - agent-base "^6.0.2" - debug "4" - socks "^2.3.3" - -socks-proxy-agent@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz#869cf2d7bd10fea96c7ad3111e81726855e285c3" - integrity sha512-57e7lwCN4Tzt3mXz25VxOErJKXlPfXmkMLnk310v/jwW20jWRVcgsOit+xNkN3eIEdB47GwnfAEBLacZ/wVIKg== - dependencies: - agent-base "^6.0.2" - debug "^4.3.1" - socks "^2.6.1" - -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.3.3, socks@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e" - integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA== - dependencies: - ip "^1.1.5" - smart-buffer "^4.1.0" - -socks@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a" - integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== - dependencies: - ip "^1.1.5" - smart-buffer "^4.2.0" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= - dependencies: - is-plain-obj "^1.0.0" - -sort-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" - integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== - dependencies: - is-plain-obj "^2.0.0" - -source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.20: - version "0.5.20" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" - integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3, source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -sourcemap-codec@1.4.8, sourcemap-codec@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -spawn-wrap@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" - integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== - dependencies: - foreground-child "^2.0.0" - is-windows "^1.0.2" - make-dir "^3.0.0" - rimraf "^3.0.0" - signal-exit "^3.0.2" - which "^2.0.1" - -spawnd@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/spawnd/-/spawnd-5.0.0.tgz#ea72200bdc468998e84e1c3e7b914ce85fc1c32c" - integrity sha512-28+AJr82moMVWolQvlAIv3JcYDkjkFTEmfDc503wxrF5l2rQ3dFz6DpbXp3kD4zmgGGldfM4xM4v1sFj/ZaIOA== - dependencies: - exit "^0.1.2" - signal-exit "^3.0.3" - tree-kill "^1.2.2" - wait-port "^0.2.9" - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.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" - -spdx-license-ids@^3.0.0: - version "3.0.10" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b" - integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA== - -split-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== - -split2@^3.0.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -ssri@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" - integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== - dependencies: - minipass "^3.1.1" - -stack-utils@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== - dependencies: - escape-string-regexp "^2.0.0" - -stream-events@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" - integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== - dependencies: - stubs "^3.0.0" - -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= - -string-argv@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== - -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@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.0.1.tgz#0d8158335a6cfd8eb95da9b6b262ce314a036ffd" - integrity sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g== - dependencies: - emoji-regex "^9.2.2" - is-fullwidth-code-point "^4.0.0" - strip-ansi "^7.0.1" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.0, strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -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.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -strong-log-transformer@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.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" - -stubs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" - integrity sha1-6NK6H6nJBXAwPAMLaQD31fiavls= - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -synckit@^0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.7.2.tgz#43c07b5a8101ee45355aebf0216895309fd32a6f" - integrity sha512-CSZRtSRZ8RhJGMtWyLRqlarmWPPlsgZJHtV6cz0VTHNOg+R7UBoE2eNPQmB5Qrhtk3RX2AAcJmVwMXFULVQSwg== - dependencies: - "@pkgr/utils" "^2.2.0" - tslib "^2.4.0" - -sywac@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sywac/-/sywac-1.3.0.tgz#324789bdb8bd7d0d66625c9144fce81ab5ba6f99" - integrity sha512-LDt2stNTp4bVPMgd70Jj9PWrSa4batl+bv+Ea5NLNGT7ufc4oQPtRfQ73wbddNV6RilaPqnEt6y1Wkm5FVTNEg== - -table-layout@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" - integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== - dependencies: - array-back "^4.0.1" - deep-extend "~0.6.0" - typical "^5.2.0" - wordwrapjs "^4.0.0" - -table@^6.0.9: - version "6.7.3" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.3.tgz#255388439715a738391bd2ee4cbca89a4d05a9b7" - integrity sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.1.11" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -teeny-request@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-7.1.1.tgz#2b0d156f4a8ad81de44303302ba8d7f1f05e20e6" - integrity sha512-iwY6rkW5DDGq8hE2YgNQlKbptYpY5Nn2xecjQiNjOXWbKzPGUfmeUBCSQbbr306d7Z7U2N0TPl+/SwYRfua1Dg== - dependencies: - http-proxy-agent "^4.0.0" - https-proxy-agent "^5.0.0" - node-fetch "^2.6.1" - stream-events "^1.0.5" - uuid "^8.0.0" - -temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= - -terminal-link@^2.0.0, terminal-link@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -terser@^5.0.0: - version "5.9.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.9.0.tgz#47d6e629a522963240f2b55fcaa3c99083d2c351" - integrity sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ== - dependencies: - commander "^2.20.0" - source-map "~0.7.2" - 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" - -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -throat@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" - integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.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.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -tiny-glob@^0.2.9: - version "0.2.9" - resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" - integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== - dependencies: - globalyzer "0.1.0" - globrex "^0.1.2" - -tinycolor2@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" - integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -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-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.1.2" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -treeverse@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" - integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== - -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -ts-jest@^27.0.3: - version "27.1.2" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.2.tgz#5991d6eb3fd8e1a8d4b8f6de3ec0a3cc567f3151" - integrity sha512-eSOiJOWq6Hhs6Khzk5wKC5sgWIXgXqOCiIl1+3lfnearu58Hj4QpE5tUhQcA3xtZrELbcvAGCsd6HB8OsaVaTA== - dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" - jest-util "^27.0.0" - json5 "2.x" - lodash.memoize "4.x" - make-error "1.x" - semver "7.x" - yargs-parser "20.x" - -ts-node@^10.0.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.4.0.tgz#680f88945885f4e6cf450e7f0d6223dd404895f7" - integrity sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A== - dependencies: - "@cspotcode/source-map-support" "0.7.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - yn "3.1.1" - -ts-node@^9, ts-node@^9.1.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" - integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== - dependencies: - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.17" - yn "3.1.1" - -ts-type@^1.2.40: - version "1.2.40" - resolved "https://registry.yarnpkg.com/ts-type/-/ts-type-1.2.40.tgz#db3ceb95281567fe72591b9a904488e85c5b74fe" - integrity sha512-Ux5e7Frys5pX7w8gYchEd0KfhG1H5puXOQC8yOBgMJ1aEwDSypeHLwxIUpKjecni1IGwtLI3JrxCVZaQO9JKmw== - dependencies: - tslib "^2.3.0" - typedarray-dts "^1.0.0" - -tsconfig-paths@^3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b" - integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.0" - strip-bom "^3.0.0" - -tslib@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== - -tslib@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" - integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== - -tslib@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" - integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== - -tslib@^1.14.1, tslib@^1.8.1, tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -tslib@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - 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.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.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.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.1, type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.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.yarnpkg.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.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.0, type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -typedarray-dts@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typedarray-dts/-/typedarray-dts-1.0.0.tgz#9dec9811386dbfba964c295c2606cf9a6b982d06" - integrity sha512-Ka0DBegjuV9IPYFT1h0Qqk5U4pccebNIJCGl8C5uU7xtOs+jpJvKGAY4fHGK25hTmXZOEUl9Cnsg5cS6K/b5DA== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript-memoize@^1.0.0-alpha.3: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typescript-memoize/-/typescript-memoize-1.0.1.tgz#0a8199aa28f6fe18517f6e9308ef7bfbe9a98d59" - integrity sha512-oJNge1qUrOK37d5Y6Ly2txKeuelYVsFtNF6U9kXIN7juudcQaHJQg2MxLOy0CqtkW65rVDYuTCOjnSIVPd8z3w== - -typescript@^4.2.4, typescript@^4.3.2: - version "4.5.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8" - integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg== - -typical@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" - integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== - -typical@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" - integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== - -uglify-js@^3.1.4: - version "3.14.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.3.tgz#c0f25dfea1e8e5323eccf59610be08b6043c15cf" - integrity sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g== - -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -universalify@^0.1.0, universalify@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -upath2@^3.1.10: - version "3.1.10" - resolved "https://registry.yarnpkg.com/upath2/-/upath2-3.1.10.tgz#bd3de76523946102d06d00d4b3723e3a6ff753f6" - integrity sha512-7ph3GzTaVbQX+oIoMsGtM+9BAWQr+6Mn28TJKPu28+yGpZ+J4am590CPDBlDG0zyuo9T9T7o21ciqNzwIp/q0A== - dependencies: - lodash "^4.17.21" - path-is-network-drive "^1.0.10" - path-strip-sep "^1.0.7" - tslib "^2.3.1" - -upath@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" - integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-join@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" - integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== - -urlgrey@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/urlgrey/-/urlgrey-1.0.0.tgz#72d2f904482d0b602e3c7fa599343d699bbe1017" - integrity sha512-hJfIzMPJmI9IlLkby8QrsCykQ+SXDeO2W5Q9QTW3QpqZVTx4a/K7p8/5q+/isD8vsbVaFgql/gvAoQCRQ2Cb5w== - dependencies: - fast-url-parser "^1.1.3" - -user-home@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" - integrity sha1-nHC/2Babwdy/SGBODwS4tJzenp8= - dependencies: - os-homedir "^1.0.0" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -uuid@^3.3.3: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.0.0, uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -v8-to-istanbul@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz#0aeb763894f1a0a1676adf8a8b7612a38902446c" - integrity sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= - dependencies: - builtins "^1.0.3" - -validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== - dependencies: - builtins "^5.0.0" - -vlq@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" - integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== - -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.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-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -wait-on@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-5.3.0.tgz#584e17d4b3fe7b46ac2b9f8e5e102c005c2776c7" - integrity sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg== - dependencies: - axios "^0.21.1" - joi "^17.3.0" - lodash "^4.17.21" - minimist "^1.2.5" - rxjs "^6.6.3" - -wait-port@^0.2.9: - version "0.2.9" - resolved "https://registry.yarnpkg.com/wait-port/-/wait-port-0.2.9.tgz#3905cf271b5dbe37a85c03b85b418b81cb24ee55" - integrity sha512-hQ/cVKsNqGZ/UbZB/oakOGFqic00YAMM5/PEj3Bt4vKarv2jWIWzDbqlwT94qMs/exAQAsvMOq99sZblV92zxQ== - dependencies: - chalk "^2.4.2" - commander "^3.0.2" - debug "^4.1.1" - -walk-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" - integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== - -walker@^1.0.7: - 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" - -wcwidth@^1.0.0, wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -web-streams-polyfill@^3.0.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz#a6b74026b38e4885869fb5c589e90b95ccfc7965" - integrity sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.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.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -whatwg-url@^8.0.0, whatwg-url@^8.4.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.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.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.12: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -word-wrap@^1.2.3, word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wordwrapjs@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" - integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== - dependencies: - reduce-flatten "^2.0.0" - typical "^5.2.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^2.4.2: - version "2.4.3" - resolved "https://registry.yarnpkg.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@^3.0.0, write-file-atomic@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-file-atomic@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" - integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -write-json-file@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.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" - -write-json-file@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-4.3.0.tgz#908493d6fd23225344af324016e4ca8f702dd12d" - integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ== - dependencies: - detect-indent "^6.0.0" - graceful-fs "^4.1.15" - is-plain-obj "^2.0.0" - make-dir "^3.0.0" - sort-keys "^4.0.0" - write-file-atomic "^3.0.0" - -write-pkg@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.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@^7.4.6: - version "7.5.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" - integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== - -xcase@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/xcase/-/xcase-2.0.1.tgz#c7fa72caa0f440db78fd5673432038ac984450b9" - integrity sha1-x/pyyqD0QNt4/VZzQyA4rJhEULk= - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yaml@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" - integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^15.0.1, yargs@^15.0.2: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + version: 1.0.1 + resolution: "get-param-names@https://github.com/jdalrymple/get-param-names.git#commit=ce58f9269c0ca1798326d07b4043e73451af8fc1" + dependencies: + strip-json-comments: ^3.0.1 + checksum: 836d00391489d136c0d7bd42b86b754d9d55ef77152bc4c49125ce14702b2f4c8ab21bb68926d716e0348155a5f06ef299dedd8be2e8823b0838242d40f695f0 + languageName: node + linkType: hard + +"get-pkg-repo@npm:^4.0.0": + version: 4.2.1 + resolution: "get-pkg-repo@npm:4.2.1" + dependencies: + "@hutson/parse-repository-url": ^3.0.0 + hosted-git-info: ^4.0.0 + through2: ^2.0.0 + yargs: ^16.2.0 + bin: + get-pkg-repo: src/cli.js + checksum: 5abf169137665e45b09a857b33ad2fdcf2f4a09f0ecbd0ebdd789a7ce78c39186a21f58621127eb724d2d4a3a7ee8e6bd4ac7715efda01ad5200665afc218e0d + languageName: node + linkType: hard + +"get-port@npm:5.1.1": + version: 5.1.1 + resolution: "get-port@npm:5.1.1" + checksum: 0162663ffe5c09e748cd79d97b74cd70e5a5c84b760a475ce5767b357fb2a57cb821cee412d646aa8a156ed39b78aab88974eddaa9e5ee926173c036c0713787 + languageName: node + linkType: hard + +"get-stream@npm:6.0.0": + version: 6.0.0 + resolution: "get-stream@npm:6.0.0" + checksum: 587e6a93127f9991b494a566f4971cf7a2645dfa78034818143480a80587027bdd8826cdcf80d0eff4a4a19de0d231d157280f24789fc9cc31492e1dcc1290cf + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.0.0": + version: 1.0.0 + resolution: "get-symbol-description@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 9ceff8fe968f9270a37a1f73bf3f1f7bda69ca80f4f80850670e0e7b9444ff99323f7ac52f96567f8b5f5fbe7ac717a0d81d3407c7313e82810c6199446a5247 + languageName: node + linkType: hard + +"get-tsconfig@npm:^4.4.0": + version: 4.4.0 + resolution: "get-tsconfig@npm:4.4.0" + checksum: e193558b4f0c84c81ae9688cf5b9950dc0b341e44f91b002713fd0c37cfb73108e1cd9998ed540bcc423f193fde32cc58a15e99dd469f5158a2eb4a148611176 + languageName: node + linkType: hard + +"get-tsconfig@npm:^4.5.0": + version: 4.5.0 + resolution: "get-tsconfig@npm:4.5.0" + checksum: 687ee2bd69a5a07db2e2edeb4d6c41c3debb38f6281a66beb643e3f5b520252e27fcbbb5702bdd9a5f05dcf8c1d2e0150a4d8a960ad75cbdea74e06a51e91b02 + languageName: node + linkType: hard + +"git-raw-commits@npm:^2.0.8": + version: 2.0.11 + resolution: "git-raw-commits@npm:2.0.11" + dependencies: + dargs: ^7.0.0 + lodash: ^4.17.15 + meow: ^8.0.0 + split2: ^3.0.0 + through2: ^4.0.0 + bin: + git-raw-commits: cli.js + checksum: c178af43633684106179793b6e3473e1d2bb50bb41d04e2e285ea4eef342ca4090fee6bc8a737552fde879d22346c90de5c49f18c719a0f38d4c934f258a0f79 + languageName: node + linkType: hard + +"git-remote-origin-url@npm:^2.0.0": + version: 2.0.0 + resolution: "git-remote-origin-url@npm:2.0.0" + dependencies: + gitconfiglocal: ^1.0.0 + pify: ^2.3.0 + checksum: 85263a09c044b5f4fe2acc45cbb3c5331ab2bd4484bb53dfe7f3dd593a4bf90a9786a2e00b9884524331f50b3da18e8c924f01c2944087fc7f342282c4437b73 + languageName: node + linkType: hard + +"git-semver-tags@npm:^4.1.1": + version: 4.1.1 + resolution: "git-semver-tags@npm:4.1.1" + dependencies: + meow: ^8.0.0 + semver: ^6.0.0 + bin: + git-semver-tags: cli.js + checksum: e16d02a515c0f88289a28b5bf59bf42c0dc053765922d3b617ae4b50546bd4f74a25bf3ad53b91cb6c1159319a2e92533b160c573b856c2629125c8b26b3b0e3 + languageName: node + linkType: hard + +"git-up@npm:^7.0.0": + version: 7.0.0 + resolution: "git-up@npm:7.0.0" + dependencies: + is-ssh: ^1.4.0 + parse-url: ^8.1.0 + checksum: 2faadbab51e94d2ffb220e426e950087cc02c15d664e673bd5d1f734cfa8196fed8b19493f7bf28fe216d087d10e22a7fd9b63687e0ba7d24f0ddcfb0a266d6e + languageName: node + linkType: hard + +"git-url-parse@npm:13.1.0": + version: 13.1.0 + resolution: "git-url-parse@npm:13.1.0" + dependencies: + git-up: ^7.0.0 + checksum: 212a9b0343e9199998b6a532efe2014476a7a1283af393663ca49ac28d4768929aad16d3322e2685236065ee394dbc93e7aa63a48956531e984c56d8b5edb54d + languageName: node + linkType: hard + +"gitbeaker@workspace:.": + version: 0.0.0-use.local + resolution: "gitbeaker@workspace:." + dependencies: + "@auto-it/all-contributors": ^10.46.0 + "@auto-it/core": ^10.46.0 + "@auto-it/first-time-contributor": ^10.46.0 + "@auto-it/omit-commits": ^10.46.0 + "@auto-it/omit-release-notes": ^10.46.0 + "@auto-it/released": ^10.46.0 + "@swc/core": ^1.3.55 + "@swc/jest": ^0.2.26 + "@types/jest": ^29.5.1 + "@typescript-eslint/eslint-plugin": ^5.59.1 + "@typescript-eslint/parser": ^5.59.1 + auto: ^10.46.0 + eslint: ^8.39.0 + eslint-config-airbnb-base: ^15.0.0 + eslint-config-prettier: ^8.8.0 + eslint-import-resolver-typescript: ^3.5.5 + eslint-plugin-import: ^2.27.5 + eslint-plugin-jest: ^27.2.1 + eslint-plugin-jest-extended: ^2.0.0 + eslint-plugin-prettier: ^4.2.1 + husky: ^8.0.3 + jest: ^29.5.0 + jest-extended: ^3.2.4 + jest-junit: ^15.0.0 + lerna: ^6.6.1 + lint-staged: ^13.2.1 + nx: 15.8.6 + prettier: ^2.8.8 + types: ^0.1.1 + typescript: ^4.9.5 + languageName: unknown + linkType: soft + +"gitconfiglocal@npm:^1.0.0": + version: 1.0.0 + resolution: "gitconfiglocal@npm:1.0.0" + dependencies: + ini: ^1.3.2 + checksum: e6d2764c15bbab6d1d1000d1181bb907f6b3796bb04f63614dba571b18369e0ecb1beaf27ce8da5b24307ef607e3a5f262a67cb9575510b9446aac697d421beb + languageName: node + linkType: hard + +"gitlog@npm:^4.0.3": + version: 4.0.4 + resolution: "gitlog@npm:4.0.4" + dependencies: + debug: ^4.1.1 + tslib: ^1.14.1 + checksum: 16c07800b8e04ab556651ec396d39e48fba7464d79c7c0a40f81661d7cfbc37babfde1a0ebad7d0eaa24834b85043e07b1cfb8b9a983a73279566732fdd4da90 + languageName: node + linkType: hard + +"glob-parent@npm:5.1.2, glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + +"glob@npm:7.1.4": + version: 7.1.4 + resolution: "glob@npm:7.1.4" + 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 + checksum: f52480fc82b1e66e52990f0f2e7306447d12294c83fbbee0395e761ad1178172012a7cc0673dbf4810baac400fc09bf34484c08b5778c216403fd823db281716 + languageName: node + linkType: hard + +"glob@npm:7.1.6": + version: 7.1.6 + resolution: "glob@npm:7.1.6" + 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 + checksum: 351d549dd90553b87c2d3f90ce11aed9e1093c74130440e7ae0592e11bbcd2ce7f0ebb8ba6bfe63aaf9b62166a7f4c80cb84490ae5d78408bb2572bf7d4ee0a6 + languageName: node + linkType: hard + +"glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.1.1 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"glob@npm:^8.0.1": + version: 8.1.0 + resolution: "glob@npm:8.1.0" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^5.0.1 + once: ^1.3.0 + checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47 + languageName: node + linkType: hard + +"glob@npm:^9.2.0, glob@npm:^9.3.0, glob@npm:^9.3.1": + version: 9.3.2 + resolution: "glob@npm:9.3.2" + dependencies: + fs.realpath: ^1.0.0 + minimatch: ^7.4.1 + minipass: ^4.2.4 + path-scurry: ^1.6.1 + checksum: f3d188e9f70e24fa729a63ca197bcdb36d838677abec1fb9bbfe4b7620063bf90dc0f8d195203d632abfdfa049fad0edf22f93c60076de67cef20c23bcbfaee8 + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e + languageName: node + linkType: hard + +"globals@npm:^13.19.0": + version: 13.20.0 + resolution: "globals@npm:13.20.0" + dependencies: + type-fest: ^0.20.2 + checksum: ad1ecf914bd051325faad281d02ea2c0b1df5d01bd94d368dcc5513340eac41d14b3c61af325768e3c7f8d44576e72780ec0b6f2d366121f8eec6e03c3a3b97a + languageName: node + linkType: hard + +"globalthis@npm:^1.0.3": + version: 1.0.3 + resolution: "globalthis@npm:1.0.3" + dependencies: + define-properties: ^1.1.3 + checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 + languageName: node + linkType: hard + +"globalyzer@npm:0.1.0": + version: 0.1.0 + resolution: "globalyzer@npm:0.1.0" + checksum: 419a0f95ba542534fac0842964d31b3dc2936a479b2b1a8a62bad7e8b61054faa9b0a06ad9f2e12593396b9b2621cac93358d9b3071d33723fb1778608d358a1 + languageName: node + linkType: hard + +"globby@npm:11.1.0, globby@npm:^11.0.1, globby@npm:^11.0.3, globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: ^2.1.0 + dir-glob: ^3.0.1 + fast-glob: ^3.2.9 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^3.0.0 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + languageName: node + linkType: hard + +"globby@npm:^13.1.3": + version: 13.1.3 + resolution: "globby@npm:13.1.3" + dependencies: + dir-glob: ^3.0.1 + fast-glob: ^3.2.11 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^4.0.0 + checksum: 93f06e02002cdf368f7e3d55bd59e7b00784c7cc8fe92c7ee5082cc7171ff6109fda45e1c97a80bb48bc811dedaf7843c7c9186f5f84bde4883ab630e13c43df + languageName: node + linkType: hard + +"globby@npm:^7.1.1": + version: 7.1.1 + resolution: "globby@npm:7.1.1" + dependencies: + array-union: ^1.0.1 + dir-glob: ^2.0.0 + glob: ^7.1.2 + ignore: ^3.3.5 + pify: ^3.0.0 + slash: ^1.0.0 + checksum: f0eba08a08ae7c98149a4411661c0bf08c4717d81e6f355cf624fb01880b249737eb8e951bf86124cb3af8ea1c793c0a9d363ed5cdec99bb2c6b68f8a323025f + languageName: node + linkType: hard + +"globrex@npm:^0.1.2": + version: 0.1.2 + resolution: "globrex@npm:0.1.2" + checksum: adca162494a176ce9ecf4dd232f7b802956bb1966b37f60c15e49d2e7d961b66c60826366dc2649093cad5a0d69970cfa8875bd1695b5a1a2f33dcd2aa88da3c + languageName: node + linkType: hard + +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + +"graceful-fs@npm:4.2.10": + version: 4.2.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"grapheme-splitter@npm:^1.0.4": + version: 1.0.4 + resolution: "grapheme-splitter@npm:1.0.4" + checksum: 0c22ec54dee1b05cd480f78cf14f732cb5b108edc073572c4ec205df4cd63f30f8db8025afc5debc8835a8ddeacf648a1c7992fe3dcd6ad38f9a476d84906620 + languageName: node + linkType: hard + +"handlebars@npm:^4.7.7": + version: 4.7.7 + resolution: "handlebars@npm:4.7.7" + dependencies: + minimist: ^1.2.5 + neo-async: ^2.6.0 + source-map: ^0.6.1 + uglify-js: ^3.1.4 + wordwrap: ^1.0.0 + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: 1e79a43f5e18d15742977cb987923eab3e2a8f44f2d9d340982bcb69e1735ed049226e534d7c1074eaddaf37e4fb4f471a8adb71cddd5bc8cf3f894241df5cee + languageName: node + linkType: hard + +"hard-rejection@npm:^2.1.0": + version: 2.1.0 + resolution: "hard-rejection@npm:2.1.0" + checksum: 7baaf80a0c7fff4ca79687b4060113f1529589852152fa935e6787a2bc96211e784ad4588fb3048136ff8ffc9dfcf3ae385314a5b24db32de20bea0d1597f9dc + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0": + version: 1.0.0 + resolution: "has-property-descriptors@npm:1.0.0" + dependencies: + get-intrinsic: ^1.1.1 + checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "has-proto@npm:1.0.1" + checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.0": + version: 1.0.0 + resolution: "has-tostringtag@npm:1.0.0" + dependencies: + has-symbols: ^1.0.2 + checksum: cc12eb28cb6ae22369ebaad3a8ab0799ed61270991be88f208d508076a1e99abe4198c965935ce85ea90b60c94ddda73693b0920b58e7ead048b4a391b502c1c + languageName: node + linkType: hard + +"has-unicode@npm:2.0.1, has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 + languageName: node + linkType: hard + +"has@npm:^1.0.3": + version: 1.0.3 + resolution: "has@npm:1.0.3" + dependencies: + function-bind: ^1.1.1 + checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd + languageName: node + linkType: hard + +"hosted-git-info@npm:^3.0.6": + version: 3.0.8 + resolution: "hosted-git-info@npm:3.0.8" + dependencies: + lru-cache: ^6.0.0 + checksum: 5af7a69581acb84206a7b8e009f4680c36396814e92c8a83973dfb3b87e44e44d1f7b8eaf3e4a953686482770ecb78406a4ce4666bfdfe447762434127871d8d + languageName: node + linkType: hard + +"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": + version: 4.1.0 + resolution: "hosted-git-info@npm:4.1.0" + dependencies: + lru-cache: ^6.0.0 + checksum: c3f87b3c2f7eb8c2748c8f49c0c2517c9a95f35d26f4bf54b2a8cba05d2e668f3753548b6ea366b18ec8dadb4e12066e19fa382a01496b0ffa0497eb23cbe461 + languageName: node + linkType: hard + +"hosted-git-info@npm:^5.0.0": + version: 5.2.1 + resolution: "hosted-git-info@npm:5.2.1" + dependencies: + lru-cache: ^7.5.1 + checksum: fa35df185224adfd69141f3b2f8cc31f50e705a5ebb415ccfbfd055c5b94bd08d3e658edf1edad9e2ac7d81831ac7cf261f5d219b3adc8d744fb8cdacaaf2ead + languageName: node + linkType: hard + +"hosted-git-info@npm:^6.0.0, hosted-git-info@npm:^6.1.1": + version: 6.1.1 + resolution: "hosted-git-info@npm:6.1.1" + dependencies: + lru-cache: ^7.5.1 + checksum: fcd3ca2eaa05f3201425ccbb8aa47f88cdda4a3a6d79453f8e269f7171356278bd1db08f059d8439eb5eaa91c6a8a20800fc49cca6e9e4e899b202a332d5ba6b + languageName: node + linkType: hard + +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 + languageName: node + linkType: hard + +"human-signals@npm:^4.3.0": + version: 4.3.1 + resolution: "human-signals@npm:4.3.1" + checksum: 6f12958df3f21b6fdaf02d90896c271df00636a31e2bbea05bddf817a35c66b38a6fdac5863e2df85bd52f34958997f1f50350ff97249e1dff8452865d5235d1 + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: ^2.0.0 + checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + languageName: node + linkType: hard + +"husky@npm:^8.0.3": + version: 8.0.3 + resolution: "husky@npm:8.0.3" + bin: + husky: lib/bin.js + checksum: 837bc7e4413e58c1f2946d38fb050f5d7324c6f16b0fd66411ffce5703b294bd21429e8ba58711cd331951ee86ed529c5be4f76805959ff668a337dbfa82a1b0 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: ">= 2.1.2 < 3" + checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e + languageName: node + linkType: hard + +"ignore-walk@npm:^5.0.1": + version: 5.0.1 + resolution: "ignore-walk@npm:5.0.1" + dependencies: + minimatch: ^5.0.1 + checksum: 1a4ef35174653a1aa6faab3d9f8781269166536aee36a04946f6e2b319b2475c1903a75ed42f04219274128242f49d0a10e20c4354ee60d9548e97031451150b + languageName: node + linkType: hard + +"ignore-walk@npm:^6.0.0": + version: 6.0.2 + resolution: "ignore-walk@npm:6.0.2" + dependencies: + minimatch: ^7.4.2 + checksum: 99dda4d6977cf47b359ae17d62f4abfb9273a2507d14d38db7a29abcd8385ec45cc1d8cf00e73695f98ef4001e7439a4f5b619a3d4055a37bd953288be01b485 + languageName: node + linkType: hard + +"ignore@npm:^3.3.5": + version: 3.3.10 + resolution: "ignore@npm:3.3.10" + checksum: 23e8cc776e367b56615ab21b78decf973a35dfca5522b39d9b47643d8168473b0d1f18dd1321a1bab466a12ea11a2411903f3b21644f4d5461ee0711ec8678bd + languageName: node + linkType: hard + +"ignore@npm:^5.0.4, ignore@npm:^5.2.0": + version: 5.2.4 + resolution: "ignore@npm:5.2.4" + checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef + languageName: node + linkType: hard + +"import-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "import-cwd@npm:3.0.0" + dependencies: + import-from: ^3.0.0 + checksum: f2c4230e8389605154a390124381f9136811306ae4ba1c8017398c3c6926bc5cf75cf89350372b4938f79792ea373776b4efabd27506440ec301ce34c4e867eb + languageName: node + linkType: hard + +"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + languageName: node + linkType: hard + +"import-from@npm:^3.0.0": + version: 3.0.0 + resolution: "import-from@npm:3.0.0" + dependencies: + resolve-from: ^5.0.0 + checksum: 5040a7400e77e41e2c3bb6b1b123b52a15a284de1ffc03d605879942c00e3a87428499d8d031d554646108a0f77652549411167f6a7788e4fc7027eefccf3356 + languageName: node + linkType: hard + +"import-local@npm:^3.0.2": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: ^4.2.0 + resolve-cwd: ^3.0.0 + bin: + import-local-fixture: fixtures/cli.js + checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"infer-owner@npm:^1.0.4": + version: 1.0.4 + resolution: "infer-owner@npm:1.0.4" + checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"ini@npm:^1.3.2, ini@npm:^1.3.4, ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 + languageName: node + linkType: hard + +"init-package-json@npm:3.0.2, init-package-json@npm:^3.0.2": + version: 3.0.2 + resolution: "init-package-json@npm:3.0.2" + dependencies: + npm-package-arg: ^9.0.1 + promzard: ^0.3.0 + read: ^1.0.7 + read-package-json: ^5.0.0 + semver: ^7.3.5 + validate-npm-package-license: ^3.0.4 + validate-npm-package-name: ^4.0.0 + checksum: e027f60e4a1564809eee790d5a842341c784888fd7c7ace5f9a34ea76224c0adb6f3ab3bf205cf1c9c877a6e1a76c68b00847a984139f60813125d7b42a23a13 + languageName: node + linkType: hard + +"inquirer@npm:8.2.4": + version: 8.2.4 + resolution: "inquirer@npm:8.2.4" + dependencies: + ansi-escapes: ^4.2.1 + chalk: ^4.1.1 + cli-cursor: ^3.1.0 + cli-width: ^3.0.0 + external-editor: ^3.0.3 + figures: ^3.0.0 + lodash: ^4.17.21 + mute-stream: 0.0.8 + ora: ^5.4.1 + run-async: ^2.4.0 + rxjs: ^7.5.5 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + through: ^2.3.6 + wrap-ansi: ^7.0.0 + checksum: dfcb6529d3af443dfea2241cb471508091b51f5121a088fdb8728b23ec9b349ef0a5e13a0ef2c8e19457b0bed22f7cbbcd561f7a4529d084c562a58c605e2655 + languageName: node + linkType: hard + +"inquirer@npm:^7.0.4": + version: 7.3.3 + resolution: "inquirer@npm:7.3.3" + dependencies: + ansi-escapes: ^4.2.1 + chalk: ^4.1.0 + cli-cursor: ^3.1.0 + cli-width: ^3.0.0 + external-editor: ^3.0.3 + figures: ^3.0.0 + lodash: ^4.17.19 + mute-stream: 0.0.8 + run-async: ^2.4.0 + rxjs: ^6.6.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + through: ^2.3.6 + checksum: 4d387fc1eb6126acbd58cbdb9ad99d2887d181df86ab0c2b9abdf734e751093e2d5882c2b6dc7144d9ab16b7ab30a78a1d7f01fb6a2850a44aeb175d1e3f8778 + languageName: node + linkType: hard + +"inquirer@npm:^8.2.4": + version: 8.2.5 + resolution: "inquirer@npm:8.2.5" + dependencies: + ansi-escapes: ^4.2.1 + chalk: ^4.1.1 + cli-cursor: ^3.1.0 + cli-width: ^3.0.0 + external-editor: ^3.0.3 + figures: ^3.0.0 + lodash: ^4.17.21 + mute-stream: 0.0.8 + ora: ^5.4.1 + run-async: ^2.4.0 + rxjs: ^7.5.5 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + through: ^2.3.6 + wrap-ansi: ^7.0.0 + checksum: f13ee4c444187786fb393609dedf6b30870115a57b603f2e6424f29a99abc13446fd45ee22461c33c9c40a92a60a8df62d0d6b25d74fc6676fa4cb211de55b55 + languageName: node + linkType: hard + +"internal-slot@npm:^1.0.5": + version: 1.0.5 + resolution: "internal-slot@npm:1.0.5" + dependencies: + get-intrinsic: ^1.2.0 + has: ^1.0.3 + side-channel: ^1.0.4 + checksum: 97e84046bf9e7574d0956bd98d7162313ce7057883b6db6c5c7b5e5f05688864b0978ba07610c726d15d66544ffe4b1050107d93f8a39ebc59b15d8b429b497a + languageName: node + linkType: hard + +"io-ts@npm:^2.1.2": + version: 2.2.20 + resolution: "io-ts@npm:2.2.20" + peerDependencies: + fp-ts: ^2.5.0 + checksum: 72517bf72ab1ad61b81960cb37f46e7a9f6dc84235b7d9b62f346ca84120dd89134b652fc3a0b9751129331084fd3e059349561bb96587d91ba7b40985fe7aac + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": + version: 3.0.2 + resolution: "is-array-buffer@npm:3.0.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.0 + is-typed-array: ^1.1.10 + checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f + languageName: node + linkType: hard + +"is-bigint@npm:^1.0.1": + version: 1.0.4 + resolution: "is-bigint@npm:1.0.4" + dependencies: + has-bigints: ^1.0.1 + checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: ^2.0.0 + checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.1.0": + version: 1.1.2 + resolution: "is-boolean-object@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac + languageName: node + linkType: hard + +"is-ci@npm:2.0.0": + version: 2.0.0 + resolution: "is-ci@npm:2.0.0" + dependencies: + ci-info: ^2.0.0 + bin: + is-ci: bin.js + checksum: 77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 + languageName: node + linkType: hard + +"is-core-module@npm:^2.11.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": + version: 2.11.0 + resolution: "is-core-module@npm:2.11.0" + dependencies: + has: ^1.0.3 + checksum: f96fd490c6b48eb4f6d10ba815c6ef13f410b0ba6f7eb8577af51697de523e5f2cd9de1c441b51d27251bf0e4aebc936545e33a5d26d5d51f28d25698d4a8bab + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: ^1.0.0 + checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d + languageName: node + linkType: hard + +"is-generator-fn@npm:^2.0.0": + version: 2.1.0 + resolution: "is-generator-fn@npm:2.1.0" + checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-interactive@npm:^1.0.0": + version: 1.0.0 + resolution: "is-interactive@npm:1.0.0" + checksum: 824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.2": + version: 2.0.2 + resolution: "is-negative-zero@npm:2.0.2" + checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a + languageName: node + linkType: hard + +"is-number-object@npm:^1.0.4": + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 + languageName: node + linkType: hard + +"is-path-cwd@npm:^2.2.0": + version: 2.2.0 + resolution: "is-path-cwd@npm:2.2.0" + checksum: 46a840921bb8cc0dc7b5b423a14220e7db338072a4495743a8230533ce78812dc152548c86f4b828411fe98c5451959f07cf841c6a19f611e46600bd699e8048 + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + +"is-plain-obj@npm:^1.0.0, is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: ^3.0.1 + checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca + languageName: node + linkType: hard + +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: e32d27061eef62c0847d303125440a38660517e586f2f3db7c9d179ae5b6674ab0f469d519b2e25c147a1a3bc87156d0d5f4d8821e0ce4a9ee7fe1fcf11ce45c + languageName: node + linkType: hard + +"is-regex@npm:^1.1.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "is-shared-array-buffer@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 9508929cf14fdc1afc9d61d723c6e8d34f5e117f0bffda4d97e7a5d88c3a8681f633a74f8e3ad1fe92d5113f9b921dc5ca44356492079612f9a247efbce7032a + languageName: node + linkType: hard + +"is-ssh@npm:^1.4.0": + version: 1.4.0 + resolution: "is-ssh@npm:1.4.0" + dependencies: + protocols: ^2.0.1 + checksum: 75eaa17b538bee24b661fbeb0f140226ac77e904a6039f787bea418431e2162f1f9c4c4ccad3bd169e036cd701cc631406e8c505d9fa7e20164e74b47f86f40f + languageName: node + linkType: hard + +"is-stream@npm:2.0.0": + version: 2.0.0 + resolution: "is-stream@npm:2.0.0" + checksum: 4dc47738e26bc4f1b3be9070b6b9e39631144f204fc6f87db56961220add87c10a999ba26cf81699f9ef9610426f69cb08a4713feff8deb7d8cadac907826935 + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + languageName: node + linkType: hard + +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 + languageName: node + linkType: hard + +"is-string@npm:^1.0.5, is-string@npm:^1.0.7": + version: 1.0.7 + resolution: "is-string@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" + dependencies: + has-symbols: ^1.0.2 + checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 + languageName: node + linkType: hard + +"is-text-path@npm:^1.0.1": + version: 1.0.1 + resolution: "is-text-path@npm:1.0.1" + dependencies: + text-extensions: ^1.0.0 + checksum: fb5d78752c22b3f73a7c9540768f765ffcfa38c9e421e2b9af869565307fa1ae5e3d3a2ba016a43549742856846566d327da406e94a5846ec838a288b1704fd2 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.9": + version: 1.1.10 + resolution: "is-typed-array@npm:1.1.10" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.0 + checksum: aac6ecb59d4c56a1cdeb69b1f129154ef462bbffe434cb8a8235ca89b42f258b7ae94073c41b3cb7bce37f6a1733ad4499f07882d5d5093a7ba84dfc4ebb8017 + languageName: node + linkType: hard + +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de + languageName: node + linkType: hard + +"is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: ^2.0.0 + checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.0 + resolution: "istanbul-lib-coverage@npm:3.2.0" + checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + 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 + checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.0 + resolution: "istanbul-lib-report@npm:3.0.0" + dependencies: + istanbul-lib-coverage: ^3.0.0 + make-dir: ^3.0.0 + supports-color: ^7.1.0 + checksum: 3f29eb3f53c59b987386e07fe772d24c7f58c6897f34c9d7a296f4000de7ae3de9eb95c3de3df91dc65b134c84dee35c54eee572a56243e8907c48064e34ff1b + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^4.0.0": + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" + dependencies: + debug: ^4.1.1 + istanbul-lib-coverage: ^3.0.0 + source-map: ^0.6.1 + checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.3": + version: 3.1.5 + resolution: "istanbul-reports@npm:3.1.5" + dependencies: + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 + languageName: node + linkType: hard + +"jake@npm:^10.8.5": + version: 10.8.5 + resolution: "jake@npm:10.8.5" + dependencies: + async: ^3.2.3 + chalk: ^4.0.2 + filelist: ^1.0.1 + minimatch: ^3.0.4 + bin: + jake: ./bin/cli.js + checksum: 56c913ecf5a8d74325d0af9bc17a233bad50977438d44864d925bb6c45c946e0fee8c4c1f5fe2225471ef40df5222e943047982717ebff0d624770564d3c46ba + languageName: node + linkType: hard + +"java-properties@npm:^1.0.0": + version: 1.0.2 + resolution: "java-properties@npm:1.0.2" + checksum: 9a086778346e3adbe2395e370f5c779033ed60360055a15e2cead49e3d676d2c73786cf2f6563a1860277dea3dd0a859432e546ed89c03ee08c1f53e31a5d420 + languageName: node + linkType: hard + +"jest-changed-files@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-changed-files@npm:29.5.0" + dependencies: + execa: ^5.0.0 + p-limit: ^3.1.0 + checksum: a67a7cb3c11f8f92bd1b7c79e84f724cbd11a9ad51f3cdadafe3ce7ee3c79ee50dbea128f920f5fddc807e9e4e83f5462143094391feedd959a77dd20ab96cf3 + languageName: node + linkType: hard + +"jest-circus@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-circus@npm:29.5.0" + dependencies: + "@jest/environment": ^29.5.0 + "@jest/expect": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + dedent: ^0.7.0 + is-generator-fn: ^2.0.0 + jest-each: ^29.5.0 + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-runtime: ^29.5.0 + jest-snapshot: ^29.5.0 + jest-util: ^29.5.0 + p-limit: ^3.1.0 + pretty-format: ^29.5.0 + pure-rand: ^6.0.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 44ff5d06acedae6de6c866e20e3b61f83e29ab94cf9f960826e7e667de49c12dd9ab9dffd7fa3b7d1f9688a8b5bfb1ebebadbea69d9ed0d3f66af4a0ff8c2b27 + languageName: node + linkType: hard + +"jest-cli@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-cli@npm:29.5.0" + dependencies: + "@jest/core": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/types": ^29.5.0 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + import-local: ^3.0.2 + jest-config: ^29.5.0 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 + prompts: ^2.0.1 + yargs: ^17.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 39897bbbc0f0d8a6b975ab12fd13887eaa28d92e3dee9e0173a5cb913ae8cc2ae46e090d38c6d723e84d9d6724429cd08685b4e505fa447d31ca615630c7dbba + languageName: node + linkType: hard + +"jest-config@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-config@npm:29.5.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.5.0 + "@jest/types": ^29.5.0 + babel-jest: ^29.5.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.5.0 + jest-environment-node: ^29.5.0 + jest-get-type: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.5.0 + jest-runner: ^29.5.0 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 + micromatch: ^4.0.4 + parse-json: ^5.2.0 + pretty-format: ^29.5.0 + slash: ^3.0.0 + strip-json-comments: ^3.1.1 + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: c37c4dab964c54ab293d4e302d40b09687037ac9d00b88348ec42366970747feeaf265e12e3750cd3660b40c518d4031335eda11ac10b70b10e60797ebbd4b9c + languageName: node + linkType: hard + +"jest-diff@npm:^29.0.0, jest-diff@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-diff@npm:29.5.0" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.4.3 + jest-get-type: ^29.4.3 + pretty-format: ^29.5.0 + checksum: dfd0f4a299b5d127779c76b40106c37854c89c3e0785098c717d52822d6620d227f6234c3a9291df204d619e799e3654159213bf93220f79c8e92a55475a3d39 + languageName: node + linkType: hard + +"jest-docblock@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-docblock@npm:29.4.3" + dependencies: + detect-newline: ^3.0.0 + checksum: e0e9df1485bb8926e5b33478cdf84b3387d9caf3658e7dc1eaa6dc34cb93dea0d2d74797f6e940f0233a88f3dadd60957f2288eb8f95506361f85b84bf8661df + languageName: node + linkType: hard + +"jest-each@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-each@npm:29.5.0" + dependencies: + "@jest/types": ^29.5.0 + chalk: ^4.0.0 + jest-get-type: ^29.4.3 + jest-util: ^29.5.0 + pretty-format: ^29.5.0 + checksum: b8b297534d25834c5d4e31e4c687359787b1e402519e42664eb704cc3a12a7a91a017565a75acb02e8cf9afd3f4eef3350bd785276bec0900184641b765ff7a5 + languageName: node + linkType: hard + +"jest-environment-node@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-environment-node@npm:29.5.0" + dependencies: + "@jest/environment": ^29.5.0 + "@jest/fake-timers": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/node": "*" + jest-mock: ^29.5.0 + jest-util: ^29.5.0 + checksum: 57981911cc20a4219b0da9e22b2e3c9f31b505e43f78e61c899e3227ded455ce1a3a9483842c69cfa4532f02cfb536ae0995bf245f9211608edacfc1e478d411 + languageName: node + linkType: hard + +"jest-extended@npm:^3.2.4": + version: 3.2.4 + resolution: "jest-extended@npm:3.2.4" + dependencies: + jest-diff: ^29.0.0 + jest-get-type: ^29.0.0 + peerDependencies: + jest: ">=27.2.5" + peerDependenciesMeta: + jest: + optional: true + checksum: 16e4f300d9c5bf110f7f3422e49e06c968a99a44cede2b2821ddd480c33b3d9cd4dc58035b2f022e6018247da8f887295d6c2499647675dedb6e305142604e7d + languageName: node + linkType: hard + +"jest-get-type@npm:^29.0.0, jest-get-type@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-get-type@npm:29.4.3" + checksum: 6ac7f2dde1c65e292e4355b6c63b3a4897d7e92cb4c8afcf6d397f2682f8080e094c8b0b68205a74d269882ec06bf696a9de6cd3e1b7333531e5ed7b112605ce + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-haste-map@npm:29.5.0" + dependencies: + "@jest/types": ^29.5.0 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.4.3 + jest-util: ^29.5.0 + jest-worker: ^29.5.0 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: 3828ff7783f168e34be2c63887f82a01634261f605dcae062d83f979a61c37739e21b9607ecb962256aea3fbe5a530a1acee062d0026fcb47c607c12796cf3b7 + languageName: node + linkType: hard + +"jest-junit@npm:^15.0.0": + version: 15.0.0 + resolution: "jest-junit@npm:15.0.0" + dependencies: + mkdirp: ^1.0.4 + strip-ansi: ^6.0.1 + uuid: ^8.3.2 + xml: ^1.0.1 + checksum: e8fe4d2f2ab843383ac41820a6fe495739d154ec435cd44ba590b44ec7fd62095676f3eef13f98392f81d4a3727ea58b4f4fad231fe367ac31243952b9ad716f + languageName: node + linkType: hard + +"jest-leak-detector@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-leak-detector@npm:29.5.0" + dependencies: + jest-get-type: ^29.4.3 + pretty-format: ^29.5.0 + checksum: 0fb845da7ac9cdfc9b3b2e35f6f623a41c547d7dc0103ceb0349013459d00de5870b5689a625e7e37f9644934b40e8f1dcdd5422d14d57470600350364676313 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-matcher-utils@npm:29.5.0" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.5.0 + jest-get-type: ^29.4.3 + pretty-format: ^29.5.0 + checksum: 1d3e8c746e484a58ce194e3aad152eff21fd0896e8b8bf3d4ab1a4e2cbfed95fb143646f4ad9fdf6e42212b9e8fc033268b58e011b044a9929df45485deb5ac9 + languageName: node + linkType: hard + +"jest-message-util@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-message-util@npm:29.5.0" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.5.0 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.5.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: daddece6bbf846eb6a2ab9be9f2446e54085bef4e5cecd13d2a538fa9c01cb89d38e564c6b74fd8e12d37ed9eface8a362240ae9f21d68b214590631e7a0d8bf + languageName: node + linkType: hard + +"jest-mock@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-mock@npm:29.5.0" + dependencies: + "@jest/types": ^29.5.0 + "@types/node": "*" + jest-util: ^29.5.0 + checksum: 2a9cf07509948fa8608898c445f04fe4dd6e2049ff431e5531eee028c808d3ba3c67f226ac87b0cf383feaa1055776900d197c895e89783016886ac17a4ff10c + languageName: node + linkType: hard + +"jest-pnp-resolver@npm:^1.2.2": + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 + languageName: node + linkType: hard + +"jest-regex-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-regex-util@npm:29.4.3" + checksum: 96fc7fc28cd4dd73a63c13a526202c4bd8b351d4e5b68b1a2a2c88da3308c2a16e26feaa593083eb0bac38cca1aa9dd05025412e7de013ba963fb8e66af22b8a + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-resolve-dependencies@npm:29.5.0" + dependencies: + jest-regex-util: ^29.4.3 + jest-snapshot: ^29.5.0 + checksum: 479d2e5365d58fe23f2b87001e2e0adcbffe0147700e85abdec8f14b9703b0a55758c1929a9989e3f5d5e954fb88870ea4bfa04783523b664562fcf5f10b0edf + languageName: node + linkType: hard + +"jest-resolve@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-resolve@npm:29.5.0" + dependencies: + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.5.0 + jest-pnp-resolver: ^1.2.2 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 + resolve: ^1.20.0 + resolve.exports: ^2.0.0 + slash: ^3.0.0 + checksum: 9a125f3cf323ceef512089339d35f3ee37f79fe16a831fb6a26773ea6a229b9e490d108fec7af334142e91845b5996de8e7cdd85a4d8d617078737d804e29c8f + languageName: node + linkType: hard + +"jest-runner@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-runner@npm:29.5.0" + dependencies: + "@jest/console": ^29.5.0 + "@jest/environment": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/node": "*" + chalk: ^4.0.0 + emittery: ^0.13.1 + graceful-fs: ^4.2.9 + jest-docblock: ^29.4.3 + jest-environment-node: ^29.5.0 + jest-haste-map: ^29.5.0 + jest-leak-detector: ^29.5.0 + jest-message-util: ^29.5.0 + jest-resolve: ^29.5.0 + jest-runtime: ^29.5.0 + jest-util: ^29.5.0 + jest-watcher: ^29.5.0 + jest-worker: ^29.5.0 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: 437dea69c5dddca22032259787bac74790d5a171c9d804711415f31e5d1abfb64fa52f54a9015bb17a12b858fd0cf3f75ef6f3c9e94255a8596e179f707229c4 + languageName: node + linkType: hard + +"jest-runtime@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-runtime@npm:29.5.0" + dependencies: + "@jest/environment": ^29.5.0 + "@jest/fake-timers": ^29.5.0 + "@jest/globals": ^29.5.0 + "@jest/source-map": ^29.4.3 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 + "@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.5.0 + jest-message-util: ^29.5.0 + jest-mock: ^29.5.0 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.5.0 + jest-snapshot: ^29.5.0 + jest-util: ^29.5.0 + slash: ^3.0.0 + strip-bom: ^4.0.0 + checksum: 7af27bd9d54cf1c5735404cf8d76c6509d5610b1ec0106a21baa815c1aff15d774ce534ac2834bc440dccfe6348bae1885fd9a806f23a94ddafdc0f5bae4b09d + languageName: node + linkType: hard + +"jest-snapshot@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-snapshot@npm:29.5.0" + 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/traverse": ^7.7.2 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/babel__traverse": ^7.0.6 + "@types/prettier": ^2.1.5 + babel-preset-current-node-syntax: ^1.0.0 + chalk: ^4.0.0 + expect: ^29.5.0 + graceful-fs: ^4.2.9 + jest-diff: ^29.5.0 + jest-get-type: ^29.4.3 + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 + natural-compare: ^1.4.0 + pretty-format: ^29.5.0 + semver: ^7.3.5 + checksum: fe5df54122ed10eed625de6416a45bc4958d5062b018f05b152bf9785ab7f355dcd55e40cf5da63895bf8278f8d7b2bb4059b2cfbfdee18f509d455d37d8aa2b + languageName: node + linkType: hard + +"jest-util@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-util@npm:29.5.0" + dependencies: + "@jest/types": ^29.5.0 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: fd9212950d34d2ecad8c990dda0d8ea59a8a554b0c188b53ea5d6c4a0829a64f2e1d49e6e85e812014933d17426d7136da4785f9cf76fff1799de51b88bc85d3 + languageName: node + linkType: hard + +"jest-validate@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-validate@npm:29.5.0" + dependencies: + "@jest/types": ^29.5.0 + camelcase: ^6.2.0 + chalk: ^4.0.0 + jest-get-type: ^29.4.3 + leven: ^3.1.0 + pretty-format: ^29.5.0 + checksum: 43ca5df7cb75572a254ac3e92fbbe7be6b6a1be898cc1e887a45d55ea003f7a112717d814a674d37f9f18f52d8de40873c8f084f17664ae562736c78dd44c6a1 + languageName: node + linkType: hard + +"jest-watcher@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-watcher@npm:29.5.0" + dependencies: + "@jest/test-result": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + emittery: ^0.13.1 + jest-util: ^29.5.0 + string-length: ^4.0.1 + checksum: 62303ac7bdc7e61a8b4239a239d018f7527739da2b2be6a81a7be25b74ca769f1c43ee8558ce8e72bb857245c46d6e03af331227ffb00a57280abb2a928aa776 + languageName: node + linkType: hard + +"jest-worker@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-worker@npm:29.5.0" + dependencies: + "@types/node": "*" + jest-util: ^29.5.0 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 1151a1ae3602b1ea7c42a8f1efe2b5a7bf927039deaa0827bf978880169899b705744e288f80a63603fb3fc2985e0071234986af7dc2c21c7a64333d8777c7c9 + languageName: node + linkType: hard + +"jest@npm:^29.5.0": + version: 29.5.0 + resolution: "jest@npm:29.5.0" + dependencies: + "@jest/core": ^29.5.0 + "@jest/types": ^29.5.0 + import-local: ^3.0.2 + jest-cli: ^29.5.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: a8ff2eb0f421623412236e23cbe67c638127fffde466cba9606bc0c0553b4c1e5cb116d7e0ef990b5d1712851652c8ee461373b578df50857fe635b94ff455d5 + languageName: node + linkType: hard + +"joycon@npm:^3.0.1": + version: 3.1.1 + resolution: "joycon@npm:3.1.1" + checksum: 8003c9c3fc79c5c7602b1c7e9f7a2df2e9916f046b0dbad862aa589be78c15734d11beb9fe846f5e06138df22cb2ad29961b6a986ba81c4920ce2b15a7f11067 + languageName: node + linkType: hard + +"js-sdsl@npm:^4.1.4": + version: 4.3.0 + resolution: "js-sdsl@npm:4.3.0" + checksum: ce908257cf6909e213af580af3a691a736f5ee8b16315454768f917a682a4ea0c11bde1b241bbfaecedc0eb67b72101b2c2df2ffaed32aed5d539fca816f054e + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + +"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d + languageName: node + linkType: hard + +"json-fixer@npm:^1.5.1": + version: 1.6.15 + resolution: "json-fixer@npm:1.6.15" + dependencies: + "@babel/runtime": ^7.18.9 + chalk: ^4.1.2 + pegjs: ^0.10.0 + checksum: ae805d5155ace57fd588a9ec129efd7324c3ef7f622988c66301eed9380da0acccdd35e9355b307c53051b246e2118d17a40775a2b13f19221574f5f662d4b15 + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: ff2b5ba2a70e88fd97a3cb28c1840144c5ce8fae9cbeeddba15afa333a5c407cf0e42300cd0a2885dbb055227fe68d405070faad941beeffbfde9cf3b2c78c5d + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^3.0.0": + version: 3.0.0 + resolution: "json-parse-even-better-errors@npm:3.0.0" + checksum: f1970b5220c7fa23d888565510752c3d5e863f93668a202fcaa719739fa41485dfc6a1db212f702ebd3c873851cc067aebc2917e3f79763cae2fdb95046f38f3 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 + languageName: node + linkType: hard + +"json-stringify-nice@npm:^1.1.4": + version: 1.1.4 + resolution: "json-stringify-nice@npm:1.1.4" + checksum: 6ddf781148b46857ab04e97f47be05f14c4304b86eb5478369edbeacd070c21c697269964b982fc977e8989d4c59091103b1d9dc291aba40096d6cbb9a392b72 + languageName: node + linkType: hard + +"json-stringify-safe@npm:^5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee + languageName: node + linkType: hard + +"json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" + dependencies: + minimist: ^1.2.0 + bin: + json5: lib/cli.js + checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 + languageName: node + linkType: hard + +"json5@npm:^2.2.2": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + +"jsonc-parser@npm:3.2.0, jsonc-parser@npm:^3.2.0": + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^2.0.0 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + languageName: node + linkType: hard + +"jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": + version: 1.3.1 + resolution: "jsonparse@npm:1.3.1" + checksum: 6514a7be4674ebf407afca0eda3ba284b69b07f9958a8d3113ef1005f7ec610860c312be067e450c569aab8b89635e332cee3696789c750692bb60daba627f4d + languageName: node + linkType: hard + +"just-diff-apply@npm:^5.2.0": + version: 5.5.0 + resolution: "just-diff-apply@npm:5.5.0" + checksum: ed6bbd59781542ccb786bd843038e4591e8390aa788075beb69d358051f68fbeb122bda050b7f42515d51fb64b907d5c7bea694a0543b87b24ce406cfb5f5bfa + languageName: node + linkType: hard + +"just-diff@npm:^6.0.0": + version: 6.0.2 + resolution: "just-diff@npm:6.0.2" + checksum: 1a0c7524f640cb88ab013862733e710f840927834208fd3b85cbc5da2ced97acc75e7dcfe493268ac6a6514c51dd8624d2fd9d057050efba3c02b81a6dcb7ff9 + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 + languageName: node + linkType: hard + +"lerna@npm:^6.6.1": + version: 6.6.1 + resolution: "lerna@npm:6.6.1" + dependencies: + "@lerna/child-process": 6.6.1 + "@lerna/create": 6.6.1 + "@lerna/legacy-package-management": 6.6.1 + "@npmcli/arborist": 6.2.3 + "@npmcli/run-script": 4.1.7 + "@nrwl/devkit": ">=15.5.2 < 16" + "@octokit/plugin-enterprise-rest": 6.0.1 + "@octokit/rest": 19.0.3 + byte-size: 7.0.0 + chalk: 4.1.0 + clone-deep: 4.0.1 + cmd-shim: 5.0.0 + columnify: 1.6.0 + config-chain: 1.1.12 + conventional-changelog-angular: 5.0.12 + conventional-changelog-core: 4.2.4 + conventional-recommended-bump: 6.1.0 + cosmiconfig: 7.0.0 + dedent: 0.7.0 + dot-prop: 6.0.1 + envinfo: ^7.7.4 + execa: 5.0.0 + fs-extra: 9.1.0 + 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.10 + has-unicode: 2.0.1 + import-local: ^3.0.2 + init-package-json: 3.0.2 + inquirer: ^8.2.4 + is-ci: 2.0.0 + is-stream: 2.0.0 + js-yaml: ^4.1.0 + libnpmaccess: 6.0.3 + libnpmpublish: 6.0.4 + load-json-file: 6.2.0 + make-dir: 3.1.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.3 + npmlog: ^6.0.2 + nx: ">=15.5.2 < 16" + 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: 13.6.2 + pify: 5.0.0 + read-cmd-shim: 3.0.0 + read-package-json: 5.0.1 + 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 || ^4 + upath: ^2.0.1 + uuid: 8.3.2 + validate-npm-package-license: 3.0.4 + validate-npm-package-name: 4.0.0 + write-file-atomic: 4.0.1 + write-pkg: 4.0.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + bin: + lerna: dist/cli.js + checksum: 67c7c0975f6dcc2cab8d2b7bd2ddb7c769f88ca55cae7f88153e03b3009c3f3eebc58fe8953b635e04c0cf807f1fa7020c7d272e9f84b1bf1eb8fde9ff701cca + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 + languageName: node + linkType: hard + +"libnpmaccess@npm:6.0.3": + version: 6.0.3 + resolution: "libnpmaccess@npm:6.0.3" + dependencies: + aproba: ^2.0.0 + minipass: ^3.1.1 + npm-package-arg: ^9.0.1 + npm-registry-fetch: ^13.0.0 + checksum: 4a437390d52bd5e6145164210cfab4cdbc824c4f4a62e11cf186cad9c159a7c8f0c1b6e37346db1cc675bcdf1508e92ed64d47ac1a9bcf838a670bb4741a50c9 + languageName: node + linkType: hard + +"libnpmpublish@npm:6.0.4": + version: 6.0.4 + resolution: "libnpmpublish@npm:6.0.4" + dependencies: + normalize-package-data: ^4.0.0 + npm-package-arg: ^9.0.1 + npm-registry-fetch: ^13.0.0 + semver: ^7.3.7 + ssri: ^9.0.0 + checksum: d653e0d9be0b01011c020f8252f480ca68105b56fde575a6c4fda650f6b5ff33a51fda43897ba817d2955579cc096910561e60e26628c59f5ac2d031157551d1 + languageName: node + linkType: hard + +"lilconfig@npm:2.1.0, lilconfig@npm:^2.0.5": + version: 2.1.0 + resolution: "lilconfig@npm:2.1.0" + checksum: 8549bb352b8192375fed4a74694cd61ad293904eee33f9d4866c2192865c44c4eb35d10782966242634e0cbc1e91fe62b1247f148dc5514918e3a966da7ea117 + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + languageName: node + linkType: hard + +"lines-and-columns@npm:~2.0.3": + version: 2.0.3 + resolution: "lines-and-columns@npm:2.0.3" + checksum: 5955363dfd7d3d7c476d002eb47944dbe0310d57959e2112dce004c0dc76cecfd479cf8c098fd479ff344acdf04ee0e82b455462a26492231ac152f6c48d17a1 + languageName: node + linkType: hard + +"lint-staged@npm:^13.2.1": + version: 13.2.1 + resolution: "lint-staged@npm:13.2.1" + dependencies: + chalk: 5.2.0 + cli-truncate: ^3.1.0 + commander: ^10.0.0 + debug: ^4.3.4 + execa: ^7.0.0 + lilconfig: 2.1.0 + listr2: ^5.0.7 + micromatch: ^4.0.5 + normalize-path: ^3.0.0 + object-inspect: ^1.12.3 + pidtree: ^0.6.0 + string-argv: ^0.3.1 + yaml: ^2.2.1 + bin: + lint-staged: bin/lint-staged.js + checksum: 5788d3fe38e69b7f7b7f700284d4e10738978a0916bc77d3f6253c43a030fc4f01f89c09da349fb658f929f3393d8b1e3eaabaac5b604416ebc33476640b51ce + languageName: node + linkType: hard + +"listr2@npm:^5.0.7": + version: 5.0.8 + resolution: "listr2@npm:5.0.8" + dependencies: + cli-truncate: ^2.1.0 + colorette: ^2.0.19 + log-update: ^4.0.0 + p-map: ^4.0.0 + rfdc: ^1.3.0 + rxjs: ^7.8.0 + through: ^2.3.8 + wrap-ansi: ^7.0.0 + peerDependencies: + enquirer: ">= 2.3.0 < 3" + peerDependenciesMeta: + enquirer: + optional: true + checksum: 8be9f5632627c4df0dc33f452c98d415a49e5f1614650d3cab1b103c33e95f2a7a0e9f3e1e5de00d51bf0b4179acd8ff11b25be77dbe097cf3773c05e728d46c + languageName: node + linkType: hard + +"load-json-file@npm:6.2.0": + version: 6.2.0 + resolution: "load-json-file@npm:6.2.0" + dependencies: + graceful-fs: ^4.1.15 + parse-json: ^5.0.0 + strip-bom: ^4.0.0 + type-fest: ^0.6.0 + checksum: 4429e430ebb99375fc7cd936348e4f7ba729486080ced4272091c1e386a7f5f738ea3337d8ffd4b01c2f5bc3ddde92f2c780045b66838fe98bdb79f901884643 + languageName: node + linkType: hard + +"load-json-file@npm:^4.0.0": + version: 4.0.0 + resolution: "load-json-file@npm:4.0.0" + dependencies: + graceful-fs: ^4.1.2 + parse-json: ^4.0.0 + pify: ^3.0.0 + strip-bom: ^3.0.0 + checksum: 8f5d6d93ba64a9620445ee9bde4d98b1eac32cf6c8c2d20d44abfa41a6945e7969456ab5f1ca2fb06ee32e206c9769a20eec7002fe290de462e8c884b6b8b356 + languageName: node + linkType: hard + +"load-tsconfig@npm:^0.2.3": + version: 0.2.5 + resolution: "load-tsconfig@npm:0.2.5" + checksum: 631740833c4a7157bb7b6eeae6e1afb6a6fac7416b7ba91bd0944d5c5198270af2d68bf8347af3cc2ba821adc4d83ef98f66278bd263bc284c863a09ec441503 + languageName: node + linkType: hard + +"locate-path@npm:^2.0.0": + version: 2.0.0 + resolution: "locate-path@npm:2.0.0" + dependencies: + p-locate: ^2.0.0 + path-exists: ^3.0.0 + checksum: 02d581edbbbb0fa292e28d96b7de36b5b62c2fa8b5a7e82638ebb33afa74284acf022d3b1e9ae10e3ffb7658fbc49163fcd5e76e7d1baaa7801c3e05a81da755 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: ^4.1.0 + checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + +"lodash.camelcase@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.camelcase@npm:4.3.0" + checksum: cb9227612f71b83e42de93eccf1232feeb25e705bdb19ba26c04f91e885bfd3dd5c517c4a97137658190581d3493ea3973072ca010aab7e301046d90740393d1 + languageName: node + linkType: hard + +"lodash.chunk@npm:^4.2.0": + version: 4.2.0 + resolution: "lodash.chunk@npm:4.2.0" + checksum: 6286c6d06814fbeda502164015c42ef53a9194e6ebaac52ec2b41e83344aefe7bc3d94fdfec525adcd2c66cefdf05dc333b6a1128e4de739797342315c17cbc7 + languageName: node + linkType: hard + +"lodash.get@npm:^4": + version: 4.4.2 + resolution: "lodash.get@npm:4.4.2" + checksum: e403047ddb03181c9d0e92df9556570e2b67e0f0a930fcbbbd779370972368f5568e914f913e93f3b08f6d492abc71e14d4e9b7a18916c31fa04bd2306efe545 + languageName: node + linkType: hard + +"lodash.ismatch@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.ismatch@npm:4.4.0" + checksum: a393917578842705c7fc1a30fb80613d1ac42d20b67eb26a2a6004d6d61ee90b419f9eb320508ddcd608e328d91eeaa2651411727eaa9a12534ed6ccb02fc705 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 + languageName: node + linkType: hard + +"lodash.sortby@npm:^4.7.0": + version: 4.7.0 + resolution: "lodash.sortby@npm:4.7.0" + checksum: db170c9396d29d11fe9a9f25668c4993e0c1331bcb941ddbd48fb76f492e732add7f2a47cfdf8e9d740fa59ac41bbfaf931d268bc72aab3ab49e9f89354d718c + languageName: node + linkType: hard + +"lodash@npm:^4.11.2, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: ^4.1.0 + is-unicode-supported: ^0.1.0 + checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 + languageName: node + linkType: hard + +"log-update@npm:^4.0.0": + version: 4.0.0 + resolution: "log-update@npm:4.0.0" + dependencies: + ansi-escapes: ^4.3.0 + cli-cursor: ^3.1.0 + slice-ansi: ^4.0.0 + wrap-ansi: ^6.2.0 + checksum: ae2f85bbabc1906034154fb7d4c4477c79b3e703d22d78adee8b3862fa913942772e7fa11713e3d96fb46de4e3cabefbf5d0a544344f03b58d3c4bff52aa9eb2 + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.14.1, lru-cache@npm:^7.4.4, lru-cache@npm:^7.5.1, lru-cache@npm:^7.7.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 + languageName: node + linkType: hard + +"make-dir@npm:3.1.0, make-dir@npm:^3.0.0": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: ^6.0.0 + checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 + languageName: node + linkType: hard + +"make-dir@npm:^2.1.0": + version: 2.1.0 + resolution: "make-dir@npm:2.1.0" + dependencies: + pify: ^4.0.1 + semver: ^5.6.0 + checksum: 043548886bfaf1820323c6a2997e6d2fa51ccc2586ac14e6f14634f7458b4db2daf15f8c310e2a0abd3e0cddc64df1890d8fc7263033602c47bb12cbfcf86aab + languageName: node + linkType: hard + +"make-error@npm:^1, make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^10.0.3, make-fetch-happen@npm:^10.0.6": + version: 10.2.1 + resolution: "make-fetch-happen@npm:10.2.1" + 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 + checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c + languageName: node + linkType: hard + +"make-fetch-happen@npm:^11.0.0, make-fetch-happen@npm:^11.0.1": + version: 11.0.3 + resolution: "make-fetch-happen@npm:11.0.3" + dependencies: + agentkeepalive: ^4.2.1 + cacache: ^17.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: ^4.0.0 + minipass-fetch: ^3.0.0 + 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: ^10.0.0 + checksum: f718d6b6945d967fa02ae8c6b1146c6e36335b0f9654c5757fd57211a5bcc13bf1dfbaa0d2fdfe8bdd13f78b0e2aa79b4d4438f824dcf0d2ea74883baae1ae31 + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 + languageName: node + linkType: hard + +"map-obj@npm:^1.0.0": + version: 1.0.1 + resolution: "map-obj@npm:1.0.1" + checksum: 9949e7baec2a336e63b8d4dc71018c117c3ce6e39d2451ccbfd3b8350c547c4f6af331a4cbe1c83193d7c6b786082b6256bde843db90cb7da2a21e8fcc28afed + languageName: node + linkType: hard + +"map-obj@npm:^4.0.0": + version: 4.3.0 + resolution: "map-obj@npm:4.3.0" + checksum: fbc554934d1a27a1910e842bc87b177b1a556609dd803747c85ece420692380827c6ae94a95cce4407c054fa0964be3bf8226f7f2cb2e9eeee432c7c1985684e + languageName: node + linkType: hard + +"meant@npm:^1.0.1": + version: 1.0.3 + resolution: "meant@npm:1.0.3" + checksum: 10d5a8534c51ff4847fa971c364c42e01a4c8a529e186cc1dcff7d667e4ec1383b9c1f8fcc00a4f6e4649f48eff943c6de31353e7212f90e8301517168465723 + languageName: node + linkType: hard + +"meow@npm:^8.0.0": + version: 8.1.2 + resolution: "meow@npm:8.1.2" + 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 + checksum: bc23bf1b4423ef6a821dff9734406bce4b91ea257e7f10a8b7f896f45b59649f07adc0926e2917eacd8cf1df9e4cd89c77623cf63dfd0f8bf54de07a32ee5a85 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: ^3.0.2 + picomatch: ^2.3.1 + checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + languageName: node + linkType: hard + +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: 995dcece15ee29aa16e188de6633d43a3db4611bcf93620e7e62109ec41c79c0f34277165b8ce5e361205049766e371851264c21ac64ca35499acb5421c2ba56 + languageName: node + linkType: hard + +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 + languageName: node + linkType: hard + +"minimatch@npm:3.0.5": + version: 3.0.5 + resolution: "minimatch@npm:3.0.5" + dependencies: + brace-expansion: ^1.1.7 + checksum: a3b84b426eafca947741b864502cee02860c4e7b145de11ad98775cfcf3066fef422583bc0ffce0952ddf4750c1ccf4220b1556430d4ce10139f66247d87d69e + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^5.0.1": + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" + dependencies: + brace-expansion: ^2.0.1 + checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 + languageName: node + linkType: hard + +"minimatch@npm:^6.1.6": + version: 6.2.0 + resolution: "minimatch@npm:6.2.0" + dependencies: + brace-expansion: ^2.0.1 + checksum: 0ffb77d05bd483fcc344ba3e64a501d569e658fa6c592d94e9716ffc7925de7a8c2ac294cafa822b160bd8b2cbf7e01012917e06ffb9a85cfa9604629b3f2c04 + languageName: node + linkType: hard + +"minimatch@npm:^7.4.1, minimatch@npm:^7.4.2": + version: 7.4.3 + resolution: "minimatch@npm:7.4.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: daa954231b6859e3ba0e5fbd2486986d3cae283bb69acb7ed3833c84a293f8d7edb8514360ea62c01426ba791446b2a1e1cc0d718bed15c0212cef35c59a6b95 + languageName: node + linkType: hard + +"minimist-options@npm:4.1.0": + version: 4.1.0 + resolution: "minimist-options@npm:4.1.0" + dependencies: + arrify: ^1.0.1 + is-plain-obj: ^1.1.0 + kind-of: ^6.0.3 + checksum: 8c040b3068811e79de1140ca2b708d3e203c8003eb9a414c1ab3cd467fc5f17c9ca02a5aef23bedc51a7f8bfbe77f87e9a7e31ec81fba304cda675b019496f4e + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: ^3.0.0 + checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + languageName: node + linkType: hard + +"minipass-fetch@npm:^2.0.3": + version: 2.1.2 + resolution: "minipass-fetch@npm:2.1.2" + dependencies: + encoding: ^0.1.13 + minipass: ^3.1.6 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.1 + resolution: "minipass-fetch@npm:3.0.1" + dependencies: + encoding: ^0.1.13 + minipass: ^4.0.0 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: b5eecf462ab8409891e4b8a786260e411304b958e45e10820b0a5d31f7841ccbce5f85e49934a34fdb94501206c273bde1988b9c0ad1625bdfb9883d90285420 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-json-stream@npm:^1.0.1": + version: 1.0.1 + resolution: "minipass-json-stream@npm:1.0.1" + dependencies: + jsonparse: ^1.3.1 + minipass: ^3.0.0 + checksum: 791b696a27d1074c4c08dab1bf5a9f3201145c2933e428f45d880467bce12c60de4703203d2928de4b162d0ae77b0bb4b55f96cb846645800aa0eb4919b3e796 + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^4.0.0, minipass@npm:^4.0.2, minipass@npm:^4.2.4": + version: 4.2.5 + resolution: "minipass@npm:4.2.5" + checksum: 4f9c19af23a5d4a9e7156feefc9110634b178a8cff8f8271af16ec5ebf7e221725a97429952c856f5b17b30c2065ebd24c81722d90c93d2122611d75b952b48f + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mkdirp-infer-owner@npm:^2.0.0": + version: 2.0.0 + resolution: "mkdirp-infer-owner@npm:2.0.0" + dependencies: + chownr: ^2.0.0 + infer-owner: ^1.0.4 + mkdirp: ^1.0.3 + checksum: d8f4ecd32f6762459d6b5714eae6487c67ae9734ab14e26d14377ddd9b2a1bf868d8baa18c0f3e73d3d513f53ec7a698e0f81a9367102c870a55bef7833880f7 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"modify-values@npm:^1.0.0": + version: 1.0.1 + resolution: "modify-values@npm:1.0.1" + checksum: 8296610c608bc97b03c2cf889c6cdf4517e32fa2d836440096374c2209f6b7b3e256c209493a0b32584b9cb32d528e99d0dd19dcd9a14d2d915a312d391cc7e9 + languageName: node + linkType: hard + +"module-alias@npm:^2.2.2": + version: 2.2.2 + resolution: "module-alias@npm:2.2.2" + checksum: 4b5543f834b484033e5bd184096ca8276b9195e32e88883ee6ea8d3a4789d97c470d26f5fa7271bd7a26588bf67e4d27dbdb594ee327aef1c9619d855dc78342 + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"ms@npm:^2.0.0, ms@npm:^2.1.1": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"multimatch@npm:5.0.0": + version: 5.0.0 + resolution: "multimatch@npm:5.0.0" + dependencies: + "@types/minimatch": ^3.0.3 + array-differ: ^3.0.0 + array-union: ^2.1.0 + arrify: ^2.0.1 + minimatch: ^3.0.4 + checksum: 82c8030a53af965cab48da22f1b0f894ef99e16ee680dabdfbd38d2dfacc3c8208c475203d747afd9e26db44118ed0221d5a0d65268c864f06d6efc7ac6df812 + languageName: node + linkType: hard + +"mute-stream@npm:0.0.8, mute-stream@npm:~0.0.4": + version: 0.0.8 + resolution: "mute-stream@npm:0.0.8" + checksum: ff48d251fc3f827e5b1206cda0ffdaec885e56057ee86a3155e1951bc940fd5f33531774b1cc8414d7668c10a8907f863f6561875ee6e8768931a62121a531a1 + languageName: node + linkType: hard + +"mz@npm:^2.7.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: ^1.0.0 + object-assign: ^4.0.1 + thenify-all: ^1.0.0 + checksum: 8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 + languageName: node + linkType: hard + +"natural-compare-lite@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare-lite@npm:1.4.0" + checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"neo-async@npm:^2.6.0": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 + languageName: node + linkType: hard + +"nested-error-stacks@npm:~2.0.1": + version: 2.0.1 + resolution: "nested-error-stacks@npm:2.0.1" + checksum: 8430d7d80ad69b1add2992ee2992a363db6c1a26a54740963bc99a004c5acb1d2a67049397062eab2caa3a312b4da89a0b85de3bdf82d7d472a6baa166311fe6 + languageName: node + linkType: hard + +"node-addon-api@npm:^3.2.1": + version: 3.2.1 + resolution: "node-addon-api@npm:3.2.1" + dependencies: + node-gyp: latest + checksum: 2369986bb0881ccd9ef6bacdf39550e07e089a9c8ede1cbc5fc7712d8e2faa4d50da0e487e333d4125f8c7a616c730131d1091676c9d499af1d74560756b4a18 + languageName: node + linkType: hard + +"node-fetch@npm:2.6.7": + version: 2.6.7 + resolution: "node-fetch@npm:2.6.7" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 8d816ffd1ee22cab8301c7756ef04f3437f18dace86a1dae22cf81db8ef29c0bf6655f3215cb0cdb22b420b6fe141e64b26905e7f33f9377a7fa59135ea3e10b + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.7": + version: 2.6.9 + resolution: "node-fetch@npm:2.6.9" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: acb04f9ce7224965b2b59e71b33c639794d8991efd73855b0b250921382b38331ffc9d61bce502571f6cc6e11a8905ca9b1b6d4aeb586ab093e2756a1fd190d0 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.3.0": + version: 4.6.0 + resolution: "node-gyp-build@npm:4.6.0" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 25d78c5ef1f8c24291f4a370c47ba52fcea14f39272041a90a7894cd50d766f7c8cb8fb06c0f42bf6f69b204b49d9be3c8fc344aac09714d5bdb95965499eb15 + languageName: node + linkType: hard + +"node-gyp@npm:^9.0.0, node-gyp@npm:latest": + version: 9.3.1 + resolution: "node-gyp@npm:9.3.1" + dependencies: + env-paths: ^2.2.0 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^10.0.3 + nopt: ^6.0.0 + npmlog: ^6.0.0 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^2.0.2 + bin: + node-gyp: bin/node-gyp.js + checksum: b860e9976fa645ca0789c69e25387401b4396b93c8375489b5151a6c55cf2640a3b6183c212b38625ef7c508994930b72198338e3d09b9d7ade5acc4aaf51ea7 + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e + languageName: node + linkType: hard + +"node-releases@npm:^2.0.8": + version: 2.0.10 + resolution: "node-releases@npm:2.0.10" + checksum: d784ecde25696a15d449c4433077f5cce620ed30a1656c4abf31282bfc691a70d9618bae6868d247a67914d1be5cc4fde22f65a05f4398cdfb92e0fc83cadfbc + languageName: node + linkType: hard + +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: ^1.0.0 + bin: + nopt: bin/nopt.js + checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.1.0 + resolution: "nopt@npm:7.1.0" + dependencies: + abbrev: ^2.0.0 + bin: + nopt: bin/nopt.js + checksum: 77185170d491b2ffdda0c72ce12dcf222b670814b7fb5ba1b750c708a6e5421b5607345c1f6341602476c8ef0a26929f5b861efa284e106c60b4baa6e6edb262 + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: ^2.1.4 + resolve: ^1.10.0 + semver: 2 || 3 || 4 || 5 + validate-npm-package-license: ^3.0.1 + checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 + languageName: node + linkType: hard + +"normalize-package-data@npm:^3.0.0": + version: 3.0.3 + resolution: "normalize-package-data@npm:3.0.3" + dependencies: + hosted-git-info: ^4.0.1 + is-core-module: ^2.5.0 + semver: ^7.3.4 + validate-npm-package-license: ^3.0.1 + checksum: bbcee00339e7c26fdbc760f9b66d429258e2ceca41a5df41f5df06cc7652de8d82e8679ff188ca095cad8eff2b6118d7d866af2b68400f74602fbcbce39c160a + languageName: node + linkType: hard + +"normalize-package-data@npm:^4.0.0": + version: 4.0.1 + resolution: "normalize-package-data@npm:4.0.1" + dependencies: + hosted-git-info: ^5.0.0 + is-core-module: ^2.8.1 + semver: ^7.3.5 + validate-npm-package-license: ^3.0.4 + checksum: 292e0aa740e73d62f84bbd9d55d4bfc078155f32d5d7572c32c9807f96d543af0f43ff7e5c80bfa6238667123fd68bd83cd412eae9b27b85b271fb041f624528 + languageName: node + linkType: hard + +"normalize-package-data@npm:^5.0.0": + version: 5.0.0 + resolution: "normalize-package-data@npm:5.0.0" + dependencies: + hosted-git-info: ^6.0.0 + is-core-module: ^2.8.1 + semver: ^7.3.5 + validate-npm-package-license: ^3.0.4 + checksum: a459f05eaf7c2b643c61234177f08e28064fde97da15800e3d3ac0404e28450d43ac46fc95fbf6407a9bf20af4c58505ad73458a912dc1517f8c1687b1d68c27 + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"npm-bundled@npm:^1.1.1, npm-bundled@npm:^1.1.2": + version: 1.1.2 + resolution: "npm-bundled@npm:1.1.2" + dependencies: + npm-normalize-package-bin: ^1.0.1 + checksum: 6e599155ef28d0b498622f47f1ba189dfbae05095a1ed17cb3a5babf961e965dd5eab621f0ec6f0a98de774e5836b8f5a5ee639010d64f42850a74acec3d4d09 + languageName: node + linkType: hard + +"npm-bundled@npm:^2.0.0": + version: 2.0.1 + resolution: "npm-bundled@npm:2.0.1" + dependencies: + npm-normalize-package-bin: ^2.0.0 + checksum: 7747293985c48c5268871efe691545b03731cb80029692000cbdb0b3344b9617be5187aa36281cabbe6b938e3651b4e87236d1c31f9e645eef391a1a779413e6 + languageName: node + linkType: hard + +"npm-bundled@npm:^3.0.0": + version: 3.0.0 + resolution: "npm-bundled@npm:3.0.0" + dependencies: + npm-normalize-package-bin: ^3.0.0 + checksum: 110859c2d6dcd7941dac0932a29171cbde123060486a4b6e897aaf5e025abeb3d9ffcdfe9e9271992e6396b2986c2c534f1029a45a7c196f1257fa244305dbf8 + languageName: node + linkType: hard + +"npm-install-checks@npm:^5.0.0": + version: 5.0.0 + resolution: "npm-install-checks@npm:5.0.0" + dependencies: + semver: ^7.1.1 + checksum: 0e7d1aae52b1fe9d3a0fd4a008850c7047931722dd49ee908afd13fd0297ac5ddb10964d9c59afcdaaa2ca04b51d75af2788f668c729ae71fec0e4cdac590ffc + languageName: node + linkType: hard + +"npm-install-checks@npm:^6.0.0": + version: 6.1.0 + resolution: "npm-install-checks@npm:6.1.0" + dependencies: + semver: ^7.1.1 + checksum: efbb4deac45bfe18ab8f619801f736f675ee9f80a60eeafc9fbf8f4657816b67d8e1b1a8dc50d47ee4226727f96e111974a752c4861e1aef1cc2e2ed70581e7c + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^1.0.1": + version: 1.0.1 + resolution: "npm-normalize-package-bin@npm:1.0.1" + checksum: ae7f15155a1e3ace2653f12ddd1ee8eaa3c84452fdfbf2f1943e1de264e4b079c86645e2c55931a51a0a498cba31f70022a5219d5665fbcb221e99e58bc70122 + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^2.0.0": + version: 2.0.0 + resolution: "npm-normalize-package-bin@npm:2.0.0" + checksum: 7c5379f9b188b564c4332c97bdd9a5d6b7b15f02b5823b00989d6a0e6fb31eb0280f02b0a924f930e1fcaf00e60fae333aec8923d2a4c7747613c7d629d8aa25 + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^3.0.0": + version: 3.0.0 + resolution: "npm-normalize-package-bin@npm:3.0.0" + checksum: 6a34886c150b0f5302aad52a9446e5c939aa14eeb462323e75681517b36c6b9eaef83e1f5bc2d7e5154b3b752cbce81bed05e290db3f1f7edf857cbb895e35c0 + languageName: node + linkType: hard + +"npm-package-arg@npm:8.1.1": + version: 8.1.1 + resolution: "npm-package-arg@npm:8.1.1" + dependencies: + hosted-git-info: ^3.0.6 + semver: ^7.0.0 + validate-npm-package-name: ^3.0.0 + checksum: 406c59f92d8fac5acbd1df62f4af8075e925af51131b6bc66245641ea71ddb0e60b3e2c56fafebd4e8ffc3ba0453e700a221a36a44740dc9f7488cec97ae4c55 + languageName: node + linkType: hard + +"npm-package-arg@npm:^10.0.0, npm-package-arg@npm:^10.1.0": + version: 10.1.0 + resolution: "npm-package-arg@npm:10.1.0" + dependencies: + hosted-git-info: ^6.0.0 + proc-log: ^3.0.0 + semver: ^7.3.5 + validate-npm-package-name: ^5.0.0 + checksum: 8fe4b6a742502345e4836ed42fdf26c544c9f75563c476c67044a481ada6e81f71b55462489c7e1899d516e4347150e58028036a90fa11d47e320bcc9365fd30 + languageName: node + linkType: hard + +"npm-package-arg@npm:^9.0.0, npm-package-arg@npm:^9.0.1": + version: 9.1.2 + resolution: "npm-package-arg@npm:9.1.2" + dependencies: + hosted-git-info: ^5.0.0 + proc-log: ^2.0.1 + semver: ^7.3.5 + validate-npm-package-name: ^4.0.0 + checksum: 3793488843985ed71deb14fcba7c068d8ed03a18fd8f6b235c6a64465c9a25f60261598106d5cc8677c0bee9548e405c34c2e3c7a822e3113d3389351c745dfa + languageName: node + linkType: hard + +"npm-packlist@npm:5.1.1": + version: 5.1.1 + resolution: "npm-packlist@npm:5.1.1" + dependencies: + glob: ^8.0.1 + ignore-walk: ^5.0.1 + npm-bundled: ^1.1.2 + npm-normalize-package-bin: ^1.0.1 + bin: + npm-packlist: bin/index.js + checksum: 28dab153744ceb4695b82a9032d14aa2bfb855d38344a09052673d07860a4d8725f808ed23996e6f2792c48e11f5d147632c159f798d2c24dac92b51a884f0c6 + languageName: node + linkType: hard + +"npm-packlist@npm:^5.1.0": + version: 5.1.3 + resolution: "npm-packlist@npm:5.1.3" + dependencies: + glob: ^8.0.1 + ignore-walk: ^5.0.1 + npm-bundled: ^2.0.0 + npm-normalize-package-bin: ^2.0.0 + bin: + npm-packlist: bin/index.js + checksum: 94cc9c66740e8f80243301de85eb0a2cec5bbd570c3f26b6ad7af1a3eca155f7e810580dc7ea4448f12a8fd82f6db307e7132a5fe69e157eb45b325acadeb22a + languageName: node + linkType: hard + +"npm-packlist@npm:^7.0.0": + version: 7.0.4 + resolution: "npm-packlist@npm:7.0.4" + dependencies: + ignore-walk: ^6.0.0 + checksum: 5ffa1f8f0b32141a60a66713fa3ed03b8ee4800b1ed6b59194d03c3c85da88f3fc21e1de29b665f322678bae85198732b16aa76c0a7cb0e283f9e0db50752233 + languageName: node + linkType: hard + +"npm-pick-manifest@npm:^7.0.0": + version: 7.0.2 + resolution: "npm-pick-manifest@npm:7.0.2" + dependencies: + npm-install-checks: ^5.0.0 + npm-normalize-package-bin: ^2.0.0 + npm-package-arg: ^9.0.0 + semver: ^7.3.5 + checksum: a93ec449c12219a2be8556837db9ac5332914f304a69469bb6f1f47717adc6e262aa318f79166f763512688abd9c4e4b6a2d83b2dd19753a7abe5f0360f2c8bc + languageName: node + linkType: hard + +"npm-pick-manifest@npm:^8.0.0, npm-pick-manifest@npm:^8.0.1": + version: 8.0.1 + resolution: "npm-pick-manifest@npm:8.0.1" + dependencies: + npm-install-checks: ^6.0.0 + npm-normalize-package-bin: ^3.0.0 + npm-package-arg: ^10.0.0 + semver: ^7.3.5 + checksum: b8e16f2fbcc40ba7d1405c9b566bcee32488c6709f883207f709b0715ed34e2f3f3bc5bf5cb9563d6aa23cb878102bf0011ba22cce9235caa9a0349784b48ecd + languageName: node + linkType: hard + +"npm-registry-fetch@npm:14.0.3, npm-registry-fetch@npm:^14.0.0, npm-registry-fetch@npm:^14.0.3": + version: 14.0.3 + resolution: "npm-registry-fetch@npm:14.0.3" + dependencies: + make-fetch-happen: ^11.0.0 + minipass: ^4.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 + checksum: 451224e7272c8418000f6a0e27fb01d7eb5231bcd98dbd42acac3f275f0b5317590c152860cc84afa706427121b59f9422939e00af5690442b70e64cfa39de0a + languageName: node + linkType: hard + +"npm-registry-fetch@npm:^13.0.0, npm-registry-fetch@npm:^13.0.1": + version: 13.3.1 + resolution: "npm-registry-fetch@npm:13.3.1" + dependencies: + make-fetch-happen: ^10.0.6 + minipass: ^3.1.6 + minipass-fetch: ^2.0.3 + minipass-json-stream: ^1.0.1 + minizlib: ^2.1.2 + npm-package-arg: ^9.0.1 + proc-log: ^2.0.0 + checksum: 5a941c2c799568e0dbccfc15f280444da398dadf2eede1b1921f08ddd5cb5f32c7cb4d16be96401f95a33073aeec13a3fd928c753790d3c412c2e64e7f7c6ee4 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: ^3.0.0 + checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 + languageName: node + linkType: hard + +"npm-run-path@npm:^5.1.0": + version: 5.1.0 + resolution: "npm-run-path@npm:5.1.0" + dependencies: + path-key: ^4.0.0 + checksum: dc184eb5ec239d6a2b990b43236845332ef12f4e0beaa9701de724aa797fe40b6bbd0157fb7639d24d3ab13f5d5cf22d223a19c6300846b8126f335f788bee66 + languageName: node + linkType: hard + +"npmlog@npm:6.0.2, npmlog@npm:^6.0.0, npmlog@npm:^6.0.2": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: ^3.0.0 + console-control-strings: ^1.1.0 + gauge: ^4.0.3 + set-blocking: ^2.0.0 + checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a + languageName: node + linkType: hard + +"npmlog@npm:^7.0.1": + version: 7.0.1 + resolution: "npmlog@npm:7.0.1" + dependencies: + are-we-there-yet: ^4.0.0 + console-control-strings: ^1.1.0 + gauge: ^5.0.0 + set-blocking: ^2.0.0 + checksum: caabeb1f557c1094ad7ed3275b968b83ccbaefc133f17366ebb9fe8eb44e1aace28c31419d6244bfc0422aede1202875d555fe6661978bf04386f6cf617f43a4 + languageName: node + linkType: hard + +"nx@npm:15.8.6": + version: 15.8.6 + resolution: "nx@npm:15.8.6" + dependencies: + "@nrwl/cli": 15.8.6 + "@nrwl/nx-darwin-arm64": 15.8.6 + "@nrwl/nx-darwin-x64": 15.8.6 + "@nrwl/nx-linux-arm-gnueabihf": 15.8.6 + "@nrwl/nx-linux-arm64-gnu": 15.8.6 + "@nrwl/nx-linux-arm64-musl": 15.8.6 + "@nrwl/nx-linux-x64-gnu": 15.8.6 + "@nrwl/nx-linux-x64-musl": 15.8.6 + "@nrwl/nx-win32-arm64-msvc": 15.8.6 + "@nrwl/nx-win32-x64-msvc": 15.8.6 + "@nrwl/tao": 15.8.6 + "@parcel/watcher": 2.0.4 + "@yarnpkg/lockfile": ^1.1.0 + "@yarnpkg/parsers": ^3.0.0-rc.18 + "@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: ^7.0.2 + dotenv: ~10.0.0 + enquirer: ~2.3.6 + fast-glob: 3.2.7 + figures: 3.2.0 + flat: ^5.0.2 + fs-extra: ^11.1.0 + glob: 7.1.4 + ignore: ^5.0.4 + js-yaml: 4.1.0 + jsonc-parser: 3.2.0 + lines-and-columns: ~2.0.3 + minimatch: 3.0.5 + npm-run-path: ^4.0.1 + open: ^8.4.0 + semver: 7.3.4 + 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 + peerDependencies: + "@swc-node/register": ^1.4.2 + "@swc/core": ^1.2.173 + dependenciesMeta: + "@nrwl/nx-darwin-arm64": + optional: true + "@nrwl/nx-darwin-x64": + optional: true + "@nrwl/nx-linux-arm-gnueabihf": + optional: true + "@nrwl/nx-linux-arm64-gnu": + optional: true + "@nrwl/nx-linux-arm64-musl": + optional: true + "@nrwl/nx-linux-x64-gnu": + optional: true + "@nrwl/nx-linux-x64-musl": + optional: true + "@nrwl/nx-win32-arm64-msvc": + optional: true + "@nrwl/nx-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc-node/register": + optional: true + "@swc/core": + optional: true + bin: + nx: bin/nx.js + checksum: 4bc1f39703286eacdd32b31f6a2312b38cdb29020075552630efe4c7f2214616ac06e4c43816bc94a68b12430291aaf66dae7ff2e3b4eab3b9372d442c88c91e + languageName: node + linkType: hard + +"nx@npm:15.8.7, nx@npm:>=15.5.2 < 16": + version: 15.8.7 + resolution: "nx@npm:15.8.7" + dependencies: + "@nrwl/cli": 15.8.7 + "@nrwl/nx-darwin-arm64": 15.8.7 + "@nrwl/nx-darwin-x64": 15.8.7 + "@nrwl/nx-linux-arm-gnueabihf": 15.8.7 + "@nrwl/nx-linux-arm64-gnu": 15.8.7 + "@nrwl/nx-linux-arm64-musl": 15.8.7 + "@nrwl/nx-linux-x64-gnu": 15.8.7 + "@nrwl/nx-linux-x64-musl": 15.8.7 + "@nrwl/nx-win32-arm64-msvc": 15.8.7 + "@nrwl/nx-win32-x64-msvc": 15.8.7 + "@nrwl/tao": 15.8.7 + "@parcel/watcher": 2.0.4 + "@yarnpkg/lockfile": ^1.1.0 + "@yarnpkg/parsers": ^3.0.0-rc.18 + "@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: ^7.0.2 + dotenv: ~10.0.0 + enquirer: ~2.3.6 + fast-glob: 3.2.7 + figures: 3.2.0 + flat: ^5.0.2 + fs-extra: ^11.1.0 + glob: 7.1.4 + ignore: ^5.0.4 + js-yaml: 4.1.0 + jsonc-parser: 3.2.0 + lines-and-columns: ~2.0.3 + minimatch: 3.0.5 + npm-run-path: ^4.0.1 + open: ^8.4.0 + semver: 7.3.4 + 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 + peerDependencies: + "@swc-node/register": ^1.4.2 + "@swc/core": ^1.2.173 + dependenciesMeta: + "@nrwl/nx-darwin-arm64": + optional: true + "@nrwl/nx-darwin-x64": + optional: true + "@nrwl/nx-linux-arm-gnueabihf": + optional: true + "@nrwl/nx-linux-arm64-gnu": + optional: true + "@nrwl/nx-linux-arm64-musl": + optional: true + "@nrwl/nx-linux-x64-gnu": + optional: true + "@nrwl/nx-linux-x64-musl": + optional: true + "@nrwl/nx-win32-arm64-msvc": + optional: true + "@nrwl/nx-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc-node/register": + optional: true + "@swc/core": + optional: true + bin: + nx: bin/nx.js + checksum: b85e1df9cf028dc97d91fdb17897edc890ca0910268c98079e180b07d4da33c083d85dade5bede00ff7c1e3778fca86b08339d19f176b870026c836ea360a457 + languageName: node + linkType: hard + +"object-assign@npm:^4.0.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": + version: 1.12.3 + resolution: "object-inspect@npm:1.12.3" + checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a + languageName: node + linkType: hard + +"object.assign@npm:^4.1.2, object.assign@npm:^4.1.4": + version: 4.1.4 + resolution: "object.assign@npm:4.1.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + has-symbols: ^1.0.3 + object-keys: ^1.1.1 + checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 + languageName: node + linkType: hard + +"object.entries@npm:^1.1.5": + version: 1.1.6 + resolution: "object.entries@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 0f8c47517e6a9a980241eafe3b73de11e59511883173c2b93d67424a008e47e11b77c80e431ad1d8a806f6108b225a1cab9223e53e555776c612a24297117d28 + languageName: node + linkType: hard + +"object.values@npm:^1.1.6": + version: 1.1.6 + resolution: "object.values@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: f6fff9fd817c24cfd8107f50fb33061d81cd11bacc4e3dbb3852e9ff7692fde4dbce823d4333ea27cd9637ef1b6690df5fbb61f1ed314fa2959598dc3ae23d8e + languageName: node + linkType: hard + +"objectorarray@npm:^1.0.5": + version: 1.0.5 + resolution: "objectorarray@npm:1.0.5" + checksum: 8fd776aa495d113e217837f4adc1d53e63f656498237094d25f84c3e2c038b34b71d6fd85c4b60c7ae5f558790e5042426a400fae3eac35f297e11be12643a78 + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"onetime@npm:^5.1.0, onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: ^2.1.0 + checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 + languageName: node + linkType: hard + +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: ^4.0.0 + checksum: 0846ce78e440841335d4e9182ef69d5762e9f38aa7499b19f42ea1c4cd40f0b4446094c455c713f9adac3f4ae86f613bb5e30c99e52652764d06a89f709b3788 + languageName: node + linkType: hard + +"open@npm:^8.4.0": + version: 8.4.2 + resolution: "open@npm:8.4.2" + dependencies: + define-lazy-prop: ^2.0.0 + is-docker: ^2.1.1 + is-wsl: ^2.2.0 + checksum: 6388bfff21b40cb9bd8f913f9130d107f2ed4724ea81a8fd29798ee322b361ca31fa2cdfb491a5c31e43a3996cfe9566741238c7a741ada8d7af1cb78d85cf26 + languageName: node + linkType: hard + +"optionator@npm:^0.9.1": + version: 0.9.1 + resolution: "optionator@npm:0.9.1" + dependencies: + deep-is: ^0.1.3 + fast-levenshtein: ^2.0.6 + levn: ^0.4.1 + prelude-ls: ^1.2.1 + type-check: ^0.4.0 + word-wrap: ^1.2.3 + checksum: dbc6fa065604b24ea57d734261914e697bd73b69eff7f18e967e8912aa2a40a19a9f599a507fa805be6c13c24c4eae8c71306c239d517d42d4c041c942f508a0 + languageName: node + linkType: hard + +"ora@npm:^5.4.1": + version: 5.4.1 + resolution: "ora@npm:5.4.1" + dependencies: + bl: ^4.1.0 + chalk: ^4.1.0 + cli-cursor: ^3.1.0 + cli-spinners: ^2.5.0 + is-interactive: ^1.0.0 + is-unicode-supported: ^0.1.0 + log-symbols: ^4.1.0 + strip-ansi: ^6.0.0 + wcwidth: ^1.0.1 + checksum: 28d476ee6c1049d68368c0dc922e7225e3b5600c3ede88fade8052837f9ed342625fdaa84a6209302587c8ddd9b664f71f0759833cbdb3a4cf81344057e63c63 + languageName: node + linkType: hard + +"os-homedir@npm:^1.0.0": + version: 1.0.2 + resolution: "os-homedir@npm:1.0.2" + checksum: af609f5a7ab72de2f6ca9be6d6b91a599777afc122ac5cad47e126c1f67c176fe9b52516b9eeca1ff6ca0ab8587fe66208bc85e40a3940125f03cdb91408e9d2 + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d + languageName: node + linkType: hard + +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 93a654c53dc805dd5b5891bab16eb0ea46db8f66c4bfd99336ae929323b1af2b70a8b0654f8f1eae924b2b73d037031366d645f1fd18b3d30cbd15950cc4b1d4 + languageName: node + linkType: hard + +"p-limit@npm:^1.1.0": + version: 1.3.0 + resolution: "p-limit@npm:1.3.0" + dependencies: + p-try: ^1.0.0 + checksum: 281c1c0b8c82e1ac9f81acd72a2e35d402bf572e09721ce5520164e9de07d8274451378a3470707179ad13240535558f4b277f02405ad752e08c7d5b0d54fbfd + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: ^2.0.0 + checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-locate@npm:^2.0.0": + version: 2.0.0 + resolution: "p-locate@npm:2.0.0" + dependencies: + p-limit: ^1.1.0 + checksum: e2dceb9b49b96d5513d90f715780f6f4972f46987dc32a0e18bc6c3fc74a1a5d73ec5f81b1398af5e58b99ea1ad03fd41e9181c01fa81b4af2833958696e3081 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: ^2.2.0 + checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + +"p-map-series@npm:2.1.0": + version: 2.1.0 + resolution: "p-map-series@npm:2.1.0" + checksum: 69d4efbb6951c0dd62591d5a18c3af0af78496eae8b55791e049da239d70011aa3af727dece3fc9943e0bb3fd4fa64d24177cfbecc46efaf193179f0feeac486 + languageName: node + linkType: hard + +"p-map@npm:4.0.0, p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"p-pipe@npm:3.1.0": + version: 3.1.0 + resolution: "p-pipe@npm:3.1.0" + checksum: ee9a2609685f742c6ceb3122281ec4453bbbcc80179b13e66fd139dcf19b1c327cf6c2fdfc815b548d6667e7eaefe5396323f6d49c4f7933e4cef47939e3d65c + languageName: node + linkType: hard + +"p-queue@npm:6.6.2": + version: 6.6.2 + resolution: "p-queue@npm:6.6.2" + dependencies: + eventemitter3: ^4.0.4 + p-timeout: ^3.2.0 + checksum: 832642fcc4ab6477b43e6d7c30209ab10952969ed211c6d6f2931be8a4f9935e3578c72e8cce053dc34f2eb6941a408a2c516a54904e989851a1a209cf19761c + languageName: node + linkType: hard + +"p-reduce@npm:2.1.0, p-reduce@npm:^2.0.0, p-reduce@npm:^2.1.0": + version: 2.1.0 + resolution: "p-reduce@npm:2.1.0" + checksum: 99b26d36066a921982f25c575e78355824da0787c486e3dd9fc867460e8bf17d5fb3ce98d006b41bdc81ffc0aa99edf5faee53d11fe282a20291fb721b0cb1c7 + languageName: node + linkType: hard + +"p-timeout@npm:^3.2.0": + version: 3.2.0 + resolution: "p-timeout@npm:3.2.0" + dependencies: + p-finally: ^1.0.0 + checksum: 3dd0eaa048780a6f23e5855df3dd45c7beacff1f820476c1d0d1bcd6648e3298752ba2c877aa1c92f6453c7dd23faaf13d9f5149fc14c0598a142e2c5e8d649c + languageName: node + linkType: hard + +"p-try@npm:^1.0.0": + version: 1.0.0 + resolution: "p-try@npm:1.0.0" + checksum: 3b5303f77eb7722144154288bfd96f799f8ff3e2b2b39330efe38db5dd359e4fb27012464cd85cb0a76e9b7edd1b443568cb3192c22e7cffc34989df0bafd605 + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae + languageName: node + linkType: hard + +"p-waterfall@npm:2.1.1": + version: 2.1.1 + resolution: "p-waterfall@npm:2.1.1" + dependencies: + p-reduce: ^2.0.0 + checksum: 8588bb8b004ee37e559c7e940a480c1742c42725d477b0776ff30b894920a3e48bddf8f60aa0ae82773e500a8fc99d75e947c450e0c2ce187aff72cc1b248f6d + languageName: node + linkType: hard + +"pacote@npm:13.6.2, pacote@npm:^13.6.1": + version: 13.6.2 + resolution: "pacote@npm:13.6.2" + dependencies: + "@npmcli/git": ^3.0.0 + "@npmcli/installed-package-contents": ^1.0.7 + "@npmcli/promise-spawn": ^3.0.0 + "@npmcli/run-script": ^4.1.0 + cacache: ^16.0.0 + chownr: ^2.0.0 + fs-minipass: ^2.1.0 + infer-owner: ^1.0.4 + minipass: ^3.1.6 + mkdirp: ^1.0.4 + npm-package-arg: ^9.0.0 + npm-packlist: ^5.1.0 + npm-pick-manifest: ^7.0.0 + npm-registry-fetch: ^13.0.1 + proc-log: ^2.0.0 + promise-retry: ^2.0.1 + read-package-json: ^5.0.0 + read-package-json-fast: ^2.0.3 + rimraf: ^3.0.2 + ssri: ^9.0.0 + tar: ^6.1.11 + bin: + pacote: lib/bin.js + checksum: a7b7f97094ab570a23e1c174537e9953a4d53176cc4b18bac77d7728bd89e2b9fa331d0f78fa463add03df79668a918bbdaa2750819504ee39242063abf53c6e + languageName: node + linkType: hard + +"pacote@npm:^15.0.0, pacote@npm:^15.0.8": + version: 15.1.1 + resolution: "pacote@npm:15.1.1" + 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: ^4.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.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + bin: + pacote: lib/bin.js + checksum: 109388e873615cdad342f5dbd3639389c00aaac2c84b824dcb1a9460b4cf1c66264387b1d0200b1769abda7feca94165804d1308ca5e59904ae24d489d3bfb13 + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: ^3.0.0 + checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + languageName: node + linkType: hard + +"parse-author@npm:^2.0.0": + version: 2.0.0 + resolution: "parse-author@npm:2.0.0" + dependencies: + author-regex: ^1.0.0 + checksum: 066ad615de7dbc3c4293eaaf66a65ea81f8e75e2cffcaf9dd3bcdd4dc4cfff1baa3c85bb3adbedfbed2ddee3298ef4e25ef51b524e91d5a5815d8d9598d31367 + languageName: node + linkType: hard + +"parse-conflict-json@npm:^3.0.0": + version: 3.0.1 + resolution: "parse-conflict-json@npm:3.0.1" + dependencies: + json-parse-even-better-errors: ^3.0.0 + just-diff: ^6.0.0 + just-diff-apply: ^5.2.0 + checksum: d8d2656bc02d4df36846366baec36b419da2fe944e31298719a4d28d28f772aa7cad2a69d01f6f329918e7c298ac481d1e6a9138d62d5662d5620a74f794af8f + languageName: node + linkType: hard + +"parse-github-url@npm:1.0.2": + version: 1.0.2 + resolution: "parse-github-url@npm:1.0.2" + bin: + parse-github-url: ./cli.js + checksum: a19b8bc6f8908a24cb63a10ff90cd39cec0745615a272ec686803684653be34eb3e638e31a66c8ee3a9568082ff686eaf010181688000a6274c86a23e9220f2f + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: ^1.3.1 + json-parse-better-errors: ^1.0.1 + checksum: 0fe227d410a61090c247e34fa210552b834613c006c2c64d9a05cfe9e89cf8b4246d1246b1a99524b53b313e9ac024438d0680f67e33eaed7e6f38db64cfe7b5 + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": ^7.0.0 + error-ex: ^1.3.1 + json-parse-even-better-errors: ^2.3.0 + lines-and-columns: ^1.1.6 + checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 + languageName: node + linkType: hard + +"parse-ms@npm:^2.1.0": + version: 2.1.0 + resolution: "parse-ms@npm:2.1.0" + checksum: d5c66c76cca8df5bd0574e2d11b9c3752893b59b466e74308d4a2f09760dc5436a1633f549cad300fc8c3c19154d14959a3b8333d3b2f7bd75898fe18149d564 + languageName: node + linkType: hard + +"parse-path@npm:^7.0.0": + version: 7.0.0 + resolution: "parse-path@npm:7.0.0" + dependencies: + protocols: ^2.0.0 + checksum: 244b46523a58181d251dda9b888efde35d8afb957436598d948852f416d8c76ddb4f2010f9fc94218b4be3e5c0f716aa0d2026194a781e3b8981924142009302 + languageName: node + linkType: hard + +"parse-url@npm:^8.1.0": + version: 8.1.0 + resolution: "parse-url@npm:8.1.0" + dependencies: + parse-path: ^7.0.0 + checksum: b93e21ab4c93c7d7317df23507b41be7697694d4c94f49ed5c8d6288b01cba328fcef5ba388e147948eac20453dee0df9a67ab2012415189fff85973bdffe8d9 + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.5, path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a + languageName: node + linkType: hard + +"path-scurry@npm:^1.6.1": + version: 1.6.3 + resolution: "path-scurry@npm:1.6.3" + dependencies: + lru-cache: ^7.14.1 + minipass: ^4.0.2 + checksum: 814ebd7f8df717e2381dc707ba3a3ddf84d0a4f9d653036c7554cb1fea632d4d78eb17dd5f4c85111b78ba8b8c0a5b59c756645c9d343bdacacda4ba8d1626c2 + languageName: node + linkType: hard + +"path-type@npm:^3.0.0": + version: 3.0.0 + resolution: "path-type@npm:3.0.0" + dependencies: + pify: ^3.0.0 + checksum: 735b35e256bad181f38fa021033b1c33cfbe62ead42bb2222b56c210e42938eecb272ae1949f3b6db4ac39597a61b44edd8384623ec4d79bfdc9a9c0f12537a6 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"pegjs@npm:^0.10.0": + version: 0.10.0 + resolution: "pegjs@npm:0.10.0" + bin: + pegjs: bin/pegjs + checksum: 65d184ca0e1823ec0a3e7f384d7fd771bcbbc7abf460c82c9704022c1fa325425dc9007c92982b951879c3c9d4c39bf5cd6d99690e0540ff5016c04ca1ecd17e + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"pidtree@npm:^0.6.0": + version: 0.6.0 + resolution: "pidtree@npm:0.6.0" + bin: + pidtree: bin/pidtree.js + checksum: 8fbc073ede9209dd15e80d616e65eb674986c93be49f42d9ddde8dbbd141bb53d628a7ca4e58ab5c370bb00383f67d75df59a9a226dede8fa801267a7030c27a + languageName: node + linkType: hard + +"pify@npm:5.0.0, pify@npm:^5.0.0": + version: 5.0.0 + resolution: "pify@npm:5.0.0" + checksum: 443e3e198ad6bfa8c0c533764cf75c9d5bc976387a163792fb553ffe6ce923887cf14eebf5aea9b7caa8eab930da8c33612990ae85bd8c2bc18bedb9eae94ecb + languageName: node + linkType: hard + +"pify@npm:^2.3.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 6cdcbc3567d5c412450c53261a3f10991665d660961e06605decf4544a61a97a54fefe70a68d5c37080ff9d6f4cf51444c90198d1ba9f9309a6c0d6e9f5c4fde + languageName: node + linkType: hard + +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 9c4e34278cb09987685fa5ef81499c82546c033713518f6441778fbec623fc708777fe8ac633097c72d88470d5963094076c7305cafc7ad340aae27cfacd856b + languageName: node + linkType: hard + +"pirates@npm:^4.0.1, pirates@npm:^4.0.4": + version: 4.0.5 + resolution: "pirates@npm:4.0.5" + checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 + languageName: node + linkType: hard + +"pkg-conf@npm:^2.1.0": + version: 2.1.0 + resolution: "pkg-conf@npm:2.1.0" + dependencies: + find-up: ^2.0.0 + load-json-file: ^4.0.0 + checksum: b50775157262abd1bfb4d3d948f3fc6c009d10266c6507d4de296af4e2cbb6d2738310784432185886d83144466fbb286b6e8ff0bc23dc5ee7d81810dc6c4788 + languageName: node + linkType: hard + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: ^4.0.0 + checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + languageName: node + linkType: hard + +"playwright-core@npm:1.32.3": + version: 1.32.3 + resolution: "playwright-core@npm:1.32.3" + bin: + playwright: cli.js + checksum: 7ea091c41a7d1bb97b445bc541a85b123ffcf167bcc00fb7e13e9079f06c92f59fd27caf9d1c1d7e0054f2b5765d1a16d198833c2be7266cebb9dbb916cd90f4 + languageName: node + linkType: hard + +"playwright@npm:^1.32.3": + version: 1.32.3 + resolution: "playwright@npm:1.32.3" + dependencies: + playwright-core: 1.32.3 + bin: + playwright: cli.js + checksum: 9627771a131ab96a26d702757e89dcf09a228f0038c43a14f982cc59a2eca672cb27c9d92c324ddc2c44457b82d77c30b3562b386601969e0456b52dba5df176 + languageName: node + linkType: hard + +"postcss-load-config@npm:^3.0.1": + version: 3.1.4 + resolution: "postcss-load-config@npm:3.1.4" + dependencies: + lilconfig: ^2.0.5 + yaml: ^1.10.2 + peerDependencies: + postcss: ">=8.0.9" + ts-node: ">=9.0.0" + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + checksum: 1c589504c2d90b1568aecae8238ab993c17dba2c44f848a8f13619ba556d26a1c09644d5e6361b5784e721e94af37b604992f9f3dc0483e687a0cc1cc5029a34 + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.10": + version: 6.0.11 + resolution: "postcss-selector-parser@npm:6.0.11" + dependencies: + cssesc: ^3.0.0 + util-deprecate: ^1.0.2 + checksum: 0b01aa9c2d2c8dbeb51e9b204796b678284be9823abc8d6d40a8b16d4149514e922c264a8ed4deb4d6dbced564b9be390f5942c058582d8656351516d6c49cde + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a + languageName: node + linkType: hard + +"prettier-linter-helpers@npm:^1.0.0": + version: 1.0.0 + resolution: "prettier-linter-helpers@npm:1.0.0" + dependencies: + fast-diff: ^1.1.2 + checksum: 00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392 + languageName: node + linkType: hard + +"prettier@npm:^2.8.8": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 + languageName: node + linkType: hard + +"pretty-format@npm:29.4.3": + version: 29.4.3 + resolution: "pretty-format@npm:29.4.3" + dependencies: + "@jest/schemas": ^29.4.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 3258b9a010bd79b3cf73783ad1e4592b6326fc981b6e31b742f316f14e7fbac09b48a9dbf274d092d9bde404db9fe16f518370e121837dc078a597392e6e5cc5 + languageName: node + linkType: hard + +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.5.0": + version: 29.5.0 + resolution: "pretty-format@npm:29.5.0" + dependencies: + "@jest/schemas": ^29.4.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 4065356b558e6db25b4d41a01efb386935a6c06a0c9c104ef5ce59f2f476b8210edb8b3949b386e60ada0a6dc5ebcb2e6ccddc8c64dfd1a9943c3c3a9e7eaf89 + languageName: node + linkType: hard + +"pretty-ms@npm:^7.0.0": + version: 7.0.1 + resolution: "pretty-ms@npm:7.0.1" + dependencies: + parse-ms: ^2.1.0 + checksum: d76c4920283b48be91f1d3797a2ce4bd51187d58d2a609ae993c028f73c92d16439449d857af57ccad91ae3a38b30c87307f5589749a056102ebb494c686957e + languageName: node + linkType: hard + +"proc-log@npm:^2.0.0, proc-log@npm:^2.0.1": + version: 2.0.1 + resolution: "proc-log@npm:2.0.1" + checksum: f6f23564ff759097db37443e6e2765af84979a703d2c52c1b9df506ee9f87caa101ba49d8fdc115c1a313ec78e37e8134704e9069e6a870f3499d98bb24c436f + languageName: node + linkType: hard + +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 + languageName: node + linkType: hard + +"promise-all-reject-late@npm:^1.0.0": + version: 1.0.1 + resolution: "promise-all-reject-late@npm:1.0.1" + checksum: d7d61ac412352e2c8c3463caa5b1c3ca0f0cc3db15a09f180a3da1446e33d544c4261fc716f772b95e4c27d559cfd2388540f44104feb356584f9c73cfb9ffcb + languageName: node + linkType: hard + +"promise-call-limit@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-call-limit@npm:1.0.1" + checksum: e69aed17f5f34bbd7aecff28faedb456e3500a08af31ee759ef75f2d8c2219d7c0e59f153f4d8c339056de8c304e0dd4acc500c339e7ea1e9c0e7bb1444367c8 + languageName: node + linkType: hard + +"promise-inflight@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-inflight@npm:1.0.1" + checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"prompts@npm:^2.0.1": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: ^3.0.3 + sisteransi: ^1.0.5 + checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d + languageName: node + linkType: hard + +"promzard@npm:^0.3.0": + version: 0.3.0 + resolution: "promzard@npm:0.3.0" + dependencies: + read: 1 + checksum: 443a3b39ac916099988ee0161ab4e22edd1fa27e3d39a38d60e48c11ca6df3f5a90bfe44d95af06ed8659c4050b789ffe64c3f9f8e49a4bea1ea19105c98445a + languageName: node + linkType: hard + +"proto-list@npm:~1.2.1": + version: 1.2.4 + resolution: "proto-list@npm:1.2.4" + checksum: 4d4826e1713cbfa0f15124ab0ae494c91b597a3c458670c9714c36e8baddf5a6aad22842776f2f5b137f259c8533e741771445eb8df82e861eea37a6eaba03f7 + languageName: node + linkType: hard + +"protocols@npm:^2.0.0, protocols@npm:^2.0.1": + version: 2.0.1 + resolution: "protocols@npm:2.0.1" + checksum: 4a9bef6aa0449a0245ded319ac3cbfd032c3e76ebb562777037a3a832c99253d0e8bc2847f7be350236df620a11f7d4fe683ea7f59a2cc14c69f746b6259eda4 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.0 + resolution: "punycode@npm:2.3.0" + checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 + languageName: node + linkType: hard + +"pure-rand@npm:^6.0.0": + version: 6.0.1 + resolution: "pure-rand@npm:6.0.1" + checksum: 4bb565399993b815658a72e359f574ce4f04827a42a905105d61163ae86f456d91595a0e4241e7bce04328fae0638ae70ac0428d93ecb55971c465bd084f8648 + languageName: node + linkType: hard + +"q@npm:^1.5.1": + version: 1.5.1 + resolution: "q@npm:1.5.1" + checksum: 147baa93c805bc1200ed698bdf9c72e9e42c05f96d007e33a558b5fdfd63e5ea130e99313f28efc1783e90e6bdb4e48b67a36fcc026b7b09202437ae88a1fb12 + languageName: node + linkType: hard + +"qs@npm:^6.11.1": + version: 6.11.1 + resolution: "qs@npm:6.11.1" + dependencies: + side-channel: ^1.0.4 + checksum: 82ee78ef12a16f3372fae5b64f76f8aedecb000feea882bbff1af146c147f6eb66b08f9c3f34d7e076f28563586956318b9b2ca41141846cdd6d5ad6f241d52f + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"quick-lru@npm:^4.0.1": + version: 4.0.1 + resolution: "quick-lru@npm:4.0.1" + checksum: bea46e1abfaa07023e047d3cf1716a06172c4947886c053ede5c50321893711577cb6119360f810cc3ffcd70c4d7db4069c3cee876b358ceff8596e062bd1154 + languageName: node + linkType: hard + +"rc@npm:^1.2.8, rc@npm:~1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: ^0.6.0 + ini: ~1.3.0 + minimist: ^1.2.0 + strip-json-comments: ~2.0.1 + bin: + rc: ./cli.js + checksum: 2e26e052f8be2abd64e6d1dabfbd7be03f80ec18ccbc49562d31f617d0015fbdbcf0f9eed30346ea6ab789e0fdfe4337f033f8016efdbee0df5354751842080e + languageName: node + linkType: hard + +"react-is@npm:^18.0.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + languageName: node + linkType: hard + +"read-cmd-shim@npm:3.0.0": + version: 3.0.0 + resolution: "read-cmd-shim@npm:3.0.0" + checksum: b518c6026f3320e30b692044f6ff5c4dc80f9c71261296da8994101b569b26b12b8e5df397bba2d4691dd3a3a2f770a1eca7be18a69ec202fac6dcfadc5016fd + languageName: node + linkType: hard + +"read-cmd-shim@npm:^4.0.0": + version: 4.0.0 + resolution: "read-cmd-shim@npm:4.0.0" + checksum: 2fb5a8a38984088476f559b17c6a73324a5db4e77e210ae0aab6270480fd85c355fc990d1c79102e25e555a8201606ed12844d6e3cd9f35d6a1518791184e05b + languageName: node + linkType: hard + +"read-package-json-fast@npm:^2.0.3": + version: 2.0.3 + resolution: "read-package-json-fast@npm:2.0.3" + dependencies: + json-parse-even-better-errors: ^2.3.0 + npm-normalize-package-bin: ^1.0.1 + checksum: fca37b3b2160b9dda7c5588b767f6a2b8ce68d03a044000e568208e20bea0cf6dd2de17b90740ce8da8b42ea79c0b3859649dadf29510bbe77224ea65326a903 + languageName: node + linkType: hard + +"read-package-json-fast@npm:^3.0.0, read-package-json-fast@npm:^3.0.2": + version: 3.0.2 + resolution: "read-package-json-fast@npm:3.0.2" + dependencies: + json-parse-even-better-errors: ^3.0.0 + npm-normalize-package-bin: ^3.0.0 + checksum: 8d406869f045f1d76e2a99865a8fd1c1af9c1dc06200b94d2b07eef87ed734b22703a8d72e1cd36ea36cc48e22020bdd187f88243c7dd0563f72114d38c17072 + languageName: node + linkType: hard + +"read-package-json@npm:5.0.1": + version: 5.0.1 + resolution: "read-package-json@npm:5.0.1" + dependencies: + glob: ^8.0.1 + json-parse-even-better-errors: ^2.3.1 + normalize-package-data: ^4.0.0 + npm-normalize-package-bin: ^1.0.1 + checksum: e8c2ad72df1f17e71268feabdb9bb0153ed2c7d38a05b759c5c49cf368a754bdd3c0e8a279fbc8d707802ff91d2cf144a995e6ebd5534de2848d52ab2c14034d + languageName: node + linkType: hard + +"read-package-json@npm:^5.0.0": + version: 5.0.2 + resolution: "read-package-json@npm:5.0.2" + dependencies: + glob: ^8.0.1 + json-parse-even-better-errors: ^2.3.1 + normalize-package-data: ^4.0.0 + npm-normalize-package-bin: ^2.0.0 + checksum: 0882ac9cec1bc92fb5515e9727611fb2909351e1e5c840dce3503cbb25b4cd48eb44b61071986e0fc51043208161f07d364a7336206c8609770186818753b51a + languageName: node + linkType: hard + +"read-package-json@npm:^6.0.0": + version: 6.0.1 + resolution: "read-package-json@npm:6.0.1" + dependencies: + glob: ^9.3.0 + json-parse-even-better-errors: ^3.0.0 + normalize-package-data: ^5.0.0 + npm-normalize-package-bin: ^3.0.0 + checksum: 2fb5c2248da02d5a7180c0538c5b9ebdf04920f4bbf5c19d336d656277d99f1559ba90f2afcdfd6f580c3182a46fe5fb1d3d8c01bc63ffdeae927c91a11a82c9 + languageName: node + linkType: hard + +"read-pkg-up@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg-up@npm:3.0.0" + dependencies: + find-up: ^2.0.0 + read-pkg: ^3.0.0 + checksum: 16175573f2914ab9788897bcbe2a62b5728d0075e62285b3680cebe97059e2911e0134a062cf6e51ebe3e3775312bc788ac2039ed6af38ec68d2c10c6f2b30fb + languageName: node + linkType: hard + +"read-pkg-up@npm:^7.0.1": + version: 7.0.1 + resolution: "read-pkg-up@npm:7.0.1" + dependencies: + find-up: ^4.1.0 + read-pkg: ^5.2.0 + type-fest: ^0.8.1 + checksum: e4e93ce70e5905b490ca8f883eb9e48b5d3cebc6cd4527c25a0d8f3ae2903bd4121c5ab9c5a3e217ada0141098eeb661313c86fa008524b089b8ed0b7f165e44 + languageName: node + linkType: hard + +"read-pkg@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg@npm:3.0.0" + dependencies: + load-json-file: ^4.0.0 + normalize-package-data: ^2.3.2 + path-type: ^3.0.0 + checksum: 398903ebae6c7e9965419a1062924436cc0b6f516c42c4679a90290d2f87448ed8f977e7aa2dbba4aa1ac09248628c43e493ac25b2bc76640e946035200e34c6 + languageName: node + linkType: hard + +"read-pkg@npm:^5.2.0": + version: 5.2.0 + resolution: "read-pkg@npm:5.2.0" + dependencies: + "@types/normalize-package-data": ^2.4.0 + normalize-package-data: ^2.5.0 + parse-json: ^5.0.0 + type-fest: ^0.6.0 + checksum: eb696e60528b29aebe10e499ba93f44991908c57d70f2d26f369e46b8b9afc208ef11b4ba64f67630f31df8b6872129e0a8933c8c53b7b4daf0eace536901222 + languageName: node + linkType: hard + +"read@npm:1, read@npm:^1.0.7": + version: 1.0.7 + resolution: "read@npm:1.0.7" + dependencies: + mute-stream: ~0.0.4 + checksum: 2777c254e5732cac96f5d0a1c0f6b836c89ae23d8febd405b206f6f24d5de1873420f1a0795e0e3721066650d19adf802c7882c4027143ee0acf942a4f34f97b + languageName: node + linkType: hard + +"readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + languageName: node + linkType: hard + +"readable-stream@npm:^4.1.0": + version: 4.3.0 + resolution: "readable-stream@npm:4.3.0" + dependencies: + abort-controller: ^3.0.0 + buffer: ^6.0.3 + events: ^3.3.0 + process: ^0.11.10 + checksum: 5f8d5fc1eb0c6eb47771ad4537881126d6280666e1f10ba1e2262a670a0352c36f59e6a04d17c9a6f7c888218984836dc67f55e95a77de8bfdf06fb75f00f670 + languageName: node + linkType: hard + +"readable-stream@npm:~2.3.6": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: ~1.0.0 + inherits: ~2.0.3 + isarray: ~1.0.0 + process-nextick-args: ~2.0.0 + safe-buffer: ~5.1.1 + string_decoder: ~1.1.1 + util-deprecate: ~1.0.1 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: ^2.2.1 + checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 + languageName: node + linkType: hard + +"redent@npm:^3.0.0": + version: 3.0.0 + resolution: "redent@npm:3.0.0" + dependencies: + indent-string: ^4.0.0 + strip-indent: ^3.0.0 + checksum: fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b + languageName: node + linkType: hard + +"reduce-flatten@npm:^2.0.0": + version: 2.0.0 + resolution: "reduce-flatten@npm:2.0.0" + checksum: 64393ef99a16b20692acfd60982d7fdbd7ff8d9f8f185c6023466444c6dd2abb929d67717a83cec7f7f8fb5f46a25d515b3b2bf2238fdbfcdbfd01d2a9e73cb8 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.13.11": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.4.3": + version: 1.4.3 + resolution: "regexp.prototype.flags@npm:1.4.3" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + functions-have-names: ^1.2.2 + checksum: 51228bae732592adb3ededd5e15426be25f289e9c4ef15212f4da73f4ec3919b6140806374b8894036a86020d054a8d2657d3fee6bb9b4d35d8939c20030b7a6 + languageName: node + linkType: hard + +"registry-url@npm:^5.1.0": + version: 5.1.0 + resolution: "registry-url@npm:5.1.0" + dependencies: + rc: ^1.2.8 + checksum: bcea86c84a0dbb66467b53187fadebfea79017cddfb4a45cf27530d7275e49082fe9f44301976eb0164c438e395684bcf3dae4819b36ff9d1640d8cc60c73df9 + languageName: node + linkType: hard + +"remove-markdown@npm:^0.3.0": + version: 0.3.0 + resolution: "remove-markdown@npm:0.3.0" + checksum: c3e40122e5057096c04881b8a0bccf41f913e352d106f4debded28bd824daab1d1cda64a67ed6a76064bc0a78d9b6c0feba3f933b44c6ffc50608249524ad2dd + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"require-main-filename@npm:^2.0.0": + version: 2.0.0 + resolution: "require-main-filename@npm:2.0.0" + checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7 + languageName: node + linkType: hard + +"requireg@npm:^0.2.2": + version: 0.2.2 + resolution: "requireg@npm:0.2.2" + dependencies: + nested-error-stacks: ~2.0.1 + rc: ~1.2.7 + resolve: ~1.7.1 + checksum: 99b420a02e7272717153cdf75891cbb133c02c04b287721eb1bdb0668b6a98aa1da38c08d8148fc8b1443a668d939eeb622d390538ac8da17b18a977ebe998ae + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: ^5.0.0 + checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 + languageName: node + linkType: hard + +"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f + languageName: node + linkType: hard + +"resolve.exports@npm:^2.0.0": + version: 2.0.1 + resolution: "resolve.exports@npm:2.0.1" + checksum: 03be177026b4fe8dc1b2ffb421bce9cbf7fe3446e9f0c958df9fc8e144864b3eeea19fe788e057fd8be6b5655e65ce245b4f379258c1336e2e8f9205cbd4a9b4 + languageName: node + linkType: hard + +"resolve@npm:^1.10.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1": + version: 1.22.1 + resolution: "resolve@npm:1.22.1" + dependencies: + is-core-module: ^2.9.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 07af5fc1e81aa1d866cbc9e9460fbb67318a10fa3c4deadc35c3ad8a898ee9a71a86a65e4755ac3195e0ea0cfbe201eb323ebe655ce90526fd61917313a34e4e + languageName: node + linkType: hard + +"resolve@npm:~1.7.1": + version: 1.7.1 + resolution: "resolve@npm:1.7.1" + dependencies: + path-parse: ^1.0.5 + checksum: afb829d4b923f9b17aaf55320c2feaf8d44577674a3a71510d299f832fb80f6703e5a701e01cf774c3241fe8663d4b2b99053cfbca7995488d18ea9f8c7ac309 + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin": + version: 1.22.1 + resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=c3c19d" + dependencies: + is-core-module: ^2.9.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 5656f4d0bedcf8eb52685c1abdf8fbe73a1603bb1160a24d716e27a57f6cecbe2432ff9c89c2bd57542c3a7b9d14b1882b73bfe2e9d7849c9a4c0b8b39f02b8b + languageName: node + linkType: hard + +"resolve@patch:resolve@~1.7.1#~builtin": + version: 1.7.1 + resolution: "resolve@patch:resolve@npm%3A1.7.1#~builtin::version=1.7.1&hash=3bafbf" + dependencies: + path-parse: ^1.0.5 + checksum: c2a6f0e3856ac1ddc8297091c20ca6c36d99bf289ddea366c46bd2a7ed8b31075c7f9d01ff5d390ebed1fe41b9fabe57a79ae087992ba92e3592f0c3be07c1ac + languageName: node + linkType: hard + +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: ^5.1.0 + signal-exit: ^3.0.2 + checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc + languageName: node + linkType: hard + +"rfdc@npm:^1.3.0": + version: 1.3.0 + resolution: "rfdc@npm:1.3.0" + checksum: fb2ba8512e43519983b4c61bd3fa77c0f410eff6bae68b08614437bc3f35f91362215f7b4a73cbda6f67330b5746ce07db5dd9850ad3edc91271ad6deea0df32 + languageName: node + linkType: hard + +"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"rimraf@npm:^4.4.1": + version: 4.4.1 + resolution: "rimraf@npm:4.4.1" + dependencies: + glob: ^9.2.0 + bin: + rimraf: dist/cjs/src/bin.js + checksum: b786adc02651e2e24bbedb04bbdea80652fc9612632931ff2d9f898c5e4708fe30956186597373c568bd5230a4dc2fadfc816ccacba8a1daded3a006a6b74f1a + languageName: node + linkType: hard + +"rollup@npm:^3.2.5": + version: 3.20.0 + resolution: "rollup@npm:3.20.0" + dependencies: + fsevents: ~2.3.2 + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: ebf75f48eb81234f8233b4ed145b00841cefba26802d4f069f161247ffba085ca5bb165cc3cd662d9c36cfc135a67660dfff9088d3da2d2c6a70addc15f3233a + languageName: node + linkType: hard + +"run-async@npm:^2.4.0": + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"rxjs@npm:^6.6.0": + version: 6.6.7 + resolution: "rxjs@npm:6.6.7" + dependencies: + tslib: ^1.9.0 + checksum: bc334edef1bb8bbf56590b0b25734ba0deaf8825b703256a93714308ea36dff8a11d25533671adf8e104e5e8f256aa6fdfe39b2e248cdbd7a5f90c260acbbd1b + languageName: node + linkType: hard + +"rxjs@npm:^7.5.5, rxjs@npm:^7.8.0": + version: 7.8.0 + resolution: "rxjs@npm:7.8.0" + dependencies: + tslib: ^2.1.0 + checksum: 61b4d4fd323c1043d8d6ceb91f24183b28bcf5def4f01ca111511d5c6b66755bc5578587fe714ef5d67cf4c9f2e26f4490d4e1d8cabf9bd5967687835e9866a2 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-regex-test@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.3 + is-regex: ^1.1.4 + checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.6.0": + version: 5.7.1 + resolution: "semver@npm:5.7.1" + bin: + semver: ./bin/semver + checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf + languageName: node + linkType: hard + +"semver@npm:7.3.4": + version: 7.3.4 + resolution: "semver@npm:7.3.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 96451bfd7cba9b60ee87571959dc47e87c95b2fe58a9312a926340fee9907fc7bc062c352efdaf5bb24b2dff59c145e14faf7eb9d718a84b4751312531b39f43 + languageName: node + linkType: hard + +"semver@npm:7.3.8, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8": + version: 7.3.8 + resolution: "semver@npm:7.3.8" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: ba9c7cbbf2b7884696523450a61fee1a09930d888b7a8d7579025ad93d459b2d1949ee5bbfeb188b2be5f4ac163544c5e98491ad6152df34154feebc2cc337c1 + languageName: node + linkType: hard + +"semver@npm:^6.0.0, semver@npm:^6.3.0": + version: 6.3.0 + resolution: "semver@npm:6.3.0" + bin: + semver: ./bin/semver.js + checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: ^6.0.2 + checksum: 39b3dd9630a774aba288a680e7d2901f5c0eae7b8387fc5c8ea559918b29b3da144b7bdb990d7ccd9e11be05508ac9e459ce51d01fd65e583282f6ffafcba2e7 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.4 + resolution: "side-channel@npm:1.0.4" + dependencies: + call-bind: ^1.0.0 + get-intrinsic: ^1.0.2 + object-inspect: ^1.9.0 + checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245 + languageName: node + linkType: hard + +"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signale@npm:^1.4.0": + version: 1.4.0 + resolution: "signale@npm:1.4.0" + dependencies: + chalk: ^2.3.2 + figures: ^2.0.0 + pkg-conf: ^2.1.0 + checksum: a6a540e054096a1f4cf8b1f21fea62ca3e44a19faa63bd486723b736348609caab1fa59a87f16559de347dde8ae1fdebfc25a8b6723c88ae8239f176ffb0dda5 + languageName: node + linkType: hard + +"sigstore@npm:^1.0.0": + version: 1.2.0 + resolution: "sigstore@npm:1.2.0" + dependencies: + "@sigstore/protobuf-specs": ^0.1.0 + make-fetch-happen: ^11.0.1 + tuf-js: ^1.0.0 + bin: + sigstore: bin/sigstore.js + checksum: 8b06341a1bee97f363a8cab62102b27c88714c5ad9743fada5effb46cc3a5935c27c8149669384f0be7040c8f0c4e69bb7d533f138bdcf3aba91b803a69eac77 + languageName: node + linkType: hard + +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 + languageName: node + linkType: hard + +"slash@npm:3.0.0, slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"slash@npm:^1.0.0": + version: 1.0.0 + resolution: "slash@npm:1.0.0" + checksum: 4b6e21b1fba6184a7e2efb1dd173f692d8a845584c1bbf9dc818ff86f5a52fc91b413008223d17cc684604ee8bb9263a420b1182027ad9762e35388434918860 + languageName: node + linkType: hard + +"slash@npm:^4.0.0": + version: 4.0.0 + resolution: "slash@npm:4.0.0" + checksum: da8e4af73712253acd21b7853b7e0dbba776b786e82b010a5bfc8b5051a1db38ed8aba8e1e8f400dd2c9f373be91eb1c42b66e91abb407ff42b10feece5e1d2d + languageName: node + linkType: hard + +"slice-ansi@npm:^3.0.0": + version: 3.0.0 + resolution: "slice-ansi@npm:3.0.0" + dependencies: + ansi-styles: ^4.0.0 + astral-regex: ^2.0.0 + is-fullwidth-code-point: ^3.0.0 + checksum: 5ec6d022d12e016347e9e3e98a7eb2a592213a43a65f1b61b74d2c78288da0aded781f665807a9f3876b9daa9ad94f64f77d7633a0458876c3a4fdc4eb223f24 + languageName: node + linkType: hard + +"slice-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "slice-ansi@npm:4.0.0" + dependencies: + ansi-styles: ^4.0.0 + astral-regex: ^2.0.0 + is-fullwidth-code-point: ^3.0.0 + checksum: 4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756 + languageName: node + linkType: hard + +"slice-ansi@npm:^5.0.0": + version: 5.0.0 + resolution: "slice-ansi@npm:5.0.0" + dependencies: + ansi-styles: ^6.0.0 + is-fullwidth-code-point: ^4.0.0 + checksum: 7e600a2a55e333a21ef5214b987c8358fe28bfb03c2867ff2cbf919d62143d1812ac27b4297a077fdaf27a03da3678e49551c93e35f9498a3d90221908a1180e + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "socks-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^6.0.2 + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 + languageName: node + linkType: hard + +"socks@npm:^2.6.2": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + languageName: node + linkType: hard + +"sort-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "sort-keys@npm:2.0.0" + dependencies: + is-plain-obj: ^1.0.0 + checksum: f0fd827fa9f8f866e98588d2a38c35209afbf1e9a05bb0e4ceeeb8bbf31d923c8902b0a7e0f561590ddb65e58eba6a74f74b991c85360bcc52e83a3f0d1cffd7 + languageName: node + linkType: hard + +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 + languageName: node + linkType: hard + +"source-map-support@npm:^0.5.17, source-map-support@npm:^0.5.21": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 + languageName: node + linkType: hard + +"source-map@npm:0.8.0-beta.0": + version: 0.8.0-beta.0 + resolution: "source-map@npm:0.8.0-beta.0" + dependencies: + whatwg-url: ^7.0.0 + checksum: e94169be6461ab0ac0913313ad1719a14c60d402bd22b0ad96f4a6cffd79130d91ab5df0a5336a326b04d2df131c1409f563c9dc0d21a6ca6239a44b6c8dbd92 + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: ^3.0.0 + spdx-license-ids: ^3.0.0 + checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.3.0 + resolution: "spdx-exceptions@npm:2.3.0" + checksum: cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: ^2.1.0 + spdx-license-ids: ^3.0.0 + checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.13 + resolution: "spdx-license-ids@npm:3.0.13" + checksum: 3469d85c65f3245a279fa11afc250c3dca96e9e847f2f79d57f466940c5bb8495da08a542646086d499b7f24a74b8d0b42f3fc0f95d50ff99af1f599f6360ad7 + languageName: node + linkType: hard + +"split2@npm:^3.0.0": + version: 3.2.2 + resolution: "split2@npm:3.2.2" + dependencies: + readable-stream: ^3.0.0 + checksum: 8127ddbedd0faf31f232c0e9192fede469913aa8982aa380752e0463b2e31c2359ef6962eb2d24c125bac59eeec76873678d723b1c7ff696216a1cd071e3994a + languageName: node + linkType: hard + +"split@npm:^1.0.0": + version: 1.0.1 + resolution: "split@npm:1.0.1" + dependencies: + through: 2 + checksum: 12f4554a5792c7e98bb3e22b53c63bfa5ef89aa704353e1db608a55b51f5b12afaad6e4a8ecf7843c15f273f43cdadd67b3705cc43d48a75c2cf4641d51f7e7a + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 + languageName: node + linkType: hard + +"ssri@npm:9.0.1, ssri@npm:^9.0.0": + version: 9.0.1 + resolution: "ssri@npm:9.0.1" + dependencies: + minipass: ^3.1.1 + checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb + languageName: node + linkType: hard + +"ssri@npm:^10.0.0, ssri@npm:^10.0.1": + version: 10.0.1 + resolution: "ssri@npm:10.0.1" + dependencies: + minipass: ^4.0.0 + checksum: f35b147e5e16a3e1c8e3f71a4aaf5b1f7a9eb5559acbba21213c8171827921cecf56d3570118da7ade124776d25ed17d5e4c80eccbb2a083b17ce36dd24c3e5e + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: ^2.0.0 + checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 + languageName: node + linkType: hard + +"string-argv@npm:^0.3.1": + version: 0.3.1 + resolution: "string-argv@npm:0.3.1" + checksum: efbd0289b599bee808ce80820dfe49c9635610715429c6b7cc50750f0437e3c2f697c81e5c390208c13b5d5d12d904a1546172a88579f6ee5cbaaaa4dc9ec5cf + languageName: node + linkType: hard + +"string-length@npm:^4.0.1": + version: 4.0.2 + resolution: "string-length@npm:4.0.2" + dependencies: + char-regex: ^1.0.2 + strip-ansi: ^6.0.0 + checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 + languageName: node + linkType: hard + +"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.0": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.7": + version: 1.2.7 + resolution: "string.prototype.trim@npm:1.2.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 05b7b2d6af63648e70e44c4a8d10d8cc457536df78b55b9d6230918bde75c5987f6b8604438c4c8652eb55e4fc9725d2912789eb4ec457d6995f3495af190c09 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.6": + version: 1.0.6 + resolution: "string.prototype.trimend@npm:1.0.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 0fdc34645a639bd35179b5a08227a353b88dc089adf438f46be8a7c197fc3f22f8514c1c9be4629b3cd29c281582730a8cbbad6466c60f76b5f99cf2addb132e + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.6": + version: 1.0.6 + resolution: "string.prototype.trimstart@npm:1.0.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 89080feef416621e6ef1279588994305477a7a91648d9436490d56010a1f7adc39167cddac7ce0b9884b8cdbef086987c4dcb2960209f2af8bac0d23ceff4f41 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: ~5.2.0 + checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + +"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.0.1 + resolution: "strip-ansi@npm:7.0.1" + dependencies: + ansi-regex: ^6.0.1 + checksum: 257f78fa433520e7f9897722731d78599cb3fce29ff26a20a5e12ba4957463b50a01136f37c43707f4951817a75e90820174853d6ccc240997adc5df8f966039 + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b + languageName: node + linkType: hard + +"strip-bom@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-bom@npm:4.0.0" + checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 + languageName: node + linkType: hard + +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: 23ee263adfa2070cd0f23d1ac14e2ed2f000c9b44229aec9c799f1367ec001478469560abefd00c5c99ee6f0b31c137d53ec6029c53e9f32a93804e18c201050 + languageName: node + linkType: hard + +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: ^1.0.0 + checksum: 18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.0.1, strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 + languageName: node + linkType: hard + +"strong-log-transformer@npm:2.1.0, strong-log-transformer@npm:^2.1.0": + version: 2.1.0 + resolution: "strong-log-transformer@npm:2.1.0" + dependencies: + duplexer: ^0.1.1 + minimist: ^1.2.0 + through: ^2.3.4 + bin: + sl-log-transformer: bin/sl-log-transformer.js + checksum: abf9a4ac143118f26c3a0771b204b02f5cf4fa80384ae158f25e02bfbff761038accc44a7f65869ccd5a5995a7f2c16b1466b83149644ba6cecd3072a8927297 + languageName: node + linkType: hard + +"sucrase@npm:^3.20.3": + version: 3.30.0 + resolution: "sucrase@npm:3.30.0" + dependencies: + commander: ^4.0.0 + glob: 7.1.6 + lines-and-columns: ^1.1.6 + mz: ^2.7.0 + pirates: ^4.0.1 + ts-interface-checker: ^0.1.9 + bin: + sucrase: bin/sucrase + sucrase-node: bin/sucrase-node + checksum: 9d53ee132f8063573c9f336c2dbc00a1f91fb976a4ad4dca29a15a898d361e6d4a06ada086c6881fe63389d96392cbd761d790a8175a6ecb184eaa337d58f363 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + +"supports-hyperlinks@npm:^2.0.0": + version: 2.3.0 + resolution: "supports-hyperlinks@npm:2.3.0" + dependencies: + has-flag: ^4.0.0 + supports-color: ^7.0.0 + checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae + languageName: node + linkType: hard + +"synckit@npm:^0.8.5": + version: 0.8.5 + resolution: "synckit@npm:0.8.5" + dependencies: + "@pkgr/utils": ^2.3.1 + tslib: ^2.5.0 + checksum: 8a9560e5d8f3d94dc3cf5f7b9c83490ffa30d320093560a37b88f59483040771fd1750e76b9939abfbb1b5a23fd6dfbae77f6b338abffe7cae7329cd9b9bb86b + languageName: node + linkType: hard + +"sywac@npm:^1.3.0": + version: 1.3.0 + resolution: "sywac@npm:1.3.0" + checksum: 3cf8afc932344fd7d78e71622f92f31bf7b06e0d76e909d124ce9d8388b24699ef0c780510a46bd259f401fab8c2dc315d3bd7bb0d79716fd3f624f6f04eb53d + languageName: node + linkType: hard + +"table-layout@npm:^1.0.2": + version: 1.0.2 + resolution: "table-layout@npm:1.0.2" + dependencies: + array-back: ^4.0.1 + deep-extend: ~0.6.0 + typical: ^5.2.0 + wordwrapjs: ^4.0.0 + checksum: 8f41b5671f101a5195747ec1727b1d35ea2cd5bf85addda11cc2f4b36892db9696ce3c2c7334b5b8a122505b34d19135fede50e25678df71b0439e0704fd953f + languageName: node + linkType: hard + +"tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 + languageName: node + linkType: hard + +"tar-stream@npm:~2.2.0": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: ^4.0.3 + end-of-stream: ^1.4.1 + fs-constants: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^3.1.1 + checksum: 699831a8b97666ef50021c767f84924cfee21c142c2eb0e79c63254e140e6408d6d55a065a2992548e72b06de39237ef2b802b99e3ece93ca3904a37622a66f3 + languageName: node + linkType: hard + +"tar@npm:6.1.11": + version: 6.1.11 + resolution: "tar@npm:6.1.11" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^3.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: a04c07bb9e2d8f46776517d4618f2406fb977a74d914ad98b264fc3db0fe8224da5bec11e5f8902c5b9bcb8ace22d95fbe3c7b36b8593b7dfc8391a25898f32f + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.1.13 + resolution: "tar@npm:6.1.13" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^4.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: 8a278bed123aa9f53549b256a36b719e317c8b96fe86a63406f3c62887f78267cea9b22dc6f7007009738509800d4a4dccc444abd71d762287c90f35b002eb1c + languageName: node + linkType: hard + +"temp-dir@npm:1.0.0": + version: 1.0.0 + resolution: "temp-dir@npm:1.0.0" + checksum: cb2b58ddfb12efa83e939091386ad73b425c9a8487ea0095fe4653192a40d49184a771a1beba99045fbd011e389fd563122d79f54f82be86a55620667e08a6b2 + languageName: node + linkType: hard + +"temp-dir@npm:^2.0.0": + version: 2.0.0 + resolution: "temp-dir@npm:2.0.0" + checksum: cc4f0404bf8d6ae1a166e0e64f3f409b423f4d1274d8c02814a59a5529f07db6cd070a749664141b992b2c1af337fa9bb451a460a43bb9bcddc49f235d3115aa + languageName: node + linkType: hard + +"tempy@npm:1.0.0": + version: 1.0.0 + resolution: "tempy@npm:1.0.0" + dependencies: + del: ^6.0.0 + is-stream: ^2.0.0 + temp-dir: ^2.0.0 + type-fest: ^0.16.0 + unique-string: ^2.0.0 + checksum: 11541b9d4c5b6b6e4912ded3058cfb5a1294dcc0519b73fc1fc74f950f9a68cd380f78cbefe38514ac9233f749efc6486ac14592dcb29ad35a9b3807328cba1b + languageName: node + linkType: hard + +"terminal-link@npm:^2.1.1": + version: 2.1.1 + resolution: "terminal-link@npm:2.1.1" + dependencies: + ansi-escapes: ^4.2.1 + supports-hyperlinks: ^2.0.0 + checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f + languageName: node + linkType: hard + +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": ^0.1.2 + glob: ^7.1.4 + minimatch: ^3.0.4 + checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 + languageName: node + linkType: hard + +"text-extensions@npm:^1.0.0": + version: 1.9.0 + resolution: "text-extensions@npm:1.9.0" + checksum: 56a9962c1b62d39b2bcb369b7558ca85c1b55e554b38dfd725edcc0a1babe5815782a60c17ff6b839093b163dfebb92b804208aaaea616ec7571c8059ae0cf44 + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a + languageName: node + linkType: hard + +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: ">= 3.1.0 < 4" + checksum: dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: ^1.0.0 + checksum: 84e1b804bfec49f3531215f17b4a6e50fd4397b5f7c1bccc427b9c656e1ecfb13ea79d899930184f78bc2f57285c54d9a50a590c8868f4f0cef5c1d9f898b05e + languageName: node + linkType: hard + +"through2@npm:^2.0.0": + version: 2.0.5 + resolution: "through2@npm:2.0.5" + dependencies: + readable-stream: ~2.3.6 + xtend: ~4.0.1 + checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50 + languageName: node + linkType: hard + +"through2@npm:^4.0.0": + version: 4.0.2 + resolution: "through2@npm:4.0.2" + dependencies: + readable-stream: 3 + checksum: ac7430bd54ccb7920fd094b1c7ff3e1ad6edd94202e5528331253e5fde0cc56ceaa690e8df9895de2e073148c52dfbe6c4db74cacae812477a35660090960cc0 + languageName: node + linkType: hard + +"through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.4, through@npm:^2.3.6, through@npm:^2.3.8": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd + languageName: node + linkType: hard + +"tiny-glob@npm:^0.2.9": + version: 0.2.9 + resolution: "tiny-glob@npm:0.2.9" + dependencies: + globalyzer: 0.1.0 + globrex: ^0.1.2 + checksum: aea5801eb6663ddf77ebb74900b8f8bd9dfcfc9b6a1cc8018cb7421590c00bf446109ff45e4b64a98e6c95ddb1255a337a5d488fb6311930e2a95334151ec9c6 + languageName: node + linkType: hard + +"tinycolor2@npm:^1.4.1": + version: 1.6.0 + resolution: "tinycolor2@npm:1.6.0" + checksum: 6df4d07fceeedc0a878d7bac47e2cd47c1ceeb1078340a9eb8a295bc0651e17c750f73d47b3028d829f30b85c15e0572c0fd4142083e4c21a30a597e47f47230 + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: ~1.0.2 + checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 + languageName: node + linkType: hard + +"tmp@npm:~0.2.1": + version: 0.2.1 + resolution: "tmp@npm:0.2.1" + dependencies: + rimraf: ^3.0.0 + checksum: 8b1214654182575124498c87ca986ac53dc76ff36e8f0e0b67139a8d221eaecfdec108c0e6ec54d76f49f1f72ab9325500b246f562b926f85bcdfca8bf35df9e + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 + languageName: node + linkType: hard + +"to-fast-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "to-fast-properties@npm:2.0.0" + checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"tr46@npm:^1.0.1": + version: 1.0.1 + resolution: "tr46@npm:1.0.1" + dependencies: + punycode: ^2.1.0 + checksum: 96d4ed46bc161db75dbf9247a236ea0bfcaf5758baae6749e92afab0bc5a09cb59af21788ede7e55080f2bf02dce3e4a8f2a484cc45164e29f4b5e68f7cbcc1a + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + +"tree-kill@npm:^1.2.2": + version: 1.2.2 + resolution: "tree-kill@npm:1.2.2" + bin: + tree-kill: cli.js + checksum: 49117f5f410d19c84b0464d29afb9642c863bc5ba40fcb9a245d474c6d5cc64d1b177a6e6713129eb346b40aebb9d4631d967517f9fbe8251c35b21b13cd96c7 + languageName: node + linkType: hard + +"treeverse@npm:^3.0.0": + version: 3.0.0 + resolution: "treeverse@npm:3.0.0" + checksum: 73168d9887fa57b0719218f176c5a3cfbaaf310922879acb4adf76665bc17dcdb6ed3e4163f0c27eee17e346886186a1515ea6f87e96cdc10df1dce13bf622a0 + languageName: node + linkType: hard + +"trim-newlines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-newlines@npm:3.0.1" + checksum: b530f3fadf78e570cf3c761fb74fef655beff6b0f84b29209bac6c9622db75ad1417f4a7b5d54c96605dcd72734ad44526fef9f396807b90839449eb543c6206 + languageName: node + linkType: hard + +"ts-interface-checker@npm:^0.1.9": + version: 0.1.13 + resolution: "ts-interface-checker@npm:0.1.13" + checksum: 20c29189c2dd6067a8775e07823ddf8d59a33e2ffc47a1bd59a5cb28bb0121a2969a816d5e77eda2ed85b18171aa5d1c4005a6b88ae8499ec7cc49f78571cb5e + languageName: node + linkType: hard + +"ts-node@npm:^10.9.1": + version: 10.9.1 + resolution: "ts-node@npm:10.9.1" + dependencies: + "@cspotcode/source-map-support": ^0.8.0 + "@tsconfig/node10": ^1.0.7 + "@tsconfig/node12": ^1.0.7 + "@tsconfig/node14": ^1.0.0 + "@tsconfig/node16": ^1.0.2 + acorn: ^8.4.1 + acorn-walk: ^8.1.1 + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + v8-compile-cache-lib: ^3.0.1 + yn: 3.1.1 + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 + languageName: node + linkType: hard + +"ts-node@npm:^9": + version: 9.1.1 + resolution: "ts-node@npm:9.1.1" + dependencies: + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + source-map-support: ^0.5.17 + yn: 3.1.1 + peerDependencies: + typescript: ">=2.7" + bin: + ts-node: dist/bin.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 356e2647b8b1e6ab00380c0537fa569b63bd9b6f006cc40fd650f81fae1817bd8fecc075300036950d8f45c1d85b95be33cd1e48a1a424a7d86c3dbb42bf60e5 + languageName: node + linkType: hard + +"tsconfig-paths@npm:^3.14.1": + version: 3.14.2 + resolution: "tsconfig-paths@npm:3.14.2" + dependencies: + "@types/json5": ^0.0.29 + json5: ^1.0.2 + minimist: ^1.2.6 + strip-bom: ^3.0.0 + checksum: a6162eaa1aed680537f93621b82399c7856afd10ec299867b13a0675e981acac4e0ec00896860480efc59fc10fd0b16fdc928c0b885865b52be62cadac692447 + languageName: node + linkType: hard + +"tsconfig-paths@npm:^4.1.2": + version: 4.1.2 + resolution: "tsconfig-paths@npm:4.1.2" + dependencies: + json5: ^2.2.2 + minimist: ^1.2.6 + strip-bom: ^3.0.0 + checksum: 3d9151ecea139594e25618717de15769ab9f38f8e6d510ac16e592b23e7f7105ea13cec5694c3de7e132c98277b775e18edd1651964164ee6d75737c408494cc + languageName: node + linkType: hard + +"tslib@npm:1.10.0": + version: 1.10.0 + resolution: "tslib@npm:1.10.0" + checksum: 1d0450dc6f64b918b14acaf3b956ebe1c72d7401c632adce932a60e3cd8d2a70f6040ceef6a7c3561146c3f29bcf584c41c2e09a5d20a27d6c3057f0d5f2a836 + languageName: node + linkType: hard + +"tslib@npm:2.1.0": + version: 2.1.0 + resolution: "tslib@npm:2.1.0" + checksum: aa189c8179de0427b0906da30926fd53c59d96ec239dff87d6e6bc831f608df0cbd6f77c61dabc074408bd0aa0b9ae4ec35cb2c15f729e32f37274db5730cb78 + languageName: node + linkType: hard + +"tslib@npm:^1.14.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd + languageName: node + linkType: hard + +"tslib@npm:^2, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.5.0": + version: 2.5.0 + resolution: "tslib@npm:2.5.0" + checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 + languageName: node + linkType: hard + +"tsup@npm:^6.7.0": + version: 6.7.0 + resolution: "tsup@npm:6.7.0" + dependencies: + bundle-require: ^4.0.0 + cac: ^6.7.12 + chokidar: ^3.5.1 + debug: ^4.3.1 + esbuild: ^0.17.6 + execa: ^5.0.0 + globby: ^11.0.3 + joycon: ^3.0.1 + postcss-load-config: ^3.0.1 + resolve-from: ^5.0.0 + rollup: ^3.2.5 + source-map: 0.8.0-beta.0 + sucrase: ^3.20.3 + tree-kill: ^1.2.2 + peerDependencies: + "@swc/core": ^1 + postcss: ^8.4.12 + typescript: ">=4.1.0" + peerDependenciesMeta: + "@swc/core": + optional: true + postcss: + optional: true + typescript: + optional: true + bin: + tsup: dist/cli-default.js + tsup-node: dist/cli-node.js + checksum: 91ff179f0b9828a6880b6decaa8603fd7af0311f46a38d3a93647a2497298750d676810aeff533a335443a01a7b340dbba7c76523bcd7a87d7b05b7677742901 + languageName: node + linkType: hard + +"tsutils@npm:^3.21.0": + version: 3.21.0 + resolution: "tsutils@npm:3.21.0" + dependencies: + tslib: ^1.8.1 + peerDependencies: + typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + checksum: 1843f4c1b2e0f975e08c4c21caa4af4f7f65a12ac1b81b3b8489366826259323feb3fc7a243123453d2d1a02314205a7634e048d4a8009921da19f99755cdc48 + languageName: node + linkType: hard + +"tsx@npm:^3.12.6": + version: 3.12.6 + resolution: "tsx@npm:3.12.6" + dependencies: + "@esbuild-kit/cjs-loader": ^2.4.2 + "@esbuild-kit/core-utils": ^3.0.0 + "@esbuild-kit/esm-loader": ^2.5.5 + fsevents: ~2.3.2 + dependenciesMeta: + fsevents: + optional: true + bin: + tsx: dist/cli.js + checksum: f503096f3b56ea521eaf8ed65bf7ad6f04749f9251ce168981d7b7483fadd4a6247a35184099c3bc5d43574c6f4eef6f2a58e45e31f002e78ba94120765f95c5 + languageName: node + linkType: hard + +"tuf-js@npm:^1.0.0": + version: 1.1.2 + resolution: "tuf-js@npm:1.1.2" + dependencies: + "@tufjs/models": 1.0.1 + make-fetch-happen: ^11.0.1 + checksum: 05fd85c12de74fddd7ddc7d6dd3e4d36f09cd4834d1b9fbcb4c067f0cdf7e9a9cb9323f515f014f5e17441376d417ef634ffd2aa0850aead63db5f9e41ccce09 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: ^1.2.1 + checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a + languageName: node + linkType: hard + +"type-detect@npm:4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 + languageName: node + linkType: hard + +"type-fest@npm:^0.16.0": + version: 0.16.0 + resolution: "type-fest@npm:0.16.0" + checksum: 1a4102c06dc109db00418c753062e206cab65befd469d000ece4452ee649bf2a9cf57686d96fb42326bc9d918d9a194d4452897b486dcc41989e5c99e4e87094 + languageName: node + linkType: hard + +"type-fest@npm:^0.18.0": + version: 0.18.1 + resolution: "type-fest@npm:0.18.1" + checksum: e96dcee18abe50ec82dab6cbc4751b3a82046da54c52e3b2d035b3c519732c0b3dd7a2fa9df24efd1a38d953d8d4813c50985f215f1957ee5e4f26b0fe0da395 + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.1, type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 + languageName: node + linkType: hard + +"type-fest@npm:^0.4.1": + version: 0.4.1 + resolution: "type-fest@npm:0.4.1" + checksum: 25f882d9cc2f24af7a0a529157f96dead157894c456bfbad16d48f990c43b470dfb79848e8d9c03fe1be72a7d169e44f6f3135b54628393c66a6189c5dc077f7 + languageName: node + linkType: hard + +"type-fest@npm:^0.6.0": + version: 0.6.0 + resolution: "type-fest@npm:0.6.0" + checksum: b2188e6e4b21557f6e92960ec496d28a51d68658018cba8b597bd3ef757721d1db309f120ae987abeeda874511d14b776157ff809f23c6d1ce8f83b9b2b7d60f + languageName: node + linkType: hard + +"type-fest@npm:^0.8.1": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: d61c4b2eba24009033ae4500d7d818a94fd6d1b481a8111612ee141400d5f1db46f199c014766b9fa9b31a6a7374d96fc748c6d688a78a3ce5a33123839becb7 + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-length@npm:1.0.4" + dependencies: + call-bind: ^1.0.2 + for-each: ^0.3.3 + is-typed-array: ^1.1.9 + checksum: 2228febc93c7feff142b8c96a58d4a0d7623ecde6c7a24b2b98eb3170e99f7c7eff8c114f9b283085cd59dcd2bd43aadf20e25bba4b034a53c5bb292f71f8956 + languageName: node + linkType: hard + +"typedarray@npm:^0.0.6": + version: 0.0.6 + resolution: "typedarray@npm:0.0.6" + checksum: 33b39f3d0e8463985eeaeeacc3cb2e28bc3dfaf2a5ed219628c0b629d5d7b810b0eb2165f9f607c34871d5daa92ba1dc69f49051cf7d578b4cbd26c340b9d1b1 + languageName: node + linkType: hard + +"types@npm:^0.1.1": + version: 0.1.1 + resolution: "types@npm:0.1.1" + checksum: 259d052f6a23e8ac2f8b11e83fb6d97d4314d5ec510f68e1d9ed9b9c8c93b6fb1a43467b5b44d450ae1014d1d445021da2562035cd377d2f2e627574dc77737f + languageName: node + linkType: hard + +"typescript-memoize@npm:^1.0.0-alpha.3": + version: 1.1.1 + resolution: "typescript-memoize@npm:1.1.1" + checksum: c4035ccda6c156437e0a302f4a0b4cbdfa70c59729d20434f66ecefd45ab5df057792eafe9e05e3e167efc6221b70f474b2789f93a2b0da2a949bc419f3b60ce + languageName: node + linkType: hard + +"typescript@npm:^3 || ^4, typescript@npm:^4.9.5": + version: 4.9.5 + resolution: "typescript@npm:4.9.5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db + languageName: node + linkType: hard + +"typescript@patch:typescript@^3 || ^4#~builtin, typescript@patch:typescript@^4.9.5#~builtin": + version: 4.9.5 + resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=23ec76" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: ab417a2f398380c90a6cf5a5f74badd17866adf57f1165617d6a551f059c3ba0a3e4da0d147b3ac5681db9ac76a303c5876394b13b3de75fdd5b1eaa06181c9d + languageName: node + linkType: hard + +"typical@npm:^4.0.0": + version: 4.0.0 + resolution: "typical@npm:4.0.0" + checksum: a242081956825328f535e6195a924240b34daf6e7fdb573a1809a42b9f37fb8114fa99c7ab89a695e0cdb419d4149d067f6723e4b95855ffd39c6c4ca378efb3 + languageName: node + linkType: hard + +"typical@npm:^5.2.0": + version: 5.2.0 + resolution: "typical@npm:5.2.0" + checksum: ccaeb151a9a556291b495571ca44c4660f736fb49c29314bbf773c90fad92e9485d3cc2b074c933866c1595abbbc962f2b8bfc6e0f52a8c6b0cdd205442036ac + languageName: node + linkType: hard + +"uglify-js@npm:^3.1.4": + version: 3.17.4 + resolution: "uglify-js@npm:3.17.4" + bin: + uglifyjs: bin/uglifyjs + checksum: 7b3897df38b6fc7d7d9f4dcd658599d81aa2b1fb0d074829dd4e5290f7318dbca1f4af2f45acb833b95b1fe0ed4698662ab61b87e94328eb4c0a0d3435baf924 + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + has-bigints: ^1.0.2 + has-symbols: ^1.0.3 + which-boxed-primitive: ^1.0.2 + checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 + languageName: node + linkType: hard + +"unique-filename@npm:^2.0.0": + version: 2.0.1 + resolution: "unique-filename@npm:2.0.1" + dependencies: + unique-slug: ^3.0.0 + checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-slug@npm:3.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"unique-string@npm:^2.0.0": + version: 2.0.0 + resolution: "unique-string@npm:2.0.0" + dependencies: + crypto-random-string: ^2.0.0 + checksum: ef68f639136bcfe040cf7e3cd7a8dff076a665288122855148a6f7134092e6ed33bf83a7f3a9185e46c98dddc445a0da6ac25612afa1a7c38b8b654d6c02498e + languageName: node + linkType: hard + +"universal-user-agent@npm:^6.0.0": + version: 6.0.0 + resolution: "universal-user-agent@npm:6.0.0" + checksum: 5092bbc80dd0d583cef0b62c17df0043193b74f425112ea6c1f69bc5eda21eeec7a08d8c4f793a277eb2202ffe9b44bec852fa3faff971234cd209874d1b79ef + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.0 + resolution: "universalify@npm:2.0.0" + checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 + languageName: node + linkType: hard + +"upath@npm:2.0.1, upath@npm:^2.0.1": + version: 2.0.1 + resolution: "upath@npm:2.0.1" + checksum: 2db04f24a03ef72204c7b969d6991abec9e2cb06fb4c13a1fd1c59bc33b46526b16c3325e55930a11ff86a77a8cbbcda8f6399bf914087028c5beae21ecdb33c + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.0.10": + version: 1.0.10 + resolution: "update-browserslist-db@npm:1.0.10" + dependencies: + escalade: ^3.1.1 + picocolors: ^1.0.0 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + browserslist-lint: cli.js + checksum: 12db73b4f63029ac407b153732e7cd69a1ea8206c9100b482b7d12859cd3cd0bc59c602d7ae31e652706189f1acb90d42c53ab24a5ba563ed13aebdddc5561a0 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"url-join@npm:^4.0.0": + version: 4.0.1 + resolution: "url-join@npm:4.0.1" + checksum: f74e868bf25dbc8be6a8d7237d4c36bb5b6c62c72e594d5ab1347fe91d6af7ccd9eb5d621e30152e4da45c2e9a26bec21390e911ab54a62d4d82e76028374ee5 + languageName: node + linkType: hard + +"user-home@npm:^2.0.0": + version: 2.0.0 + resolution: "user-home@npm:2.0.0" + dependencies: + os-homedir: ^1.0.0 + checksum: a3329faa959fcd9e3e01a03347ca974f7f6b8896e6a634f29c61d8d5b61557d853c6fc5a6dff1a28e2da85b400d0e4490368a28de452ba8c41a2bf3a92cb110a + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"uuid@npm:8.3.2, uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 + languageName: node + linkType: hard + +"v8-compile-cache@npm:2.3.0": + version: 2.3.0 + resolution: "v8-compile-cache@npm:2.3.0" + checksum: adb0a271eaa2297f2f4c536acbfee872d0dd26ec2d76f66921aa7fc437319132773483344207bdbeee169225f4739016d8d2dbf0553913a52bb34da6d0334f8e + languageName: node + linkType: hard + +"v8-to-istanbul@npm:^9.0.1": + version: 9.1.0 + resolution: "v8-to-istanbul@npm:9.1.0" + dependencies: + "@jridgewell/trace-mapping": ^0.3.12 + "@types/istanbul-lib-coverage": ^2.0.1 + convert-source-map: ^1.6.0 + checksum: 2069d59ee46cf8d83b4adfd8a5c1a90834caffa9f675e4360f1157ffc8578ef0f763c8f32d128334424159bb6b01f3876acd39cd13297b2769405a9da241f8d1 + languageName: node + linkType: hard + +"validate-npm-package-license@npm:3.0.4, validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: ^3.0.0 + spdx-expression-parse: ^3.0.0 + checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad + languageName: node + linkType: hard + +"validate-npm-package-name@npm:4.0.0, validate-npm-package-name@npm:^4.0.0": + version: 4.0.0 + resolution: "validate-npm-package-name@npm:4.0.0" + dependencies: + builtins: ^5.0.0 + checksum: a32fd537bad17fcb59cfd58ae95a414d443866020d448ec3b22e8d40550cb585026582a57efbe1f132b882eea4da8ac38ee35f7be0dd72988a3cb55d305a20c1 + languageName: node + linkType: hard + +"validate-npm-package-name@npm:^3.0.0": + version: 3.0.0 + resolution: "validate-npm-package-name@npm:3.0.0" + dependencies: + builtins: ^1.0.3 + checksum: ce4c68207abfb22c05eedb09ff97adbcedc80304a235a0844f5344f1fd5086aa80e4dbec5684d6094e26e35065277b765c1caef68bcea66b9056761eddb22967 + languageName: node + linkType: hard + +"validate-npm-package-name@npm:^5.0.0": + version: 5.0.0 + resolution: "validate-npm-package-name@npm:5.0.0" + dependencies: + builtins: ^5.0.0 + checksum: 5342a994986199b3c28e53a8452a14b2bb5085727691ea7aa0d284a6606b127c371e0925ae99b3f1ef7cc7d2c9de75f52eb61a3d1cc45e39bca1e3a9444cbb4e + languageName: node + linkType: hard + +"walk-up-path@npm:^1.0.0": + version: 1.0.0 + resolution: "walk-up-path@npm:1.0.0" + checksum: b8019ac4fb9ba1576839ec66d2217f62ab773c1cc4c704bfd1c79b1359fef5366f1382d3ab230a66a14c3adb1bf0fe102d1fdaa3437881e69154dfd1432abd32 + languageName: node + linkType: hard + +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.0, wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: ^1.0.3 + checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + +"webidl-conversions@npm:^4.0.2": + version: 4.0.2 + resolution: "webidl-conversions@npm:4.0.2" + checksum: c93d8dfe908a0140a4ae9c0ebc87a33805b416a33ee638a605b551523eec94a9632165e54632f6d57a39c5f948c4bab10e0e066525e9a4b87a79f0d04fbca374 + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + +"whatwg-url@npm:^7.0.0": + version: 7.1.0 + resolution: "whatwg-url@npm:7.1.0" + dependencies: + lodash.sortby: ^4.7.0 + tr46: ^1.0.1 + webidl-conversions: ^4.0.2 + checksum: fecb07c87290b47d2ec2fb6d6ca26daad3c9e211e0e531dd7566e7ff95b5b3525a57d4f32640ad4adf057717e0c215731db842ad761e61d947e81010e05cf5fd + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "which-boxed-primitive@npm:1.0.2" + dependencies: + is-bigint: ^1.0.1 + is-boolean-object: ^1.1.0 + is-number-object: ^1.0.4 + is-string: ^1.0.5 + is-symbol: ^1.0.3 + checksum: 53ce774c7379071729533922adcca47220228405e1895f26673bbd71bdf7fb09bee38c1d6399395927c6289476b5ae0629863427fd151491b71c4b6cb04f3a5e + languageName: node + linkType: hard + +"which-module@npm:^2.0.0": + version: 2.0.0 + resolution: "which-module@npm:2.0.0" + checksum: 809f7fd3dfcb2cdbe0180b60d68100c88785084f8f9492b0998c051d7a8efe56784492609d3f09ac161635b78ea29219eb1418a98c15ce87d085bce905705c9c + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.9": + version: 1.1.9 + resolution: "which-typed-array@npm:1.1.9" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.0 + is-typed-array: ^1.1.10 + checksum: fe0178ca44c57699ca2c0e657b64eaa8d2db2372a4e2851184f568f98c478ae3dc3fdb5f7e46c384487046b0cf9e23241423242b277e03e8ba3dabc7c84c98ef + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"which@npm:^3.0.0": + version: 3.0.0 + resolution: "which@npm:3.0.0" + dependencies: + isexe: ^2.0.0 + bin: + node-which: bin/which.js + checksum: fdcf3cadab414e60b86c6836e7ac9de9273561a8926f57cbc28641b602a771527239ee4d47f2689ed255666f035ba0a0d72390986cc0c4e45344491adc7d0eeb + languageName: node + linkType: hard + +"wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: ^1.0.2 || 2 || 3 || 4 + checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.3": + version: 1.2.3 + resolution: "word-wrap@npm:1.2.3" + checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f + languageName: node + linkType: hard + +"wordwrap@npm:^1.0.0": + version: 1.0.0 + resolution: "wordwrap@npm:1.0.0" + checksum: 2a44b2788165d0a3de71fd517d4880a8e20ea3a82c080ce46e294f0b68b69a2e49cff5f99c600e275c698a90d12c5ea32aff06c311f0db2eb3f1201f3e7b2a04 + languageName: node + linkType: hard + +"wordwrapjs@npm:^4.0.0": + version: 4.0.1 + resolution: "wordwrapjs@npm:4.0.1" + dependencies: + reduce-flatten: ^2.0.0 + typical: ^5.2.0 + checksum: 3d927f3c95d0ad990968da54c0ad8cde2801d8e91006cd7474c26e6b742cc8557250ce495c9732b2f9db1f903601cb74ec282e0f122ee0d02d7abe81e150eea8 + languageName: node + linkType: hard + +"wrap-ansi@npm:^6.2.0": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a + languageName: node + linkType: hard + +"wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"write-file-atomic@npm:4.0.1": + version: 4.0.1 + resolution: "write-file-atomic@npm:4.0.1" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 8f780232533ca6223c63c9b9c01c4386ca8c625ebe5017a9ed17d037aec19462ae17109e0aa155bff5966ee4ae7a27b67a99f55caf3f32ffd84155e9da3929fc + languageName: node + linkType: hard + +"write-file-atomic@npm:^2.4.2": + version: 2.4.3 + resolution: "write-file-atomic@npm:2.4.3" + dependencies: + graceful-fs: ^4.1.11 + imurmurhash: ^0.1.4 + signal-exit: ^3.0.2 + checksum: 2db81f92ae974fd87ab4a5e7932feacaca626679a7c98fcc73ad8fcea5a1950eab32fa831f79e9391ac99b562ca091ad49be37a79045bd65f595efbb8f4596ae + languageName: node + linkType: hard + +"write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c + languageName: node + linkType: hard + +"write-file-atomic@npm:^5.0.0": + version: 5.0.0 + resolution: "write-file-atomic@npm:5.0.0" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 6ee16b195572386cb1c905f9d29808f77f4de2fd063d74a6f1ab6b566363832d8906a493b764ee715e57ab497271d5fc91642a913724960e8e845adf504a9837 + languageName: node + linkType: hard + +"write-json-file@npm:^3.2.0": + version: 3.2.0 + resolution: "write-json-file@npm:3.2.0" + 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 + checksum: 2b97ce2027d53c28a33e4a8e7b0d565faf785988b3776f9e0c68d36477c1fb12639fd0d70877d92a861820707966c62ea9c5f7a36a165d615fd47ca8e24c8371 + languageName: node + linkType: hard + +"write-pkg@npm:4.0.0": + version: 4.0.0 + resolution: "write-pkg@npm:4.0.0" + dependencies: + sort-keys: ^2.0.0 + type-fest: ^0.4.1 + write-json-file: ^3.2.0 + checksum: 7864d44370f42a6761f6898d07ee2818c7a2faad45116580cf779f3adaf94e4bea5557612533a6c421c32323253ecb63b50615094960a637aeaef5df0fd2d6cd + languageName: node + linkType: hard + +"xcase@npm:^2.0.1": + version: 2.0.1 + resolution: "xcase@npm:2.0.1" + checksum: 1d407306593f1049ebb5d3b7b86b0d40b4b108be428cf4d17c57454ef5444c962555c387384c121d83a6bcf7a9b6b04a51cc4b76786bfb0fac8d0a108b5b7ef8 + languageName: node + linkType: hard + +"xml@npm:^1.0.1": + version: 1.0.1 + resolution: "xml@npm:1.0.1" + checksum: 11b5545ef3f8fec3fa29ce251f50ad7b6c97c103ed4d851306ec23366f5fa4699dd6a942262df52313a0cd1840ab26256da253c023bad3309d8ce46fe6020ca0 + languageName: node + linkType: hard + +"xtend@npm:~4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a + languageName: node + linkType: hard + +"y18n@npm:^4.0.0": + version: 4.0.3 + resolution: "y18n@npm:4.0.3" + checksum: 014dfcd9b5f4105c3bb397c1c8c6429a9df004aa560964fb36732bfb999bfe83d45ae40aeda5b55d21b1ee53d8291580a32a756a443e064317953f08025b1aa4 + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yaml@npm:^1.10.0, yaml@npm:^1.10.2": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f + languageName: node + linkType: hard + +"yaml@npm:^2.2.1": + version: 2.2.1 + resolution: "yaml@npm:2.2.1" + checksum: 84f68cbe462d5da4e7ded4a8bded949ffa912bc264472e5a684c3d45b22d8f73a3019963a32164023bdf3d83cfb6f5b58ff7b2b10ef5b717c630f40bd6369a23 + languageName: node + linkType: hard + +"yargs-parser@npm:20.2.4": + version: 20.2.4 + resolution: "yargs-parser@npm:20.2.4" + checksum: d251998a374b2743a20271c2fd752b9fbef24eb881d53a3b99a7caa5e8227fcafd9abf1f345ac5de46435821be25ec12189a11030c12ee6481fef6863ed8b924 + languageName: node + linkType: hard + +"yargs-parser@npm:21.1.1, yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c + languageName: node + linkType: hard + +"yargs-parser@npm:^18.1.2": + version: 18.1.3 + resolution: "yargs-parser@npm:18.1.3" + dependencies: + camelcase: ^5.0.0 + decamelize: ^1.2.0 + checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9 + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 + languageName: node + linkType: hard + +"yargs@npm:16.2.0, yargs@npm:^16.2.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: ^7.0.2 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.0 + y18n: ^5.0.5 + yargs-parser: ^20.2.2 + checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 + languageName: node + linkType: hard + +"yargs@npm:^15.0.1": + version: 15.4.1 + resolution: "yargs@npm:15.4.1" + dependencies: + cliui: ^6.0.0 + decamelize: ^1.2.0 + find-up: ^4.1.0 + get-caller-file: ^2.0.1 + require-directory: ^2.1.1 + require-main-filename: ^2.0.0 + set-blocking: ^2.0.0 + string-width: ^4.2.0 + which-module: ^2.0.0 + y18n: ^4.0.0 + yargs-parser: ^18.1.2 + checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373 + languageName: node + linkType: hard + +"yargs@npm:^17.3.1, yargs@npm:^17.6.2": + version: 17.7.1 + resolution: "yargs@npm:17.7.1" + dependencies: + cliui: ^8.0.1 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.1.1 + checksum: 3d8a43c336a4942bc68080768664aca85c7bd406f018bad362fd255c41c8f4e650277f42fd65d543fce99e084124ddafee7bbfc1a5c6a8fda4cec78609dcf8d4 + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard