├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ └── config.yml └── workflows │ ├── preview.yml │ └── release.yml ├── .gitignore ├── .node-version ├── .npmrc ├── .prettierignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── icons └── logo.png ├── images ├── azure-pat │ ├── 1-user-settings.png │ ├── 2-personal-access-tokens.png │ ├── 3-new-token.png │ ├── 4-custom-defined.png │ ├── 5-show-all-scopes.png │ ├── 6-pull-request-threads.png │ └── 7-create.png └── build-policy │ ├── 1-project-settings.png │ ├── 2-repositories.png │ ├── 3-select-repo.png │ ├── 4-select-policies.png │ ├── 5-main-branch.png │ ├── 6-build-validation.png │ ├── 7-select-build-pipeline.png │ └── 8-save-build-policy.png ├── package.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── scripts ├── build-and-publish.js └── package.json ├── vercel-azdo-pr-comment-task-source ├── .gitignore ├── package.json ├── src │ └── index.ts ├── task.json └── tsconfig.json ├── vercel-deployment-task-source ├── .gitignore ├── package.json ├── src │ └── index.ts ├── task.json ├── test │ ├── index.test.ts │ └── success.ts ├── tsconfig.json └── tsconfig.test.json └── vss-extension.json /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Documentation 2 | # https://help.github.com/en/articles/about-code-owners 3 | 4 | # Restricted Paths 5 | * @TooTallNate @jeffsee55 @paulogdm @codybrouwers @Zertsov 6 | 7 | # Unrestricted Paths 8 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: Bug Report 4 | url: https://vercel.com/help 5 | about: Reach out to our support team 6 | - name: Feature Request 7 | url: https://community.vercel.com 8 | about: Share ideas for new features 9 | - name: Ask a Question 10 | url: https://community.vercel.com/c/help/ 11 | about: Ask the community for help 12 | -------------------------------------------------------------------------------- /.github/workflows/preview.yml: -------------------------------------------------------------------------------- 1 | name: "Publish Preview" 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: 7 | - main 8 | 9 | jobs: 10 | build-and-publish: 11 | runs-on: "ubuntu-latest" 12 | steps: 13 | - uses: actions/checkout@v3 14 | 15 | - name: Install Node.js 16 | uses: actions/setup-node@v4 17 | with: 18 | node-version-file: ".node-version" 19 | 20 | - uses: pnpm/action-setup@v2 21 | name: Install pnpm 22 | id: pnpm-install 23 | with: 24 | version: 8.3.1 25 | run_install: false 26 | 27 | - name: Get pnpm store directory 28 | id: pnpm-cache 29 | shell: bash 30 | run: | 31 | echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT 32 | 33 | - uses: actions/cache@v3 34 | name: Setup pnpm cache 35 | with: 36 | path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} 37 | key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} 38 | restore-keys: | 39 | ${{ runner.os }}-pnpm-store- 40 | 41 | - name: Install dependencies 42 | run: pnpm install 43 | 44 | - name: Set to preview version 45 | run: | 46 | # Update vss-extension.json to set it to preview version 47 | jq '. += { "id": "vercel-deployment-extension-preview", "name": "Vercel Deployment Extension (Preview)", "public": false, "galleryFlags": ["Preview"] }' vss-extension.json > temp.json \ 48 | && mv temp.json vss-extension.json \ 49 | 50 | # Update vercel-deployment-task-source/task.json to set it to preview version 51 | jq '.id = "e56d47c0-6789-4b3c-9563-7a66f7b2066f" | .name |= . + "-preview" | .friendlyName |= . + " (Preview)"' vercel-deployment-task-source/task.json > temp.json \ 52 | && mv temp.json vercel-deployment-task-source/task.json \ 53 | 54 | # Update vercel-azdo-pr-comment-task-source/task.json to set it to preview version 55 | jq '.id = "E0AE50D0-C1B0-4F2F-BC25-F821A3E081E1" | .name |= . + "-preview" | .friendlyName |= . + " (Preview)"' vercel-azdo-pr-comment-task-source/task.json > temp.json \ 56 | && mv temp.json vercel-azdo-pr-comment-task-source/task.json \ 57 | 58 | # Format the updated files using Prettier 59 | pnpm exec prettier --write vss-extension.json vercel-deployment-task-source/task.json vercel-azdo-pr-comment-task-source/task.json 60 | echo "Updated vss-extension.json" 61 | 62 | - name: Build and Publish 63 | run: pnpm -C scripts build-and-publish 64 | env: 65 | AZURE_TOKEN: ${{ secrets.AZURE_TOKEN }} 66 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: "Publish Release" 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | build-and-publish: 8 | runs-on: "ubuntu-latest" 9 | steps: 10 | - uses: actions/checkout@v3 11 | 12 | - name: Install Node.js 13 | uses: actions/setup-node@v4 14 | with: 15 | node-version-file: ".node-version" 16 | 17 | - uses: pnpm/action-setup@v2 18 | name: Install pnpm 19 | id: pnpm-install 20 | with: 21 | version: 8.3.1 22 | run_install: false 23 | 24 | - name: Get pnpm store directory 25 | id: pnpm-cache 26 | shell: bash 27 | run: | 28 | echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT 29 | 30 | - uses: actions/cache@v3 31 | name: Setup pnpm cache 32 | with: 33 | path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} 34 | key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} 35 | restore-keys: | 36 | ${{ runner.os }}-pnpm-store- 37 | 38 | - name: Install dependencies 39 | run: pnpm install 40 | 41 | - name: Build and Publish 42 | run: pnpm -C scripts build-and-publish 43 | env: 44 | AZURE_TOKEN: ${{ secrets.AZURE_TOKEN }} 45 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | *.xml 4 | *.vsix -------------------------------------------------------------------------------- /.node-version: -------------------------------------------------------------------------------- 1 | v16 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | save-exact=true -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | package-lock.json 2 | pnpm-lock.yaml 3 | vercel-deployment-task-source/dist 4 | vercel-deployment-task-source/test-out -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | ## Publishing 4 | 5 | ### Build and Publish Script 6 | 7 | The [build-and-publish.js](./scripts/build-and-publish.js) script is used for both private preview and public release publishing. It runs the [tfx-cli](https://www.npmjs.com/package/tfx-cli) dependency, which is the official Node.js CLI for Azure DevOps. Source code and documentation for this can be found here [microsoft/tfs-cli](https://github.com/microsoft/tfs-cli) (yes, the names do not match 🤷‍♂️). The `tfx-cli` will fail if the version number in [vss-extension.json](./vss-extension.json) has not been changed. 8 | 9 | The script requires an environment variable `AZURE_TOKEN`. This variable must be an [Azure DevOps Personal Access Token with the `Marketplace: Publish` permission](https://learn.microsoft.com/en-us/azure/devops/extend/publish/command-line?view=azure-devops#create-a-personal-access-token). The environment variable is passed to the script as a [GitHub Actions encrypted secret](https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository). 10 | 11 | > The current `AZURE_TOKEN` secret was generated by Vercel's IT department in August 2024 and will expire in August 2025. If the token expires, a new token must be generated and the secret updated in the GitHub repository. 12 | 13 | ### Private Preview 14 | 15 | The extension is automatically built and released as a private preview by the [`Publish Preview`](./.github/workflows/preview.yml) CI workflow. The workflow first replaces some values in the [`vss-extension.json`](./vss-extension.json) file to make the extension private, and the task json files to make the tasks private and unique. It then builds and publishes the extension to the Visual Studio Marketplace using the build-and-publish script. 16 | 17 | ### Public Release 18 | 19 | For public releases, there is a CI workflow that must be manually triggered called [`Publish Release`](./.github/workflows/release.yml). This workflow publishes the extension with all of the existing values in the extension and task json files, using the build-and-publish script. 20 | 21 | To create a new release: 22 | 23 | - Either within the feature/fix PR, or afterwards, update the task versions in the respective task.json file(s). 24 | - The versions follow [SemVer](https://semver.org/). 25 | - Increment `Patch` for **Fixes**. 26 | - Increment `Minor` for **Features**. 27 | - Increment `Major` for **Breaking Changes**. 28 | - Before merging Major changes, consult with the Vercel CLI team to ensure proper documentation and update paths exist. 29 | - If you are unsure how to version the changes, consult with the Vercel CLI team. 30 | - After updating the version(s) for the modified task(s), update the extension version within [vss-extension.json](./vss-extension.json) 31 | - This also follows [SemVer](https://semver.org/), but how it is updated is based on the task.json version changes. 32 | - The extension version is incremented based on the greatest version change within the task.json changes. 33 | - As an example, if one task receives a `Patch` update, and the other receives a `Minor` update, then the extension version should increment its `Minor` version (and subsequently reset the `Patch` value to `0`). 34 | - If you are unsure, consult with the Vercel CLI team before pushing version changes. 35 | - After modifying the version values, create and push a commit, and open a PR against `main`. 36 | - Once merged to `main`, the CI will automatically publish a private preview version of the extension to the Visual Studio Marketplace. 37 | - After testing the preview version, manually run the `Publish Release` workflow to publish the extension to the public marketplace. 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Vercel 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vercel Azure DevOps Extension 2 | 3 | This extension contains Azure Pipelines tasks for automatically deploying your Azure DevOps project to Vercel. 4 | 5 | - [Vercel Azure DevOps Extension](#vercel-azure-devops-extension) 6 | - [Extension Set Up](#extension-set-up) 7 | - [Basic Pipeline Set Up](#basic-pipeline-set-up) 8 | - [Full Featured Pipeline Set Up](#full-featured-pipeline-set-up) 9 | - [Extension Reference](#extension-reference) 10 | - [Task: `vercel-deployment-task`](#task-vercel-deployment-task) 11 | - [Task: `vercel-azdo-pr-comment-task`](#task-vercel-azdo-pr-comment-task) 12 | - [Azure PAT Set Up](#azure-pat-set-up) 13 | - [Azure Build Policy Set Up](#azure-build-policy-set-up) 14 | 15 | ## Extension Set Up 16 | 17 | 1. Create a Vercel Project 18 | 1. Create a Vercel Personal Access Token with permissions to deploy the project created on step 1 (see the [Vercel PAT Set Up](https://vercel.com/guides/how-do-i-use-a-vercel-api-access-token) guide for more information) 19 | 1. If you're planning on using the Pull Request Commenting Task, create an Azure DevOps Personal Access Token with permissions to Read/Write Pull Request threads (see the [Azure PAT set up](#azure-pat-set-up) guide for more information) 20 | 1. Store the tokens as secret variables in your preferred methodology. Azure recommends using the [UI, Variables Groups, or Azure Key Vault](https://learn.microsoft.com/en-us/azure/devops/pipelines/process/set-secret-variables). Whichever methodology you use, make sure it is accessible from Azure Pipelines. 21 | 1. Navigate to the [Vercel Deployment Extension](https://marketplace.visualstudio.com/items?itemName=Vercel.vercel-deployment-extension) Visual Studio Marketplace page and add the extension to your organization. 22 | > Note: This step will not work until the extension is shared with the user or we make the extension public. 23 | 1. With the extension added, you are now ready to use the tasks in your Azure Pipeline. The tasks are referable using `vercel-deployment-task` and `vercel-azdo-pr-comment-task`. 24 | > Note: Within a pipeline definition, the tasks will be used like `- task: vercel-deployment-task@1`. The `@1` represents the Major version of the task that the pipeline should use. Make sure to indicate the latest major version of the task when creating your pipeline. 25 | 26 | Explore the following pipeline guides for further set up instructions: 27 | 28 | - [Basic Pipeline Set Up](#basic-pipeline-set-up) 29 | - [Full Featured Pipeline Set Up](#full-featured-pipeline-set-up) 30 | 31 | ## Basic Pipeline Set Up 32 | 33 | This short guide will demonstrate how the extension can be used to automatically deploy the `main` branch to production. Make sure the steps in [Extension Set Up](#extension-set-up) have been completed. 34 | 35 | 1. Start by creating a new pipeline file in your repo called `basic-pipeline.yml`. Either use the in-browser editor, or in your local file editor. 36 | 1. Add a `trigger:`, `pool:`, and `steps:` declarations: 37 | 38 | ```yaml 39 | trigger: 40 | - main 41 | 42 | pool: 43 | vmImage: ubuntu-latest 44 | 45 | steps: 46 | # - task: ... 47 | ``` 48 | 49 | > The `trigger:` declaration states that this pipeline should run for all commits to the `main` branch. 50 | 51 | 1. Now add the extension's task `vercel-deployment-task`: 52 | ```yaml 53 | steps: 54 | - task: vercel-deployment-task@1 55 | name: Deploy 56 | inputs: 57 | vercelProjectId: "" 58 | vercelTeamId: "" 59 | vercelToken: "" # '$(VERCEL_TOKEN)' 60 | production: true 61 | ``` 62 | - The `vercelToken` should reference the secret variable defined in [Extension Set Up](#extension-set-up). 63 | 1. Commit, and push the pipeline to the repository. 64 | 1. Navigate to Azure Pipelines and run the task for the first time if it doesn't run automatically. 65 | 1. Make a change to your project and commit to the `main` branch, a new deployment pipeline run should automatically kick off in Azure Pipelines, and the Vercel Project should automatically update. 66 | 67 | ## Full Featured Pipeline Set Up 68 | 69 | This guide will demonstrate how to improve the [Basic Pipeline Set Up](#basic-pipeline-set-up) pipeline in order to deploy from `main` to production _and_ deploy from pull requests to preview. 70 | 71 | 1. Starting with the pipeline file created in [Basic Pipeline Set Up](#basic-pipeline-set-up), duplicate, rename, or open it in your editor of choice. 72 | 1. Add a variable above the `steps` block 73 | ```yaml 74 | variables: 75 | isMain: $[eq(variables['Build.SourceBranch'], 'refs/heads/main')] 76 | ``` 77 | 1. Update the `production: true` input to be `production: $(isMain)` 78 | 1. Below `inputs:`, add a `condition`: 79 | ```yaml 80 | inputs: 81 | # ... 82 | condition: or(eq(variables.isMain, true), eq(variables['Build.Reason'], 'PullRequest')) 83 | ``` 84 | 1. Then add a new task step immediately after the `vercel-deployment-task` step, adding the PR commenting feature: 85 | ```yaml 86 | - task: vercel-azdo-pr-comment-task@1 87 | inputs: 88 | azureToken: $(AZURE_PAT) 89 | deploymentTaskMessage: $(Deploy.deploymentTaskMessage) 90 | ``` 91 | - The `vercel-deployment-task` sets an output variable called `deploymentTaskMessage`. The reference `$(Deploy.deploymentTaskMessage)` comes from the `name: Deploy` on the `vercel-deployment-task` step. 92 | 1. Push these changes to the repository, and set a [Build Policy](#azure-build-policy-set-up) for the `main` branch. 93 | 1. Now create a new branch, push a commit, and open a PR against `main`. A new pipeline execution should trigger and it should create a preview deployment on Vercel as well as comment back on the PR with the preview URL. 94 | 95 | ## Extension Reference 96 | 97 | ### Task: `vercel-deployment-task` 98 | 99 | An Azure Pipelines Task Extension for automatically deploying to Vercel. 100 | 101 | The configuration inputs `vercelProjectID`, `vercelTeamId`, and `vercelToken` can all be replaced with environment variables. See their respective property sections for more details. 102 | 103 | #### Properties 104 | 105 | - `vercelProjectId` 106 | 107 | The ID of your Vercel Project. 108 | 109 | Can alternatively be set as the environment variable `VERCEL_PROJECT_ID`. 110 | 111 | Type: `string` 112 | 113 | Required: `false` 114 | 115 | - `vercelTeamId` 116 | 117 | The ID of the Vercel Team your Vercel Project is associated with. Starts with `team_`. 118 | 119 | Can alternatively be set as the environment variable `VERCEL_TEAM_ID`. 120 | 121 | Type: `string` 122 | 123 | Required: `false` 124 | 125 | - `vercelToken` 126 | 127 | A Vercel personal access token with deploy permissions for your Vercel Project. [Guide](https://vercel.com/guides/how-do-i-use-a-vercel-api-access-token) 128 | 129 | Can alternatively be set as the environment variable `VERCEL_TOKEN`. 130 | 131 | Type: `string` 132 | 133 | Required: `false` 134 | 135 | - `vercelCwd` 136 | 137 | The Current Working Directory option can be used to provide a working directory (that can be different from the current directory) when running Vercel deployment task. 138 | 139 | This option can be a relative or absolute path. [Guide](https://vercel.com/docs/cli/global-options#current-working-directory) 140 | 141 | Can alternatively be set as the environment variable `VERCEL_CWD`. 142 | 143 | Type: `string` 144 | 145 | Required: `false` 146 | 147 | - `production` 148 | 149 | Should the task deploy to production? When omitted, or set to `false`, the task will create _preview_ deployments. 150 | 151 | Type: `boolean` 152 | 153 | Default: `false` 154 | 155 | Required: `false` 156 | 157 | - `target` 158 | 159 | Option to define the environment you want to deploy to. This could be production, preview, or a custom environment. For more information, see [Using an environment through the Vercel CLI](https://vercel.com/docs/deployments/custom-environments#using-an-environment-through-the-vercel-cli). 160 | 161 | Type: `string` 162 | 163 | Default: `false` 164 | 165 | Required: `false` 166 | 167 | - `debug` 168 | 169 | Enable `--debug` output for the internal Vercel CLI operations. 170 | 171 | Type: `boolean` 172 | 173 | Default: `false` 174 | 175 | Required: `false` 176 | 177 | - `archive` 178 | 179 | Enable `--archive=tgz` flag for the internal Vercel CLI operations. 180 | 181 | Type: `boolean` 182 | 183 | Default: `false` 184 | 185 | Required: `false` 186 | 187 | - `env` 188 | 189 | Adding enviroment variables at runtime utilizing Vercel CLI's `--env` option. 190 | 191 | Type: `string` 192 | 193 | Required: `false` 194 | 195 | - `buildEnv` 196 | 197 | Adding build enviroment variables to the build step utilizing Vercel CLI's `--build-env` option. 198 | 199 | Type: `string` 200 | 201 | Required: `false` 202 | 203 | - `logs` 204 | 205 | Enable `--logs` flag for the internal Vercel CLI operations. 206 | 207 | Type: `boolean` 208 | 209 | Default: `false` 210 | 211 | Required: `false` 212 | 213 | #### Outputs 214 | 215 | - `deploymentURL` 216 | 217 | The URL of the deployment. 218 | 219 | Type: `string` 220 | 221 | - `originalDeploymentURL` 222 | 223 | Original URL of the deployment. Can be used to create your own alias in a depending separate task. 224 | 225 | Type: `string` 226 | 227 | - `deploymentTaskMessage` 228 | 229 | The output from the deployment. Can be passed to Vercel Azure DevOps Pull Request Comment Task. 230 | 231 | Type: `string` 232 | 233 | ### Task: `vercel-azdo-pr-comment-task` 234 | 235 | #### Properties 236 | 237 | - `azureToken` 238 | 239 | An Azure personal access token with the Git 'PullRequestContribute' permission for your Azure DevOps Organization. [Guide](https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate) 240 | 241 | Type: `string` 242 | 243 | Required: `true` 244 | 245 | - `deploymentTaskMessage` 246 | 247 | The message to be commented on the Pull Request. Generally is created by the Vercel Deployment Task. 248 | 249 | Type: `string` 250 | 251 | Required: `true` 252 | 253 | ## Azure PAT Set Up 254 | 255 | ### 1. Go to [https://dev.azure.com](https://dev.azure.com) and click on the settings icon in the top right. 256 | 257 | ![Azure DevOps Landing Page](images/azure-pat/1-user-settings.png) 258 | 259 | ### 2. Click on the _Personal access tokens_ menu option 260 | 261 | ![Azure DevOps Setting Button](images/azure-pat/2-personal-access-tokens.png) 262 | 263 | ### 3. Click on _New Token_ 264 | 265 | ![Azure DevOps New Token Button](images/azure-pat/3-new-token.png) 266 | 267 | ### 4. After filling in the basic token information like name, organization, and expiration, click on _Custom Defined_ under Scopes 268 | 269 | ![Azure DevOps Custom Defined](images/azure-pat/4-custom-defined.png) 270 | 271 | ### 5. Then, _Show all scopes_ button at the bottom of the prompt 272 | 273 | ![Azure DevOps Show All Scopes](images/azure-pat/5-show-all-scopes.png) 274 | 275 | ### 6. Then, within the scopes list, scroll until _Pull Request Threads_, and select the _Read & Write_ toggle. 276 | 277 | ![Azure DevOps Pull Request Threads permission](images/azure-pat/6-pull-request-threads.png) 278 | 279 | ### 7. Click _Create_, and don't forget to copy the token as once you exit the prompt it will not be retrievable. 280 | 281 | ![Azure DevOps PAT Create](images/azure-pat/7-create.png) 282 | 283 | ## Azure Build Policy Set Up 284 | 285 | ### 1. Navigate to the Azure DevOps organization Overview page. Click on **Project Settings** in the lower left corner. 286 | 287 | ![Project Settings](images/build-policy/1-project-settings.png) 288 | 289 | ### 2. In the **Project Settings** list on the left, scroll down and click on the `Repositories` option 290 | 291 | ![Repositories](images/build-policy/2-repositories.png) 292 | 293 | ### 3. Select the repository 294 | 295 | ![Select Repo](images/build-policy/3-select-repo.png) 296 | 297 | ### 4. On the right side, select **Policies** 298 | 299 | ![Select Policies](images/build-policy/4-select-policies.png) 300 | 301 | ### 5. Scroll down to **Branch Policies**, and select the `main` branch 302 | 303 | ![Main Branch](images/build-policy/5-main-branch.png) 304 | 305 | ### 6. Scroll down to **Build Validation**, and click on the `+` button to create a new validation policy. 306 | 307 | ![Build Validation](images/build-policy/6-build-validation.png) 308 | 309 | ### 7. Select the pipeline previously created 310 | 311 | ![Select Build Pipeline](images/build-policy/7-select-build-pipeline.png) 312 | 313 | > Keep the policy marked as **Required** so that commits directly to `main` are prevented. 314 | 315 | ### 8. Finally, save the new validation policy 316 | 317 | ![Save Build Policy](images/build-policy/8-save-build-policy.png) 318 | 319 | ### 9. Create a pull request to the `main` branch, and if everything is set up correctly, the pipeline will run and comment back on the PR the deployment URL 🎉 320 | -------------------------------------------------------------------------------- /icons/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/icons/logo.png -------------------------------------------------------------------------------- /images/azure-pat/1-user-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/images/azure-pat/1-user-settings.png -------------------------------------------------------------------------------- /images/azure-pat/2-personal-access-tokens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/images/azure-pat/2-personal-access-tokens.png -------------------------------------------------------------------------------- /images/azure-pat/3-new-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/images/azure-pat/3-new-token.png -------------------------------------------------------------------------------- /images/azure-pat/4-custom-defined.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/images/azure-pat/4-custom-defined.png -------------------------------------------------------------------------------- /images/azure-pat/5-show-all-scopes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/images/azure-pat/5-show-all-scopes.png -------------------------------------------------------------------------------- /images/azure-pat/6-pull-request-threads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/images/azure-pat/6-pull-request-threads.png -------------------------------------------------------------------------------- /images/azure-pat/7-create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/images/azure-pat/7-create.png -------------------------------------------------------------------------------- /images/build-policy/1-project-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/images/build-policy/1-project-settings.png -------------------------------------------------------------------------------- /images/build-policy/2-repositories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/images/build-policy/2-repositories.png -------------------------------------------------------------------------------- /images/build-policy/3-select-repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/images/build-policy/3-select-repo.png -------------------------------------------------------------------------------- /images/build-policy/4-select-policies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/images/build-policy/4-select-policies.png -------------------------------------------------------------------------------- /images/build-policy/5-main-branch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/images/build-policy/5-main-branch.png -------------------------------------------------------------------------------- /images/build-policy/6-build-validation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/images/build-policy/6-build-validation.png -------------------------------------------------------------------------------- /images/build-policy/7-select-build-pipeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/images/build-policy/7-select-build-pipeline.png -------------------------------------------------------------------------------- /images/build-policy/8-save-build-policy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/vercel-azure-devops-extension/3096cdbbb691758e8ec4c6a97d2c1ff9956b7365/images/build-policy/8-save-build-policy.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "vercel-azure-devops-extension", 4 | "scripts": { 5 | "format": "prettier ." 6 | }, 7 | "devDependencies": { 8 | "prettier": "2.8.8" 9 | }, 10 | "packageManager": "pnpm@8.3.1" 11 | } 12 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | importers: 4 | 5 | .: 6 | devDependencies: 7 | prettier: 8 | specifier: 2.8.8 9 | version: 2.8.8 10 | 11 | scripts: 12 | dependencies: 13 | execa: 14 | specifier: 7.1.1 15 | version: 7.1.1 16 | tfx-cli: 17 | specifier: 0.14.0 18 | version: 0.14.0 19 | 20 | vercel-azdo-pr-comment-task-source: 21 | dependencies: 22 | azure-devops-node-api: 23 | specifier: 12.0.0 24 | version: 12.0.0 25 | azure-pipelines-task-lib: 26 | specifier: 4.3.1 27 | version: 4.3.1 28 | devDependencies: 29 | '@types/node': 30 | specifier: 16.18.24 31 | version: 16.18.24 32 | typescript: 33 | specifier: 5.0.4 34 | version: 5.0.4 35 | 36 | vercel-deployment-task-source: 37 | dependencies: 38 | azure-devops-node-api: 39 | specifier: 12.0.0 40 | version: 12.0.0 41 | azure-pipelines-task-lib: 42 | specifier: 4.3.1 43 | version: 4.3.1 44 | undici: 45 | specifier: 5.22.1 46 | version: 5.22.1 47 | devDependencies: 48 | '@types/node': 49 | specifier: 16.18.24 50 | version: 16.18.24 51 | '@types/tap': 52 | specifier: 15.0.8 53 | version: 15.0.8 54 | tap: 55 | specifier: 16.3.4 56 | version: 16.3.4(typescript@5.0.4) 57 | typescript: 58 | specifier: 5.0.4 59 | version: 5.0.4 60 | 61 | packages: 62 | 63 | /@ampproject/remapping@2.2.1: 64 | resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} 65 | engines: {node: '>=6.0.0'} 66 | dependencies: 67 | '@jridgewell/gen-mapping': 0.3.3 68 | '@jridgewell/trace-mapping': 0.3.18 69 | dev: true 70 | 71 | /@babel/code-frame@7.21.4: 72 | resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} 73 | engines: {node: '>=6.9.0'} 74 | dependencies: 75 | '@babel/highlight': 7.18.6 76 | 77 | /@babel/compat-data@7.21.4: 78 | resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==} 79 | engines: {node: '>=6.9.0'} 80 | dev: true 81 | 82 | /@babel/core@7.21.4: 83 | resolution: {integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==} 84 | engines: {node: '>=6.9.0'} 85 | dependencies: 86 | '@ampproject/remapping': 2.2.1 87 | '@babel/code-frame': 7.21.4 88 | '@babel/generator': 7.21.4 89 | '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) 90 | '@babel/helper-module-transforms': 7.21.2 91 | '@babel/helpers': 7.21.0 92 | '@babel/parser': 7.21.4 93 | '@babel/template': 7.20.7 94 | '@babel/traverse': 7.21.4 95 | '@babel/types': 7.21.4 96 | convert-source-map: 1.9.0 97 | debug: 4.3.4 98 | gensync: 1.0.0-beta.2 99 | json5: 2.2.3 100 | semver: 6.3.0 101 | transitivePeerDependencies: 102 | - supports-color 103 | dev: true 104 | 105 | /@babel/generator@7.21.4: 106 | resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==} 107 | engines: {node: '>=6.9.0'} 108 | dependencies: 109 | '@babel/types': 7.21.4 110 | '@jridgewell/gen-mapping': 0.3.3 111 | '@jridgewell/trace-mapping': 0.3.18 112 | jsesc: 2.5.2 113 | dev: true 114 | 115 | /@babel/helper-compilation-targets@7.21.4(@babel/core@7.21.4): 116 | resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} 117 | engines: {node: '>=6.9.0'} 118 | peerDependencies: 119 | '@babel/core': ^7.0.0 120 | dependencies: 121 | '@babel/compat-data': 7.21.4 122 | '@babel/core': 7.21.4 123 | '@babel/helper-validator-option': 7.21.0 124 | browserslist: 4.21.5 125 | lru-cache: 5.1.1 126 | semver: 6.3.0 127 | dev: true 128 | 129 | /@babel/helper-environment-visitor@7.18.9: 130 | resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} 131 | engines: {node: '>=6.9.0'} 132 | dev: true 133 | 134 | /@babel/helper-function-name@7.21.0: 135 | resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} 136 | engines: {node: '>=6.9.0'} 137 | dependencies: 138 | '@babel/template': 7.20.7 139 | '@babel/types': 7.21.4 140 | dev: true 141 | 142 | /@babel/helper-hoist-variables@7.18.6: 143 | resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} 144 | engines: {node: '>=6.9.0'} 145 | dependencies: 146 | '@babel/types': 7.21.4 147 | dev: true 148 | 149 | /@babel/helper-module-imports@7.21.4: 150 | resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} 151 | engines: {node: '>=6.9.0'} 152 | dependencies: 153 | '@babel/types': 7.21.4 154 | dev: true 155 | 156 | /@babel/helper-module-transforms@7.21.2: 157 | resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} 158 | engines: {node: '>=6.9.0'} 159 | dependencies: 160 | '@babel/helper-environment-visitor': 7.18.9 161 | '@babel/helper-module-imports': 7.21.4 162 | '@babel/helper-simple-access': 7.20.2 163 | '@babel/helper-split-export-declaration': 7.18.6 164 | '@babel/helper-validator-identifier': 7.19.1 165 | '@babel/template': 7.20.7 166 | '@babel/traverse': 7.21.4 167 | '@babel/types': 7.21.4 168 | transitivePeerDependencies: 169 | - supports-color 170 | dev: true 171 | 172 | /@babel/helper-simple-access@7.20.2: 173 | resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} 174 | engines: {node: '>=6.9.0'} 175 | dependencies: 176 | '@babel/types': 7.21.4 177 | dev: true 178 | 179 | /@babel/helper-split-export-declaration@7.18.6: 180 | resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} 181 | engines: {node: '>=6.9.0'} 182 | dependencies: 183 | '@babel/types': 7.21.4 184 | dev: true 185 | 186 | /@babel/helper-string-parser@7.19.4: 187 | resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} 188 | engines: {node: '>=6.9.0'} 189 | dev: true 190 | 191 | /@babel/helper-validator-identifier@7.19.1: 192 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} 193 | engines: {node: '>=6.9.0'} 194 | 195 | /@babel/helper-validator-option@7.21.0: 196 | resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} 197 | engines: {node: '>=6.9.0'} 198 | dev: true 199 | 200 | /@babel/helpers@7.21.0: 201 | resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} 202 | engines: {node: '>=6.9.0'} 203 | dependencies: 204 | '@babel/template': 7.20.7 205 | '@babel/traverse': 7.21.4 206 | '@babel/types': 7.21.4 207 | transitivePeerDependencies: 208 | - supports-color 209 | dev: true 210 | 211 | /@babel/highlight@7.18.6: 212 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 213 | engines: {node: '>=6.9.0'} 214 | dependencies: 215 | '@babel/helper-validator-identifier': 7.19.1 216 | chalk: 2.4.2 217 | js-tokens: 4.0.0 218 | 219 | /@babel/parser@7.21.4: 220 | resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} 221 | engines: {node: '>=6.0.0'} 222 | hasBin: true 223 | dependencies: 224 | '@babel/types': 7.21.4 225 | dev: true 226 | 227 | /@babel/template@7.20.7: 228 | resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} 229 | engines: {node: '>=6.9.0'} 230 | dependencies: 231 | '@babel/code-frame': 7.21.4 232 | '@babel/parser': 7.21.4 233 | '@babel/types': 7.21.4 234 | dev: true 235 | 236 | /@babel/traverse@7.21.4: 237 | resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==} 238 | engines: {node: '>=6.9.0'} 239 | dependencies: 240 | '@babel/code-frame': 7.21.4 241 | '@babel/generator': 7.21.4 242 | '@babel/helper-environment-visitor': 7.18.9 243 | '@babel/helper-function-name': 7.21.0 244 | '@babel/helper-hoist-variables': 7.18.6 245 | '@babel/helper-split-export-declaration': 7.18.6 246 | '@babel/parser': 7.21.4 247 | '@babel/types': 7.21.4 248 | debug: 4.3.4 249 | globals: 11.12.0 250 | transitivePeerDependencies: 251 | - supports-color 252 | dev: true 253 | 254 | /@babel/types@7.21.4: 255 | resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==} 256 | engines: {node: '>=6.9.0'} 257 | dependencies: 258 | '@babel/helper-string-parser': 7.19.4 259 | '@babel/helper-validator-identifier': 7.19.1 260 | to-fast-properties: 2.0.0 261 | dev: true 262 | 263 | /@colors/colors@1.5.0: 264 | resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} 265 | engines: {node: '>=0.1.90'} 266 | dev: false 267 | 268 | /@istanbuljs/load-nyc-config@1.1.0: 269 | resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} 270 | engines: {node: '>=8'} 271 | dependencies: 272 | camelcase: 5.3.1 273 | find-up: 4.1.0 274 | get-package-type: 0.1.0 275 | js-yaml: 3.14.1 276 | resolve-from: 5.0.0 277 | dev: true 278 | 279 | /@istanbuljs/schema@0.1.3: 280 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 281 | engines: {node: '>=8'} 282 | dev: true 283 | 284 | /@jridgewell/gen-mapping@0.3.3: 285 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 286 | engines: {node: '>=6.0.0'} 287 | dependencies: 288 | '@jridgewell/set-array': 1.1.2 289 | '@jridgewell/sourcemap-codec': 1.4.15 290 | '@jridgewell/trace-mapping': 0.3.18 291 | dev: true 292 | 293 | /@jridgewell/resolve-uri@3.1.0: 294 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 295 | engines: {node: '>=6.0.0'} 296 | dev: true 297 | 298 | /@jridgewell/set-array@1.1.2: 299 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 300 | engines: {node: '>=6.0.0'} 301 | dev: true 302 | 303 | /@jridgewell/sourcemap-codec@1.4.14: 304 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 305 | dev: true 306 | 307 | /@jridgewell/sourcemap-codec@1.4.15: 308 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 309 | dev: true 310 | 311 | /@jridgewell/trace-mapping@0.3.18: 312 | resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} 313 | dependencies: 314 | '@jridgewell/resolve-uri': 3.1.0 315 | '@jridgewell/sourcemap-codec': 1.4.14 316 | dev: true 317 | 318 | /@types/concat-stream@1.6.1: 319 | resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} 320 | dependencies: 321 | '@types/node': 16.18.24 322 | dev: false 323 | 324 | /@types/form-data@0.0.33: 325 | resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} 326 | dependencies: 327 | '@types/node': 16.18.24 328 | dev: false 329 | 330 | /@types/minimist@1.2.2: 331 | resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} 332 | dev: false 333 | 334 | /@types/node@10.17.60: 335 | resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} 336 | dev: false 337 | 338 | /@types/node@16.18.24: 339 | resolution: {integrity: sha512-zvSN2Esek1aeLdKDYuntKAYjti9Z2oT4I8bfkLLhIxHlv3dwZ5vvATxOc31820iYm4hQRCwjUgDpwSMFjfTUnw==} 340 | 341 | /@types/node@8.10.66: 342 | resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} 343 | dev: false 344 | 345 | /@types/normalize-package-data@2.4.1: 346 | resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} 347 | dev: false 348 | 349 | /@types/qs@6.9.7: 350 | resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} 351 | dev: false 352 | 353 | /@types/tap@15.0.8: 354 | resolution: {integrity: sha512-ZfeoiZlLIaFi4t6wccwbTEicrHREkP0bOq8dZVi/nWvG5F8O7LlS2cSUZBiOW/D4cgWS/p2uhM3lJoyzFAl80w==} 355 | dependencies: 356 | '@types/node': 16.18.24 357 | dev: true 358 | 359 | /aggregate-error@3.1.0: 360 | resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} 361 | engines: {node: '>=8'} 362 | dependencies: 363 | clean-stack: 2.2.0 364 | indent-string: 4.0.0 365 | dev: true 366 | 367 | /ansi-regex@5.0.1: 368 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 369 | engines: {node: '>=8'} 370 | dev: true 371 | 372 | /ansi-styles@3.2.1: 373 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 374 | engines: {node: '>=4'} 375 | dependencies: 376 | color-convert: 1.9.3 377 | 378 | /ansi-styles@4.3.0: 379 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 380 | engines: {node: '>=8'} 381 | dependencies: 382 | color-convert: 2.0.1 383 | dev: true 384 | 385 | /anymatch@3.1.3: 386 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 387 | engines: {node: '>= 8'} 388 | dependencies: 389 | normalize-path: 3.0.0 390 | picomatch: 2.3.1 391 | dev: true 392 | 393 | /app-root-path@1.0.0: 394 | resolution: {integrity: sha512-OKap/l8oElrynRMEbtwubVW5M5G16LKz9Wxo0DYBmce595lao0EbmD4O82j7qo9yukVWMTDriWvgrbt6yPnb9A==} 395 | dev: false 396 | 397 | /append-transform@2.0.0: 398 | resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} 399 | engines: {node: '>=8'} 400 | dependencies: 401 | default-require-extensions: 3.0.1 402 | dev: true 403 | 404 | /arch@2.2.0: 405 | resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} 406 | dev: false 407 | 408 | /archiver-utils@1.3.0: 409 | resolution: {integrity: sha512-h+hTREBXcW5e1L9RihGXdH4PHHdGipG/jE2sMZrqIH6BmZAxeGU5IWjVsKhokdCSWX7km6Kkh406zZNEElHFPQ==} 410 | engines: {node: '>= 0.10.0'} 411 | dependencies: 412 | glob: 7.2.3 413 | graceful-fs: 4.2.11 414 | lazystream: 1.0.1 415 | lodash: 4.17.21 416 | normalize-path: 2.1.1 417 | readable-stream: 2.3.8 418 | dev: false 419 | 420 | /archiver@2.0.3: 421 | resolution: {integrity: sha512-TqHyk3if+6c3elGaLZu+wPMnaY2hm8PYmgmt1J34NZlFyHKwTiSugJFLMfb0K1xbYAgRtDJjjyW3T2p2B1f//g==} 422 | engines: {node: '>= 4'} 423 | dependencies: 424 | archiver-utils: 1.3.0 425 | async: 2.6.4 426 | buffer-crc32: 0.2.13 427 | glob: 7.2.3 428 | lodash: 4.17.21 429 | readable-stream: 2.3.8 430 | tar-stream: 1.6.2 431 | walkdir: 0.0.11 432 | zip-stream: 1.2.0 433 | dev: false 434 | 435 | /archy@1.0.0: 436 | resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} 437 | dev: true 438 | 439 | /argparse@1.0.10: 440 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 441 | dependencies: 442 | sprintf-js: 1.0.3 443 | dev: true 444 | 445 | /array-buffer-byte-length@1.0.0: 446 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 447 | dependencies: 448 | call-bind: 1.0.2 449 | is-array-buffer: 3.0.2 450 | dev: false 451 | 452 | /array.prototype.reduce@1.0.5: 453 | resolution: {integrity: sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==} 454 | engines: {node: '>= 0.4'} 455 | dependencies: 456 | call-bind: 1.0.2 457 | define-properties: 1.2.0 458 | es-abstract: 1.21.2 459 | es-array-method-boxes-properly: 1.0.0 460 | is-string: 1.0.7 461 | dev: false 462 | 463 | /arrify@1.0.1: 464 | resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} 465 | engines: {node: '>=0.10.0'} 466 | dev: false 467 | 468 | /asap@2.0.6: 469 | resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} 470 | dev: false 471 | 472 | /async-hook-domain@2.0.4: 473 | resolution: {integrity: sha512-14LjCmlK1PK8eDtTezR6WX8TMaYNIzBIsd2D1sGoGjgx0BuNMMoSdk7i/drlbtamy0AWv9yv2tkB+ASdmeqFIw==} 474 | engines: {node: '>=10'} 475 | dev: true 476 | 477 | /async@2.6.4: 478 | resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} 479 | dependencies: 480 | lodash: 4.17.21 481 | dev: false 482 | 483 | /async@3.2.3: 484 | resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==} 485 | dev: false 486 | 487 | /asynckit@0.4.0: 488 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 489 | dev: false 490 | 491 | /available-typed-arrays@1.0.5: 492 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 493 | engines: {node: '>= 0.4'} 494 | dev: false 495 | 496 | /azure-devops-node-api@10.2.2: 497 | resolution: {integrity: sha512-4TVv2X7oNStT0vLaEfExmy3J4/CzfuXolEcQl/BRUmvGySqKStTG2O55/hUQ0kM7UJlZBLgniM0SBq4d/WkKow==} 498 | dependencies: 499 | tunnel: 0.0.6 500 | typed-rest-client: 1.8.9 501 | dev: false 502 | 503 | /azure-devops-node-api@12.0.0: 504 | resolution: {integrity: sha512-S6Il++7dQeMlZDokBDWw7YVoPeb90tWF10pYxnoauRMnkuL91jq9M7SOYRVhtO3FUC5URPkB/qzGa7jTLft0Xw==} 505 | dependencies: 506 | tunnel: 0.0.6 507 | typed-rest-client: 1.8.9 508 | dev: false 509 | 510 | /azure-pipelines-task-lib@4.3.1: 511 | resolution: {integrity: sha512-AEwz0+Sofv80UviCYsS6fzyX5zzsLapmNCMNUoaRePZQVN+oQBStix1DGg4fdZf9zJ6acNd9xEBZQWbWuZu5Zg==} 512 | dependencies: 513 | minimatch: 3.0.5 514 | mockery: 2.1.0 515 | q: 1.5.1 516 | semver: 5.7.1 517 | shelljs: 0.8.5 518 | sync-request: 6.1.0 519 | uuid: 3.4.0 520 | dev: false 521 | 522 | /balanced-match@1.0.2: 523 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 524 | 525 | /base64-js@1.5.1: 526 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 527 | dev: false 528 | 529 | /binary-extensions@2.2.0: 530 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 531 | engines: {node: '>=8'} 532 | dev: true 533 | 534 | /bind-obj-methods@3.0.0: 535 | resolution: {integrity: sha512-nLEaaz3/sEzNSyPWRsN9HNsqwk1AUyECtGj+XwGdIi3xABnEqecvXtIJ0wehQXuuER5uZ/5fTs2usONgYjG+iw==} 536 | engines: {node: '>=10'} 537 | dev: true 538 | 539 | /bl@1.2.3: 540 | resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} 541 | dependencies: 542 | readable-stream: 2.3.8 543 | safe-buffer: 5.1.2 544 | dev: false 545 | 546 | /brace-expansion@1.1.11: 547 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 548 | dependencies: 549 | balanced-match: 1.0.2 550 | concat-map: 0.0.1 551 | 552 | /braces@3.0.2: 553 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 554 | engines: {node: '>=8'} 555 | dependencies: 556 | fill-range: 7.0.1 557 | dev: true 558 | 559 | /browserslist@4.21.5: 560 | resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} 561 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 562 | hasBin: true 563 | dependencies: 564 | caniuse-lite: 1.0.30001481 565 | electron-to-chromium: 1.4.375 566 | node-releases: 2.0.10 567 | update-browserslist-db: 1.0.11(browserslist@4.21.5) 568 | dev: true 569 | 570 | /buffer-alloc-unsafe@1.1.0: 571 | resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} 572 | dev: false 573 | 574 | /buffer-alloc@1.2.0: 575 | resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} 576 | dependencies: 577 | buffer-alloc-unsafe: 1.1.0 578 | buffer-fill: 1.0.0 579 | dev: false 580 | 581 | /buffer-crc32@0.2.13: 582 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} 583 | dev: false 584 | 585 | /buffer-fill@1.0.0: 586 | resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} 587 | dev: false 588 | 589 | /buffer-from@1.1.2: 590 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 591 | 592 | /buffer@5.7.1: 593 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 594 | dependencies: 595 | base64-js: 1.5.1 596 | ieee754: 1.2.1 597 | dev: false 598 | 599 | /busboy@1.6.0: 600 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 601 | engines: {node: '>=10.16.0'} 602 | dependencies: 603 | streamsearch: 1.1.0 604 | dev: false 605 | 606 | /caching-transform@4.0.0: 607 | resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} 608 | engines: {node: '>=8'} 609 | dependencies: 610 | hasha: 5.2.2 611 | make-dir: 3.1.0 612 | package-hash: 4.0.0 613 | write-file-atomic: 3.0.3 614 | dev: true 615 | 616 | /call-bind@1.0.2: 617 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 618 | dependencies: 619 | function-bind: 1.1.1 620 | get-intrinsic: 1.2.0 621 | dev: false 622 | 623 | /camelcase-keys@8.0.2: 624 | resolution: {integrity: sha512-qMKdlOfsjlezMqxkUGGMaWWs17i2HoL15tM+wtx8ld4nLrUwU58TFdvyGOz/piNP842KeO8yXvggVQSdQ828NA==} 625 | engines: {node: '>=14.16'} 626 | dependencies: 627 | camelcase: 7.0.1 628 | map-obj: 4.3.0 629 | quick-lru: 6.1.1 630 | type-fest: 2.19.0 631 | dev: false 632 | 633 | /camelcase@5.3.1: 634 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 635 | engines: {node: '>=6'} 636 | dev: true 637 | 638 | /camelcase@7.0.1: 639 | resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} 640 | engines: {node: '>=14.16'} 641 | dev: false 642 | 643 | /caniuse-lite@1.0.30001481: 644 | resolution: {integrity: sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==} 645 | dev: true 646 | 647 | /caseless@0.12.0: 648 | resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} 649 | dev: false 650 | 651 | /chalk@2.4.2: 652 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 653 | engines: {node: '>=4'} 654 | dependencies: 655 | ansi-styles: 3.2.1 656 | escape-string-regexp: 1.0.5 657 | supports-color: 5.5.0 658 | 659 | /chokidar@3.5.3: 660 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 661 | engines: {node: '>= 8.10.0'} 662 | dependencies: 663 | anymatch: 3.1.3 664 | braces: 3.0.2 665 | glob-parent: 5.1.2 666 | is-binary-path: 2.1.0 667 | is-glob: 4.0.3 668 | normalize-path: 3.0.0 669 | readdirp: 3.6.0 670 | optionalDependencies: 671 | fsevents: 2.3.2 672 | dev: true 673 | 674 | /clean-stack@2.2.0: 675 | resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} 676 | engines: {node: '>=6'} 677 | dev: true 678 | 679 | /clipboardy@1.2.3: 680 | resolution: {integrity: sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==} 681 | engines: {node: '>=4'} 682 | dependencies: 683 | arch: 2.2.0 684 | execa: 0.8.0 685 | dev: false 686 | 687 | /cliui@6.0.0: 688 | resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} 689 | dependencies: 690 | string-width: 4.2.3 691 | strip-ansi: 6.0.1 692 | wrap-ansi: 6.2.0 693 | dev: true 694 | 695 | /cliui@7.0.4: 696 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 697 | dependencies: 698 | string-width: 4.2.3 699 | strip-ansi: 6.0.1 700 | wrap-ansi: 7.0.0 701 | dev: true 702 | 703 | /color-convert@1.9.3: 704 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 705 | dependencies: 706 | color-name: 1.1.3 707 | 708 | /color-convert@2.0.1: 709 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 710 | engines: {node: '>=7.0.0'} 711 | dependencies: 712 | color-name: 1.1.4 713 | dev: true 714 | 715 | /color-name@1.1.3: 716 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 717 | 718 | /color-name@1.1.4: 719 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 720 | dev: true 721 | 722 | /color-support@1.1.3: 723 | resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} 724 | hasBin: true 725 | dev: true 726 | 727 | /colors@1.0.3: 728 | resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} 729 | engines: {node: '>=0.1.90'} 730 | dev: false 731 | 732 | /colors@1.3.3: 733 | resolution: {integrity: sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==} 734 | engines: {node: '>=0.1.90'} 735 | dev: false 736 | 737 | /combined-stream@1.0.8: 738 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 739 | engines: {node: '>= 0.8'} 740 | dependencies: 741 | delayed-stream: 1.0.0 742 | dev: false 743 | 744 | /commondir@1.0.1: 745 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 746 | dev: true 747 | 748 | /compress-commons@1.2.2: 749 | resolution: {integrity: sha512-SLTU8iWWmcORfUN+4351Z2aZXKJe1tr0jSilPMCZlLPzpdTXnkBW1LevW/MfuANBKJek8Xu9ggqrtVmQrChLtg==} 750 | engines: {node: '>= 0.10.0'} 751 | dependencies: 752 | buffer-crc32: 0.2.13 753 | crc32-stream: 2.0.0 754 | normalize-path: 2.1.1 755 | readable-stream: 2.3.8 756 | dev: false 757 | 758 | /concat-map@0.0.1: 759 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 760 | 761 | /concat-stream@1.6.2: 762 | resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} 763 | engines: {'0': node >= 0.8} 764 | dependencies: 765 | buffer-from: 1.1.2 766 | inherits: 2.0.4 767 | readable-stream: 2.3.8 768 | typedarray: 0.0.6 769 | dev: false 770 | 771 | /convert-source-map@1.9.0: 772 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 773 | dev: true 774 | 775 | /core-util-is@1.0.3: 776 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 777 | dev: false 778 | 779 | /crc32-stream@2.0.0: 780 | resolution: {integrity: sha512-UjZSqFCbn+jZUHJIh6Y3vMF7EJLcJWNm4tKDf2peJRwlZKHvkkvOMTvAei6zjU9gO1xONVr3rRFw0gixm2eUng==} 781 | engines: {node: '>= 0.10.0'} 782 | dependencies: 783 | crc: 3.8.0 784 | readable-stream: 2.3.8 785 | dev: false 786 | 787 | /crc@3.8.0: 788 | resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} 789 | dependencies: 790 | buffer: 5.7.1 791 | dev: false 792 | 793 | /cross-spawn@5.1.0: 794 | resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} 795 | dependencies: 796 | lru-cache: 4.1.5 797 | shebang-command: 1.2.0 798 | which: 1.3.1 799 | dev: false 800 | 801 | /cross-spawn@7.0.3: 802 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 803 | engines: {node: '>= 8'} 804 | dependencies: 805 | path-key: 3.1.1 806 | shebang-command: 2.0.0 807 | which: 2.0.2 808 | 809 | /cycle@1.0.3: 810 | resolution: {integrity: sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==} 811 | engines: {node: '>=0.4.0'} 812 | dev: false 813 | 814 | /dateformat@1.0.11: 815 | resolution: {integrity: sha512-5zcI+Qoul0QgiCcjzsobs9G1c+vHCNaYB2NGa57ZbVnP7bZeKJJgoM/K+I/obaHAmyEL0J8hJafbQ+HFSZnzZA==} 816 | hasBin: true 817 | dependencies: 818 | get-stdin: 9.0.0 819 | meow: 11.0.0 820 | dev: false 821 | 822 | /debug@4.3.4: 823 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 824 | engines: {node: '>=6.0'} 825 | peerDependencies: 826 | supports-color: '*' 827 | peerDependenciesMeta: 828 | supports-color: 829 | optional: true 830 | dependencies: 831 | ms: 2.1.2 832 | dev: true 833 | 834 | /decamelize-keys@1.1.1: 835 | resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} 836 | engines: {node: '>=0.10.0'} 837 | dependencies: 838 | decamelize: 1.2.0 839 | map-obj: 1.0.1 840 | dev: false 841 | 842 | /decamelize@1.2.0: 843 | resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} 844 | engines: {node: '>=0.10.0'} 845 | 846 | /decamelize@6.0.0: 847 | resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} 848 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 849 | dev: false 850 | 851 | /default-require-extensions@3.0.1: 852 | resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} 853 | engines: {node: '>=8'} 854 | dependencies: 855 | strip-bom: 4.0.0 856 | dev: true 857 | 858 | /define-properties@1.2.0: 859 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} 860 | engines: {node: '>= 0.4'} 861 | dependencies: 862 | has-property-descriptors: 1.0.0 863 | object-keys: 1.1.1 864 | dev: false 865 | 866 | /delayed-stream@1.0.0: 867 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 868 | engines: {node: '>=0.4.0'} 869 | dev: false 870 | 871 | /diff@4.0.2: 872 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 873 | engines: {node: '>=0.3.1'} 874 | dev: true 875 | 876 | /electron-to-chromium@1.4.375: 877 | resolution: {integrity: sha512-czSmDyWG5qmb4TcwD5lhVDP6viDPtHfrIzw0CnzisRpziiUaq+ffptBHs70d9YkFtrxzaDvOmFPeVRVNwMt2rQ==} 878 | dev: true 879 | 880 | /emoji-regex@8.0.0: 881 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 882 | dev: true 883 | 884 | /end-of-stream@1.4.4: 885 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 886 | dependencies: 887 | once: 1.4.0 888 | dev: false 889 | 890 | /error-ex@1.3.2: 891 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 892 | dependencies: 893 | is-arrayish: 0.2.1 894 | dev: false 895 | 896 | /es-abstract@1.21.2: 897 | resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} 898 | engines: {node: '>= 0.4'} 899 | dependencies: 900 | array-buffer-byte-length: 1.0.0 901 | available-typed-arrays: 1.0.5 902 | call-bind: 1.0.2 903 | es-set-tostringtag: 2.0.1 904 | es-to-primitive: 1.2.1 905 | function.prototype.name: 1.1.5 906 | get-intrinsic: 1.2.0 907 | get-symbol-description: 1.0.0 908 | globalthis: 1.0.3 909 | gopd: 1.0.1 910 | has: 1.0.3 911 | has-property-descriptors: 1.0.0 912 | has-proto: 1.0.1 913 | has-symbols: 1.0.3 914 | internal-slot: 1.0.5 915 | is-array-buffer: 3.0.2 916 | is-callable: 1.2.7 917 | is-negative-zero: 2.0.2 918 | is-regex: 1.1.4 919 | is-shared-array-buffer: 1.0.2 920 | is-string: 1.0.7 921 | is-typed-array: 1.1.10 922 | is-weakref: 1.0.2 923 | object-inspect: 1.12.3 924 | object-keys: 1.1.1 925 | object.assign: 4.1.4 926 | regexp.prototype.flags: 1.5.0 927 | safe-regex-test: 1.0.0 928 | string.prototype.trim: 1.2.7 929 | string.prototype.trimend: 1.0.6 930 | string.prototype.trimstart: 1.0.6 931 | typed-array-length: 1.0.4 932 | unbox-primitive: 1.0.2 933 | which-typed-array: 1.1.9 934 | dev: false 935 | 936 | /es-array-method-boxes-properly@1.0.0: 937 | resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} 938 | dev: false 939 | 940 | /es-set-tostringtag@2.0.1: 941 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} 942 | engines: {node: '>= 0.4'} 943 | dependencies: 944 | get-intrinsic: 1.2.0 945 | has: 1.0.3 946 | has-tostringtag: 1.0.0 947 | dev: false 948 | 949 | /es-to-primitive@1.2.1: 950 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 951 | engines: {node: '>= 0.4'} 952 | dependencies: 953 | is-callable: 1.2.7 954 | is-date-object: 1.0.5 955 | is-symbol: 1.0.4 956 | dev: false 957 | 958 | /es6-error@4.1.1: 959 | resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} 960 | dev: true 961 | 962 | /escalade@3.1.1: 963 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 964 | engines: {node: '>=6'} 965 | dev: true 966 | 967 | /escape-string-regexp@1.0.5: 968 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 969 | engines: {node: '>=0.8.0'} 970 | 971 | /escape-string-regexp@2.0.0: 972 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 973 | engines: {node: '>=8'} 974 | dev: true 975 | 976 | /esprima@4.0.1: 977 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 978 | engines: {node: '>=4'} 979 | hasBin: true 980 | dev: true 981 | 982 | /events-to-array@1.1.2: 983 | resolution: {integrity: sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA==} 984 | dev: true 985 | 986 | /execa@0.8.0: 987 | resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==} 988 | engines: {node: '>=4'} 989 | dependencies: 990 | cross-spawn: 5.1.0 991 | get-stream: 3.0.0 992 | is-stream: 1.1.0 993 | npm-run-path: 2.0.2 994 | p-finally: 1.0.0 995 | signal-exit: 3.0.7 996 | strip-eof: 1.0.0 997 | dev: false 998 | 999 | /execa@7.1.1: 1000 | resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} 1001 | engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} 1002 | dependencies: 1003 | cross-spawn: 7.0.3 1004 | get-stream: 6.0.1 1005 | human-signals: 4.3.1 1006 | is-stream: 3.0.0 1007 | merge-stream: 2.0.0 1008 | npm-run-path: 5.1.0 1009 | onetime: 6.0.0 1010 | signal-exit: 3.0.7 1011 | strip-final-newline: 3.0.0 1012 | dev: false 1013 | 1014 | /eyes@0.1.8: 1015 | resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} 1016 | engines: {node: '> 0.1.90'} 1017 | dev: false 1018 | 1019 | /fill-range@7.0.1: 1020 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1021 | engines: {node: '>=8'} 1022 | dependencies: 1023 | to-regex-range: 5.0.1 1024 | dev: true 1025 | 1026 | /find-cache-dir@3.3.2: 1027 | resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} 1028 | engines: {node: '>=8'} 1029 | dependencies: 1030 | commondir: 1.0.1 1031 | make-dir: 3.1.0 1032 | pkg-dir: 4.2.0 1033 | dev: true 1034 | 1035 | /find-up@4.1.0: 1036 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1037 | engines: {node: '>=8'} 1038 | dependencies: 1039 | locate-path: 5.0.0 1040 | path-exists: 4.0.0 1041 | dev: true 1042 | 1043 | /find-up@6.3.0: 1044 | resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} 1045 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1046 | dependencies: 1047 | locate-path: 7.2.0 1048 | path-exists: 5.0.0 1049 | dev: false 1050 | 1051 | /findit@2.0.0: 1052 | resolution: {integrity: sha512-ENZS237/Hr8bjczn5eKuBohLgaD0JyUd0arxretR1f9RO46vZHA1b2y0VorgGV3WaOT3c+78P8h7v4JGJ1i/rg==} 1053 | dev: true 1054 | 1055 | /for-each@0.3.3: 1056 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1057 | dependencies: 1058 | is-callable: 1.2.7 1059 | dev: false 1060 | 1061 | /foreground-child@2.0.0: 1062 | resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} 1063 | engines: {node: '>=8.0.0'} 1064 | dependencies: 1065 | cross-spawn: 7.0.3 1066 | signal-exit: 3.0.7 1067 | dev: true 1068 | 1069 | /form-data@2.5.1: 1070 | resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} 1071 | engines: {node: '>= 0.12'} 1072 | dependencies: 1073 | asynckit: 0.4.0 1074 | combined-stream: 1.0.8 1075 | mime-types: 2.1.35 1076 | dev: false 1077 | 1078 | /fromentries@1.3.2: 1079 | resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} 1080 | dev: true 1081 | 1082 | /fs-constants@1.0.0: 1083 | resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} 1084 | dev: false 1085 | 1086 | /fs-exists-cached@1.0.0: 1087 | resolution: {integrity: sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==} 1088 | dev: true 1089 | 1090 | /fs.realpath@1.0.0: 1091 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1092 | 1093 | /fsevents@2.3.2: 1094 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1095 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1096 | os: [darwin] 1097 | requiresBuild: true 1098 | dev: true 1099 | optional: true 1100 | 1101 | /function-bind@1.1.1: 1102 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1103 | dev: false 1104 | 1105 | /function-loop@2.0.1: 1106 | resolution: {integrity: sha512-ktIR+O6i/4h+j/ZhZJNdzeI4i9lEPeEK6UPR2EVyTVBqOwcU3Za9xYKLH64ZR9HmcROyRrOkizNyjjtWJzDDkQ==} 1107 | dev: true 1108 | 1109 | /function.prototype.name@1.1.5: 1110 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} 1111 | engines: {node: '>= 0.4'} 1112 | dependencies: 1113 | call-bind: 1.0.2 1114 | define-properties: 1.2.0 1115 | es-abstract: 1.21.2 1116 | functions-have-names: 1.2.3 1117 | dev: false 1118 | 1119 | /functions-have-names@1.2.3: 1120 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1121 | dev: false 1122 | 1123 | /gensync@1.0.0-beta.2: 1124 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1125 | engines: {node: '>=6.9.0'} 1126 | dev: true 1127 | 1128 | /get-caller-file@2.0.5: 1129 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1130 | engines: {node: 6.* || 8.* || >= 10.*} 1131 | dev: true 1132 | 1133 | /get-intrinsic@1.2.0: 1134 | resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} 1135 | dependencies: 1136 | function-bind: 1.1.1 1137 | has: 1.0.3 1138 | has-symbols: 1.0.3 1139 | dev: false 1140 | 1141 | /get-package-type@0.1.0: 1142 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} 1143 | engines: {node: '>=8.0.0'} 1144 | dev: true 1145 | 1146 | /get-port@3.2.0: 1147 | resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} 1148 | engines: {node: '>=4'} 1149 | dev: false 1150 | 1151 | /get-stdin@9.0.0: 1152 | resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} 1153 | engines: {node: '>=12'} 1154 | dev: false 1155 | 1156 | /get-stream@3.0.0: 1157 | resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} 1158 | engines: {node: '>=4'} 1159 | dev: false 1160 | 1161 | /get-stream@6.0.1: 1162 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1163 | engines: {node: '>=10'} 1164 | dev: false 1165 | 1166 | /get-symbol-description@1.0.0: 1167 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1168 | engines: {node: '>= 0.4'} 1169 | dependencies: 1170 | call-bind: 1.0.2 1171 | get-intrinsic: 1.2.0 1172 | dev: false 1173 | 1174 | /glob-parent@5.1.2: 1175 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1176 | engines: {node: '>= 6'} 1177 | dependencies: 1178 | is-glob: 4.0.3 1179 | dev: true 1180 | 1181 | /glob@7.1.2: 1182 | resolution: {integrity: sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==} 1183 | dependencies: 1184 | fs.realpath: 1.0.0 1185 | inflight: 1.0.6 1186 | inherits: 2.0.4 1187 | minimatch: 3.1.2 1188 | once: 1.4.0 1189 | path-is-absolute: 1.0.1 1190 | dev: false 1191 | 1192 | /glob@7.2.3: 1193 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1194 | dependencies: 1195 | fs.realpath: 1.0.0 1196 | inflight: 1.0.6 1197 | inherits: 2.0.4 1198 | minimatch: 3.1.2 1199 | once: 1.4.0 1200 | path-is-absolute: 1.0.1 1201 | 1202 | /globals@11.12.0: 1203 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1204 | engines: {node: '>=4'} 1205 | dev: true 1206 | 1207 | /globalthis@1.0.3: 1208 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1209 | engines: {node: '>= 0.4'} 1210 | dependencies: 1211 | define-properties: 1.2.0 1212 | dev: false 1213 | 1214 | /gopd@1.0.1: 1215 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1216 | dependencies: 1217 | get-intrinsic: 1.2.0 1218 | dev: false 1219 | 1220 | /graceful-fs@4.2.11: 1221 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1222 | 1223 | /hard-rejection@2.1.0: 1224 | resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} 1225 | engines: {node: '>=6'} 1226 | dev: false 1227 | 1228 | /has-bigints@1.0.2: 1229 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1230 | dev: false 1231 | 1232 | /has-flag@3.0.0: 1233 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1234 | engines: {node: '>=4'} 1235 | 1236 | /has-flag@4.0.0: 1237 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1238 | engines: {node: '>=8'} 1239 | dev: true 1240 | 1241 | /has-property-descriptors@1.0.0: 1242 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 1243 | dependencies: 1244 | get-intrinsic: 1.2.0 1245 | dev: false 1246 | 1247 | /has-proto@1.0.1: 1248 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1249 | engines: {node: '>= 0.4'} 1250 | dev: false 1251 | 1252 | /has-symbols@1.0.3: 1253 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1254 | engines: {node: '>= 0.4'} 1255 | dev: false 1256 | 1257 | /has-tostringtag@1.0.0: 1258 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1259 | engines: {node: '>= 0.4'} 1260 | dependencies: 1261 | has-symbols: 1.0.3 1262 | dev: false 1263 | 1264 | /has@1.0.3: 1265 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1266 | engines: {node: '>= 0.4.0'} 1267 | dependencies: 1268 | function-bind: 1.1.1 1269 | dev: false 1270 | 1271 | /hasha@5.2.2: 1272 | resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} 1273 | engines: {node: '>=8'} 1274 | dependencies: 1275 | is-stream: 2.0.1 1276 | type-fest: 0.8.1 1277 | dev: true 1278 | 1279 | /hosted-git-info@4.1.0: 1280 | resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} 1281 | engines: {node: '>=10'} 1282 | dependencies: 1283 | lru-cache: 6.0.0 1284 | dev: false 1285 | 1286 | /hosted-git-info@5.2.1: 1287 | resolution: {integrity: sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==} 1288 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 1289 | dependencies: 1290 | lru-cache: 7.18.3 1291 | dev: false 1292 | 1293 | /html-escaper@2.0.2: 1294 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 1295 | dev: true 1296 | 1297 | /http-basic@8.1.3: 1298 | resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==} 1299 | engines: {node: '>=6.0.0'} 1300 | dependencies: 1301 | caseless: 0.12.0 1302 | concat-stream: 1.6.2 1303 | http-response-object: 3.0.2 1304 | parse-cache-control: 1.0.1 1305 | dev: false 1306 | 1307 | /http-response-object@3.0.2: 1308 | resolution: {integrity: sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==} 1309 | dependencies: 1310 | '@types/node': 10.17.60 1311 | dev: false 1312 | 1313 | /human-signals@4.3.1: 1314 | resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} 1315 | engines: {node: '>=14.18.0'} 1316 | dev: false 1317 | 1318 | /ieee754@1.2.1: 1319 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 1320 | dev: false 1321 | 1322 | /immediate@3.0.6: 1323 | resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} 1324 | dev: false 1325 | 1326 | /imurmurhash@0.1.4: 1327 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1328 | engines: {node: '>=0.8.19'} 1329 | dev: true 1330 | 1331 | /indent-string@4.0.0: 1332 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 1333 | engines: {node: '>=8'} 1334 | dev: true 1335 | 1336 | /indent-string@5.0.0: 1337 | resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} 1338 | engines: {node: '>=12'} 1339 | dev: false 1340 | 1341 | /inflight@1.0.6: 1342 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1343 | dependencies: 1344 | once: 1.4.0 1345 | wrappy: 1.0.2 1346 | 1347 | /inherits@2.0.4: 1348 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1349 | 1350 | /internal-slot@1.0.5: 1351 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} 1352 | engines: {node: '>= 0.4'} 1353 | dependencies: 1354 | get-intrinsic: 1.2.0 1355 | has: 1.0.3 1356 | side-channel: 1.0.4 1357 | dev: false 1358 | 1359 | /interpret@1.4.0: 1360 | resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} 1361 | engines: {node: '>= 0.10'} 1362 | dev: false 1363 | 1364 | /is-array-buffer@3.0.2: 1365 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 1366 | dependencies: 1367 | call-bind: 1.0.2 1368 | get-intrinsic: 1.2.0 1369 | is-typed-array: 1.1.10 1370 | dev: false 1371 | 1372 | /is-arrayish@0.2.1: 1373 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1374 | dev: false 1375 | 1376 | /is-bigint@1.0.4: 1377 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1378 | dependencies: 1379 | has-bigints: 1.0.2 1380 | dev: false 1381 | 1382 | /is-binary-path@2.1.0: 1383 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1384 | engines: {node: '>=8'} 1385 | dependencies: 1386 | binary-extensions: 2.2.0 1387 | dev: true 1388 | 1389 | /is-boolean-object@1.1.2: 1390 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1391 | engines: {node: '>= 0.4'} 1392 | dependencies: 1393 | call-bind: 1.0.2 1394 | has-tostringtag: 1.0.0 1395 | dev: false 1396 | 1397 | /is-callable@1.2.7: 1398 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1399 | engines: {node: '>= 0.4'} 1400 | dev: false 1401 | 1402 | /is-core-module@2.12.0: 1403 | resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} 1404 | dependencies: 1405 | has: 1.0.3 1406 | dev: false 1407 | 1408 | /is-date-object@1.0.5: 1409 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1410 | engines: {node: '>= 0.4'} 1411 | dependencies: 1412 | has-tostringtag: 1.0.0 1413 | dev: false 1414 | 1415 | /is-extglob@2.1.1: 1416 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1417 | engines: {node: '>=0.10.0'} 1418 | dev: true 1419 | 1420 | /is-fullwidth-code-point@3.0.0: 1421 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1422 | engines: {node: '>=8'} 1423 | dev: true 1424 | 1425 | /is-glob@4.0.3: 1426 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1427 | engines: {node: '>=0.10.0'} 1428 | dependencies: 1429 | is-extglob: 2.1.1 1430 | dev: true 1431 | 1432 | /is-negative-zero@2.0.2: 1433 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 1434 | engines: {node: '>= 0.4'} 1435 | dev: false 1436 | 1437 | /is-number-object@1.0.7: 1438 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1439 | engines: {node: '>= 0.4'} 1440 | dependencies: 1441 | has-tostringtag: 1.0.0 1442 | dev: false 1443 | 1444 | /is-number@7.0.0: 1445 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1446 | engines: {node: '>=0.12.0'} 1447 | dev: true 1448 | 1449 | /is-plain-obj@1.1.0: 1450 | resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} 1451 | engines: {node: '>=0.10.0'} 1452 | dev: false 1453 | 1454 | /is-regex@1.1.4: 1455 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1456 | engines: {node: '>= 0.4'} 1457 | dependencies: 1458 | call-bind: 1.0.2 1459 | has-tostringtag: 1.0.0 1460 | dev: false 1461 | 1462 | /is-shared-array-buffer@1.0.2: 1463 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 1464 | dependencies: 1465 | call-bind: 1.0.2 1466 | dev: false 1467 | 1468 | /is-stream@1.1.0: 1469 | resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} 1470 | engines: {node: '>=0.10.0'} 1471 | dev: false 1472 | 1473 | /is-stream@2.0.1: 1474 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1475 | engines: {node: '>=8'} 1476 | dev: true 1477 | 1478 | /is-stream@3.0.0: 1479 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1480 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1481 | dev: false 1482 | 1483 | /is-string@1.0.7: 1484 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1485 | engines: {node: '>= 0.4'} 1486 | dependencies: 1487 | has-tostringtag: 1.0.0 1488 | dev: false 1489 | 1490 | /is-symbol@1.0.4: 1491 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1492 | engines: {node: '>= 0.4'} 1493 | dependencies: 1494 | has-symbols: 1.0.3 1495 | dev: false 1496 | 1497 | /is-typed-array@1.1.10: 1498 | resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} 1499 | engines: {node: '>= 0.4'} 1500 | dependencies: 1501 | available-typed-arrays: 1.0.5 1502 | call-bind: 1.0.2 1503 | for-each: 0.3.3 1504 | gopd: 1.0.1 1505 | has-tostringtag: 1.0.0 1506 | dev: false 1507 | 1508 | /is-typedarray@1.0.0: 1509 | resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} 1510 | dev: true 1511 | 1512 | /is-weakref@1.0.2: 1513 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1514 | dependencies: 1515 | call-bind: 1.0.2 1516 | dev: false 1517 | 1518 | /is-windows@1.0.2: 1519 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 1520 | engines: {node: '>=0.10.0'} 1521 | dev: true 1522 | 1523 | /isarray@1.0.0: 1524 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 1525 | dev: false 1526 | 1527 | /isarray@2.0.5: 1528 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1529 | dev: false 1530 | 1531 | /isexe@2.0.0: 1532 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1533 | 1534 | /isstream@0.1.2: 1535 | resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} 1536 | dev: false 1537 | 1538 | /istanbul-lib-coverage@3.2.0: 1539 | resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} 1540 | engines: {node: '>=8'} 1541 | dev: true 1542 | 1543 | /istanbul-lib-hook@3.0.0: 1544 | resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} 1545 | engines: {node: '>=8'} 1546 | dependencies: 1547 | append-transform: 2.0.0 1548 | dev: true 1549 | 1550 | /istanbul-lib-instrument@4.0.3: 1551 | resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} 1552 | engines: {node: '>=8'} 1553 | dependencies: 1554 | '@babel/core': 7.21.4 1555 | '@istanbuljs/schema': 0.1.3 1556 | istanbul-lib-coverage: 3.2.0 1557 | semver: 6.3.0 1558 | transitivePeerDependencies: 1559 | - supports-color 1560 | dev: true 1561 | 1562 | /istanbul-lib-processinfo@2.0.3: 1563 | resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==} 1564 | engines: {node: '>=8'} 1565 | dependencies: 1566 | archy: 1.0.0 1567 | cross-spawn: 7.0.3 1568 | istanbul-lib-coverage: 3.2.0 1569 | p-map: 3.0.0 1570 | rimraf: 3.0.2 1571 | uuid: 8.3.2 1572 | dev: true 1573 | 1574 | /istanbul-lib-report@3.0.0: 1575 | resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} 1576 | engines: {node: '>=8'} 1577 | dependencies: 1578 | istanbul-lib-coverage: 3.2.0 1579 | make-dir: 3.1.0 1580 | supports-color: 7.2.0 1581 | dev: true 1582 | 1583 | /istanbul-lib-source-maps@4.0.1: 1584 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} 1585 | engines: {node: '>=10'} 1586 | dependencies: 1587 | debug: 4.3.4 1588 | istanbul-lib-coverage: 3.2.0 1589 | source-map: 0.6.1 1590 | transitivePeerDependencies: 1591 | - supports-color 1592 | dev: true 1593 | 1594 | /istanbul-reports@3.1.5: 1595 | resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} 1596 | engines: {node: '>=8'} 1597 | dependencies: 1598 | html-escaper: 2.0.2 1599 | istanbul-lib-report: 3.0.0 1600 | dev: true 1601 | 1602 | /jackspeak@1.4.2: 1603 | resolution: {integrity: sha512-GHeGTmnuaHnvS+ZctRB01bfxARuu9wW83ENbuiweu07SFcVlZrJpcshSre/keGT7YGBhLHg/+rXCNSrsEHKU4Q==} 1604 | engines: {node: '>=8'} 1605 | dependencies: 1606 | cliui: 7.0.4 1607 | dev: true 1608 | 1609 | /jju@1.4.0: 1610 | resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} 1611 | dev: false 1612 | 1613 | /js-tokens@4.0.0: 1614 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1615 | 1616 | /js-yaml@3.14.1: 1617 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1618 | hasBin: true 1619 | dependencies: 1620 | argparse: 1.0.10 1621 | esprima: 4.0.1 1622 | dev: true 1623 | 1624 | /jsesc@2.5.2: 1625 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 1626 | engines: {node: '>=4'} 1627 | hasBin: true 1628 | dev: true 1629 | 1630 | /json-in-place@1.0.1: 1631 | resolution: {integrity: sha512-XDFWT1iOlZErTFU0GGRju9g/uzY8BVFVsGsbgiE71Fg2+3c0lK4X4GSRB8PQ527hVkAJ2Z5Qv2sa7Re9iFNYKw==} 1632 | dependencies: 1633 | json-lexer: 1.1.1 1634 | dev: false 1635 | 1636 | /json-lexer@1.1.1: 1637 | resolution: {integrity: sha512-kdpvcH1gqYXQEAVFxVwIWZKihrS0o9SjbwW2v8+0p6HA/YSMk5c4BkXdMiz/kDz2QW0XlOSkFKrJsC9KL0Mb5g==} 1638 | dev: false 1639 | 1640 | /json-parse-even-better-errors@2.3.1: 1641 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1642 | dev: false 1643 | 1644 | /json5@2.2.3: 1645 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1646 | engines: {node: '>=6'} 1647 | hasBin: true 1648 | dev: true 1649 | 1650 | /jszip@3.10.1: 1651 | resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} 1652 | dependencies: 1653 | lie: 3.3.0 1654 | pako: 1.0.11 1655 | readable-stream: 2.3.8 1656 | setimmediate: 1.0.5 1657 | dev: false 1658 | 1659 | /kind-of@6.0.3: 1660 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 1661 | engines: {node: '>=0.10.0'} 1662 | dev: false 1663 | 1664 | /lazystream@1.0.1: 1665 | resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} 1666 | engines: {node: '>= 0.6.3'} 1667 | dependencies: 1668 | readable-stream: 2.3.8 1669 | dev: false 1670 | 1671 | /libtap@1.4.0: 1672 | resolution: {integrity: sha512-STLFynswQ2A6W14JkabgGetBNk6INL1REgJ9UeNKw5llXroC2cGLgKTqavv0sl8OLVztLLipVKMcQ7yeUcqpmg==} 1673 | engines: {node: '>=10'} 1674 | dependencies: 1675 | async-hook-domain: 2.0.4 1676 | bind-obj-methods: 3.0.0 1677 | diff: 4.0.2 1678 | function-loop: 2.0.1 1679 | minipass: 3.3.6 1680 | own-or: 1.0.0 1681 | own-or-env: 1.0.2 1682 | signal-exit: 3.0.7 1683 | stack-utils: 2.0.6 1684 | tap-parser: 11.0.2 1685 | tap-yaml: 1.0.2 1686 | tcompare: 5.0.7 1687 | trivial-deferred: 1.1.2 1688 | dev: true 1689 | 1690 | /lie@3.3.0: 1691 | resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} 1692 | dependencies: 1693 | immediate: 3.0.6 1694 | dev: false 1695 | 1696 | /lines-and-columns@1.2.4: 1697 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1698 | dev: false 1699 | 1700 | /locate-path@5.0.0: 1701 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1702 | engines: {node: '>=8'} 1703 | dependencies: 1704 | p-locate: 4.1.0 1705 | dev: true 1706 | 1707 | /locate-path@7.2.0: 1708 | resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} 1709 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1710 | dependencies: 1711 | p-locate: 6.0.0 1712 | dev: false 1713 | 1714 | /lodash.flattendeep@4.4.0: 1715 | resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} 1716 | dev: true 1717 | 1718 | /lodash@4.17.21: 1719 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1720 | dev: false 1721 | 1722 | /lru-cache@4.1.5: 1723 | resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} 1724 | dependencies: 1725 | pseudomap: 1.0.2 1726 | yallist: 2.1.2 1727 | dev: false 1728 | 1729 | /lru-cache@5.1.1: 1730 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1731 | dependencies: 1732 | yallist: 3.1.1 1733 | dev: true 1734 | 1735 | /lru-cache@6.0.0: 1736 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1737 | engines: {node: '>=10'} 1738 | dependencies: 1739 | yallist: 4.0.0 1740 | dev: false 1741 | 1742 | /lru-cache@7.18.3: 1743 | resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} 1744 | engines: {node: '>=12'} 1745 | dev: false 1746 | 1747 | /make-dir@3.1.0: 1748 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 1749 | engines: {node: '>=8'} 1750 | dependencies: 1751 | semver: 6.3.0 1752 | dev: true 1753 | 1754 | /map-obj@1.0.1: 1755 | resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} 1756 | engines: {node: '>=0.10.0'} 1757 | dev: false 1758 | 1759 | /map-obj@4.3.0: 1760 | resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} 1761 | engines: {node: '>=8'} 1762 | dev: false 1763 | 1764 | /meow@11.0.0: 1765 | resolution: {integrity: sha512-Cl0yeeIrko6d94KpUo1M+0X1sB14ikoaqlIGuTH1fW4I+E3+YljL54/hb/BWmVfrV9tTV9zU04+xjw08Fh2WkA==} 1766 | engines: {node: '>=14.16'} 1767 | dependencies: 1768 | '@types/minimist': 1.2.2 1769 | camelcase-keys: 8.0.2 1770 | decamelize: 6.0.0 1771 | decamelize-keys: 1.1.1 1772 | hard-rejection: 2.1.0 1773 | minimist-options: 4.1.0 1774 | normalize-package-data: 4.0.1 1775 | read-pkg-up: 9.1.0 1776 | redent: 4.0.0 1777 | trim-newlines: 4.1.1 1778 | type-fest: 3.9.0 1779 | yargs-parser: 21.1.1 1780 | dev: false 1781 | 1782 | /merge-stream@2.0.0: 1783 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1784 | dev: false 1785 | 1786 | /mime-db@1.52.0: 1787 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1788 | engines: {node: '>= 0.6'} 1789 | dev: false 1790 | 1791 | /mime-types@2.1.35: 1792 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1793 | engines: {node: '>= 0.6'} 1794 | dependencies: 1795 | mime-db: 1.52.0 1796 | dev: false 1797 | 1798 | /mimic-fn@4.0.0: 1799 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1800 | engines: {node: '>=12'} 1801 | dev: false 1802 | 1803 | /min-indent@1.0.1: 1804 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 1805 | engines: {node: '>=4'} 1806 | dev: false 1807 | 1808 | /minimatch@3.0.5: 1809 | resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==} 1810 | dependencies: 1811 | brace-expansion: 1.1.11 1812 | dev: false 1813 | 1814 | /minimatch@3.1.2: 1815 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1816 | dependencies: 1817 | brace-expansion: 1.1.11 1818 | 1819 | /minimist-options@4.1.0: 1820 | resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} 1821 | engines: {node: '>= 6'} 1822 | dependencies: 1823 | arrify: 1.0.1 1824 | is-plain-obj: 1.1.0 1825 | kind-of: 6.0.3 1826 | dev: false 1827 | 1828 | /minimist@1.2.8: 1829 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1830 | dev: false 1831 | 1832 | /minipass@3.3.6: 1833 | resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} 1834 | engines: {node: '>=8'} 1835 | dependencies: 1836 | yallist: 4.0.0 1837 | dev: true 1838 | 1839 | /mkdirp@1.0.4: 1840 | resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} 1841 | engines: {node: '>=10'} 1842 | hasBin: true 1843 | 1844 | /mockery@2.1.0: 1845 | resolution: {integrity: sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==} 1846 | dev: false 1847 | 1848 | /ms@2.1.2: 1849 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1850 | dev: true 1851 | 1852 | /mute-stream@0.0.8: 1853 | resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} 1854 | dev: false 1855 | 1856 | /node-preload@0.2.1: 1857 | resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} 1858 | engines: {node: '>=8'} 1859 | dependencies: 1860 | process-on-spawn: 1.0.0 1861 | dev: true 1862 | 1863 | /node-releases@2.0.10: 1864 | resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} 1865 | dev: true 1866 | 1867 | /normalize-package-data@3.0.3: 1868 | resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} 1869 | engines: {node: '>=10'} 1870 | dependencies: 1871 | hosted-git-info: 4.1.0 1872 | is-core-module: 2.12.0 1873 | semver: 7.5.0 1874 | validate-npm-package-license: 3.0.4 1875 | dev: false 1876 | 1877 | /normalize-package-data@4.0.1: 1878 | resolution: {integrity: sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==} 1879 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 1880 | dependencies: 1881 | hosted-git-info: 5.2.1 1882 | is-core-module: 2.12.0 1883 | semver: 7.5.0 1884 | validate-npm-package-license: 3.0.4 1885 | dev: false 1886 | 1887 | /normalize-path@2.1.1: 1888 | resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} 1889 | engines: {node: '>=0.10.0'} 1890 | dependencies: 1891 | remove-trailing-separator: 1.1.0 1892 | dev: false 1893 | 1894 | /normalize-path@3.0.0: 1895 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1896 | engines: {node: '>=0.10.0'} 1897 | dev: true 1898 | 1899 | /npm-run-path@2.0.2: 1900 | resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} 1901 | engines: {node: '>=4'} 1902 | dependencies: 1903 | path-key: 2.0.1 1904 | dev: false 1905 | 1906 | /npm-run-path@5.1.0: 1907 | resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} 1908 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1909 | dependencies: 1910 | path-key: 4.0.0 1911 | dev: false 1912 | 1913 | /nyc@15.1.0: 1914 | resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} 1915 | engines: {node: '>=8.9'} 1916 | hasBin: true 1917 | dependencies: 1918 | '@istanbuljs/load-nyc-config': 1.1.0 1919 | '@istanbuljs/schema': 0.1.3 1920 | caching-transform: 4.0.0 1921 | convert-source-map: 1.9.0 1922 | decamelize: 1.2.0 1923 | find-cache-dir: 3.3.2 1924 | find-up: 4.1.0 1925 | foreground-child: 2.0.0 1926 | get-package-type: 0.1.0 1927 | glob: 7.2.3 1928 | istanbul-lib-coverage: 3.2.0 1929 | istanbul-lib-hook: 3.0.0 1930 | istanbul-lib-instrument: 4.0.3 1931 | istanbul-lib-processinfo: 2.0.3 1932 | istanbul-lib-report: 3.0.0 1933 | istanbul-lib-source-maps: 4.0.1 1934 | istanbul-reports: 3.1.5 1935 | make-dir: 3.1.0 1936 | node-preload: 0.2.1 1937 | p-map: 3.0.0 1938 | process-on-spawn: 1.0.0 1939 | resolve-from: 5.0.0 1940 | rimraf: 3.0.2 1941 | signal-exit: 3.0.7 1942 | spawn-wrap: 2.0.0 1943 | test-exclude: 6.0.0 1944 | yargs: 15.4.1 1945 | transitivePeerDependencies: 1946 | - supports-color 1947 | dev: true 1948 | 1949 | /object-inspect@1.12.3: 1950 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 1951 | dev: false 1952 | 1953 | /object-keys@1.1.1: 1954 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1955 | engines: {node: '>= 0.4'} 1956 | dev: false 1957 | 1958 | /object.assign@4.1.4: 1959 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} 1960 | engines: {node: '>= 0.4'} 1961 | dependencies: 1962 | call-bind: 1.0.2 1963 | define-properties: 1.2.0 1964 | has-symbols: 1.0.3 1965 | object-keys: 1.1.1 1966 | dev: false 1967 | 1968 | /object.getownpropertydescriptors@2.1.6: 1969 | resolution: {integrity: sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ==} 1970 | engines: {node: '>= 0.8'} 1971 | dependencies: 1972 | array.prototype.reduce: 1.0.5 1973 | call-bind: 1.0.2 1974 | define-properties: 1.2.0 1975 | es-abstract: 1.21.2 1976 | safe-array-concat: 1.0.0 1977 | dev: false 1978 | 1979 | /once@1.4.0: 1980 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1981 | dependencies: 1982 | wrappy: 1.0.2 1983 | 1984 | /onecolor@2.5.0: 1985 | resolution: {integrity: sha512-OdUvcyPnJ+o35vXb6RIY3fxJITm+EGcfFECanoOKnISTFG+Pl/I1n5TcbxH+KHC310+RopEG4Cccz+naDWAD2A==} 1986 | engines: {node: '>=0.4.8'} 1987 | dev: false 1988 | 1989 | /onetime@6.0.0: 1990 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 1991 | engines: {node: '>=12'} 1992 | dependencies: 1993 | mimic-fn: 4.0.0 1994 | dev: false 1995 | 1996 | /opener@1.5.2: 1997 | resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} 1998 | hasBin: true 1999 | dev: true 2000 | 2001 | /os-homedir@1.0.2: 2002 | resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} 2003 | engines: {node: '>=0.10.0'} 2004 | dev: false 2005 | 2006 | /os-tmpdir@1.0.2: 2007 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} 2008 | engines: {node: '>=0.10.0'} 2009 | dev: false 2010 | 2011 | /own-or-env@1.0.2: 2012 | resolution: {integrity: sha512-NQ7v0fliWtK7Lkb+WdFqe6ky9XAzYmlkXthQrBbzlYbmFKoAYbDDcwmOm6q8kOuwSRXW8bdL5ORksploUJmWgw==} 2013 | dependencies: 2014 | own-or: 1.0.0 2015 | dev: true 2016 | 2017 | /own-or@1.0.0: 2018 | resolution: {integrity: sha512-NfZr5+Tdf6MB8UI9GLvKRs4cXY8/yB0w3xtt84xFdWy8hkGjn+JFc60VhzS/hFRfbyxFcGYMTjnF4Me+RbbqrA==} 2019 | dev: true 2020 | 2021 | /p-finally@1.0.0: 2022 | resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} 2023 | engines: {node: '>=4'} 2024 | dev: false 2025 | 2026 | /p-limit@2.3.0: 2027 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 2028 | engines: {node: '>=6'} 2029 | dependencies: 2030 | p-try: 2.2.0 2031 | dev: true 2032 | 2033 | /p-limit@4.0.0: 2034 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} 2035 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2036 | dependencies: 2037 | yocto-queue: 1.0.0 2038 | dev: false 2039 | 2040 | /p-locate@4.1.0: 2041 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 2042 | engines: {node: '>=8'} 2043 | dependencies: 2044 | p-limit: 2.3.0 2045 | dev: true 2046 | 2047 | /p-locate@6.0.0: 2048 | resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} 2049 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2050 | dependencies: 2051 | p-limit: 4.0.0 2052 | dev: false 2053 | 2054 | /p-map@3.0.0: 2055 | resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} 2056 | engines: {node: '>=8'} 2057 | dependencies: 2058 | aggregate-error: 3.1.0 2059 | dev: true 2060 | 2061 | /p-try@2.2.0: 2062 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 2063 | engines: {node: '>=6'} 2064 | dev: true 2065 | 2066 | /package-hash@4.0.0: 2067 | resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} 2068 | engines: {node: '>=8'} 2069 | dependencies: 2070 | graceful-fs: 4.2.11 2071 | hasha: 5.2.2 2072 | lodash.flattendeep: 4.4.0 2073 | release-zalgo: 1.0.0 2074 | dev: true 2075 | 2076 | /pako@1.0.11: 2077 | resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} 2078 | dev: false 2079 | 2080 | /parse-cache-control@1.0.1: 2081 | resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==} 2082 | dev: false 2083 | 2084 | /parse-json@5.2.0: 2085 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 2086 | engines: {node: '>=8'} 2087 | dependencies: 2088 | '@babel/code-frame': 7.21.4 2089 | error-ex: 1.3.2 2090 | json-parse-even-better-errors: 2.3.1 2091 | lines-and-columns: 1.2.4 2092 | dev: false 2093 | 2094 | /path-exists@4.0.0: 2095 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2096 | engines: {node: '>=8'} 2097 | dev: true 2098 | 2099 | /path-exists@5.0.0: 2100 | resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} 2101 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2102 | dev: false 2103 | 2104 | /path-is-absolute@1.0.1: 2105 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2106 | engines: {node: '>=0.10.0'} 2107 | 2108 | /path-key@2.0.1: 2109 | resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} 2110 | engines: {node: '>=4'} 2111 | dev: false 2112 | 2113 | /path-key@3.1.1: 2114 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2115 | engines: {node: '>=8'} 2116 | 2117 | /path-key@4.0.0: 2118 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 2119 | engines: {node: '>=12'} 2120 | dev: false 2121 | 2122 | /path-parse@1.0.7: 2123 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2124 | dev: false 2125 | 2126 | /picocolors@1.0.0: 2127 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2128 | dev: true 2129 | 2130 | /picomatch@2.3.1: 2131 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2132 | engines: {node: '>=8.6'} 2133 | dev: true 2134 | 2135 | /pkg-dir@4.2.0: 2136 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 2137 | engines: {node: '>=8'} 2138 | dependencies: 2139 | find-up: 4.1.0 2140 | dev: true 2141 | 2142 | /prettier@2.8.8: 2143 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 2144 | engines: {node: '>=10.13.0'} 2145 | hasBin: true 2146 | dev: true 2147 | 2148 | /process-nextick-args@2.0.1: 2149 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 2150 | dev: false 2151 | 2152 | /process-on-spawn@1.0.0: 2153 | resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==} 2154 | engines: {node: '>=8'} 2155 | dependencies: 2156 | fromentries: 1.3.2 2157 | dev: true 2158 | 2159 | /promise@8.3.0: 2160 | resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} 2161 | dependencies: 2162 | asap: 2.0.6 2163 | dev: false 2164 | 2165 | /prompt@1.3.0: 2166 | resolution: {integrity: sha512-ZkaRWtaLBZl7KKAKndKYUL8WqNT+cQHKRZnT4RYYms48jQkFw3rrBL+/N5K/KtdEveHkxs982MX2BkDKub2ZMg==} 2167 | engines: {node: '>= 6.0.0'} 2168 | dependencies: 2169 | '@colors/colors': 1.5.0 2170 | async: 3.2.3 2171 | read: 1.0.7 2172 | revalidator: 0.1.8 2173 | winston: 2.4.7 2174 | dev: false 2175 | 2176 | /pseudomap@1.0.2: 2177 | resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} 2178 | dev: false 2179 | 2180 | /punycode@2.3.0: 2181 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 2182 | engines: {node: '>=6'} 2183 | dev: true 2184 | 2185 | /q@1.5.1: 2186 | resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} 2187 | engines: {node: '>=0.6.0', teleport: '>=0.2.0'} 2188 | dev: false 2189 | 2190 | /qs@6.11.1: 2191 | resolution: {integrity: sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==} 2192 | engines: {node: '>=0.6'} 2193 | dependencies: 2194 | side-channel: 1.0.4 2195 | dev: false 2196 | 2197 | /quick-lru@6.1.1: 2198 | resolution: {integrity: sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q==} 2199 | engines: {node: '>=12'} 2200 | dev: false 2201 | 2202 | /read-pkg-up@9.1.0: 2203 | resolution: {integrity: sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==} 2204 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2205 | dependencies: 2206 | find-up: 6.3.0 2207 | read-pkg: 7.1.0 2208 | type-fest: 2.19.0 2209 | dev: false 2210 | 2211 | /read-pkg@7.1.0: 2212 | resolution: {integrity: sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==} 2213 | engines: {node: '>=12.20'} 2214 | dependencies: 2215 | '@types/normalize-package-data': 2.4.1 2216 | normalize-package-data: 3.0.3 2217 | parse-json: 5.2.0 2218 | type-fest: 2.19.0 2219 | dev: false 2220 | 2221 | /read@1.0.7: 2222 | resolution: {integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==} 2223 | engines: {node: '>=0.8'} 2224 | dependencies: 2225 | mute-stream: 0.0.8 2226 | dev: false 2227 | 2228 | /readable-stream@2.3.8: 2229 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} 2230 | dependencies: 2231 | core-util-is: 1.0.3 2232 | inherits: 2.0.4 2233 | isarray: 1.0.0 2234 | process-nextick-args: 2.0.1 2235 | safe-buffer: 5.1.2 2236 | string_decoder: 1.1.1 2237 | util-deprecate: 1.0.2 2238 | dev: false 2239 | 2240 | /readdirp@3.6.0: 2241 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2242 | engines: {node: '>=8.10.0'} 2243 | dependencies: 2244 | picomatch: 2.3.1 2245 | dev: true 2246 | 2247 | /rechoir@0.6.2: 2248 | resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} 2249 | engines: {node: '>= 0.10'} 2250 | dependencies: 2251 | resolve: 1.22.2 2252 | dev: false 2253 | 2254 | /redent@4.0.0: 2255 | resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} 2256 | engines: {node: '>=12'} 2257 | dependencies: 2258 | indent-string: 5.0.0 2259 | strip-indent: 4.0.0 2260 | dev: false 2261 | 2262 | /regexp.prototype.flags@1.5.0: 2263 | resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} 2264 | engines: {node: '>= 0.4'} 2265 | dependencies: 2266 | call-bind: 1.0.2 2267 | define-properties: 1.2.0 2268 | functions-have-names: 1.2.3 2269 | dev: false 2270 | 2271 | /release-zalgo@1.0.0: 2272 | resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==} 2273 | engines: {node: '>=4'} 2274 | dependencies: 2275 | es6-error: 4.1.1 2276 | dev: true 2277 | 2278 | /remove-trailing-separator@1.1.0: 2279 | resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} 2280 | dev: false 2281 | 2282 | /require-directory@2.1.1: 2283 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 2284 | engines: {node: '>=0.10.0'} 2285 | dev: true 2286 | 2287 | /require-main-filename@2.0.0: 2288 | resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} 2289 | dev: true 2290 | 2291 | /resolve-from@5.0.0: 2292 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 2293 | engines: {node: '>=8'} 2294 | dev: true 2295 | 2296 | /resolve@1.22.2: 2297 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} 2298 | hasBin: true 2299 | dependencies: 2300 | is-core-module: 2.12.0 2301 | path-parse: 1.0.7 2302 | supports-preserve-symlinks-flag: 1.0.0 2303 | dev: false 2304 | 2305 | /revalidator@0.1.8: 2306 | resolution: {integrity: sha512-xcBILK2pA9oh4SiinPEZfhP8HfrB/ha+a2fTMyl7Om2WjlDVrOQy99N2MXXlUHqGJz4qEu2duXxHJjDWuK/0xg==} 2307 | engines: {node: '>= 0.4.0'} 2308 | dev: false 2309 | 2310 | /rimraf@3.0.2: 2311 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2312 | hasBin: true 2313 | dependencies: 2314 | glob: 7.2.3 2315 | dev: true 2316 | 2317 | /safe-array-concat@1.0.0: 2318 | resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} 2319 | engines: {node: '>=0.4'} 2320 | dependencies: 2321 | call-bind: 1.0.2 2322 | get-intrinsic: 1.2.0 2323 | has-symbols: 1.0.3 2324 | isarray: 2.0.5 2325 | dev: false 2326 | 2327 | /safe-buffer@5.1.2: 2328 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 2329 | dev: false 2330 | 2331 | /safe-regex-test@1.0.0: 2332 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} 2333 | dependencies: 2334 | call-bind: 1.0.2 2335 | get-intrinsic: 1.2.0 2336 | is-regex: 1.1.4 2337 | dev: false 2338 | 2339 | /sax@1.2.4: 2340 | resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} 2341 | dev: false 2342 | 2343 | /semver@5.7.1: 2344 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} 2345 | hasBin: true 2346 | dev: false 2347 | 2348 | /semver@6.3.0: 2349 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 2350 | hasBin: true 2351 | dev: true 2352 | 2353 | /semver@7.5.0: 2354 | resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} 2355 | engines: {node: '>=10'} 2356 | hasBin: true 2357 | dependencies: 2358 | lru-cache: 6.0.0 2359 | dev: false 2360 | 2361 | /set-blocking@2.0.0: 2362 | resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} 2363 | dev: true 2364 | 2365 | /setimmediate@1.0.5: 2366 | resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} 2367 | dev: false 2368 | 2369 | /shebang-command@1.2.0: 2370 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} 2371 | engines: {node: '>=0.10.0'} 2372 | dependencies: 2373 | shebang-regex: 1.0.0 2374 | dev: false 2375 | 2376 | /shebang-command@2.0.0: 2377 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2378 | engines: {node: '>=8'} 2379 | dependencies: 2380 | shebang-regex: 3.0.0 2381 | 2382 | /shebang-regex@1.0.0: 2383 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} 2384 | engines: {node: '>=0.10.0'} 2385 | dev: false 2386 | 2387 | /shebang-regex@3.0.0: 2388 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2389 | engines: {node: '>=8'} 2390 | 2391 | /shelljs@0.8.5: 2392 | resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} 2393 | engines: {node: '>=4'} 2394 | hasBin: true 2395 | dependencies: 2396 | glob: 7.2.3 2397 | interpret: 1.4.0 2398 | rechoir: 0.6.2 2399 | dev: false 2400 | 2401 | /side-channel@1.0.4: 2402 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 2403 | dependencies: 2404 | call-bind: 1.0.2 2405 | get-intrinsic: 1.2.0 2406 | object-inspect: 1.12.3 2407 | dev: false 2408 | 2409 | /signal-exit@3.0.7: 2410 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2411 | 2412 | /source-map-support@0.5.21: 2413 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 2414 | dependencies: 2415 | buffer-from: 1.1.2 2416 | source-map: 0.6.1 2417 | dev: true 2418 | 2419 | /source-map@0.6.1: 2420 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2421 | engines: {node: '>=0.10.0'} 2422 | dev: true 2423 | 2424 | /spawn-wrap@2.0.0: 2425 | resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} 2426 | engines: {node: '>=8'} 2427 | dependencies: 2428 | foreground-child: 2.0.0 2429 | is-windows: 1.0.2 2430 | make-dir: 3.1.0 2431 | rimraf: 3.0.2 2432 | signal-exit: 3.0.7 2433 | which: 2.0.2 2434 | dev: true 2435 | 2436 | /spdx-correct@3.2.0: 2437 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 2438 | dependencies: 2439 | spdx-expression-parse: 3.0.1 2440 | spdx-license-ids: 3.0.13 2441 | dev: false 2442 | 2443 | /spdx-exceptions@2.3.0: 2444 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} 2445 | dev: false 2446 | 2447 | /spdx-expression-parse@3.0.1: 2448 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 2449 | dependencies: 2450 | spdx-exceptions: 2.3.0 2451 | spdx-license-ids: 3.0.13 2452 | dev: false 2453 | 2454 | /spdx-license-ids@3.0.13: 2455 | resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} 2456 | dev: false 2457 | 2458 | /sprintf-js@1.0.3: 2459 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 2460 | dev: true 2461 | 2462 | /stack-trace@0.0.10: 2463 | resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} 2464 | dev: false 2465 | 2466 | /stack-utils@2.0.6: 2467 | resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} 2468 | engines: {node: '>=10'} 2469 | dependencies: 2470 | escape-string-regexp: 2.0.0 2471 | dev: true 2472 | 2473 | /streamsearch@1.1.0: 2474 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 2475 | engines: {node: '>=10.0.0'} 2476 | dev: false 2477 | 2478 | /string-width@4.2.3: 2479 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2480 | engines: {node: '>=8'} 2481 | dependencies: 2482 | emoji-regex: 8.0.0 2483 | is-fullwidth-code-point: 3.0.0 2484 | strip-ansi: 6.0.1 2485 | dev: true 2486 | 2487 | /string.prototype.trim@1.2.7: 2488 | resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} 2489 | engines: {node: '>= 0.4'} 2490 | dependencies: 2491 | call-bind: 1.0.2 2492 | define-properties: 1.2.0 2493 | es-abstract: 1.21.2 2494 | dev: false 2495 | 2496 | /string.prototype.trimend@1.0.6: 2497 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} 2498 | dependencies: 2499 | call-bind: 1.0.2 2500 | define-properties: 1.2.0 2501 | es-abstract: 1.21.2 2502 | dev: false 2503 | 2504 | /string.prototype.trimstart@1.0.6: 2505 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} 2506 | dependencies: 2507 | call-bind: 1.0.2 2508 | define-properties: 1.2.0 2509 | es-abstract: 1.21.2 2510 | dev: false 2511 | 2512 | /string_decoder@1.1.1: 2513 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 2514 | dependencies: 2515 | safe-buffer: 5.1.2 2516 | dev: false 2517 | 2518 | /strip-ansi@6.0.1: 2519 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2520 | engines: {node: '>=8'} 2521 | dependencies: 2522 | ansi-regex: 5.0.1 2523 | dev: true 2524 | 2525 | /strip-bom@4.0.0: 2526 | resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} 2527 | engines: {node: '>=8'} 2528 | dev: true 2529 | 2530 | /strip-eof@1.0.0: 2531 | resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} 2532 | engines: {node: '>=0.10.0'} 2533 | dev: false 2534 | 2535 | /strip-final-newline@3.0.0: 2536 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 2537 | engines: {node: '>=12'} 2538 | dev: false 2539 | 2540 | /strip-indent@4.0.0: 2541 | resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} 2542 | engines: {node: '>=12'} 2543 | dependencies: 2544 | min-indent: 1.0.1 2545 | dev: false 2546 | 2547 | /supports-color@5.5.0: 2548 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2549 | engines: {node: '>=4'} 2550 | dependencies: 2551 | has-flag: 3.0.0 2552 | 2553 | /supports-color@7.2.0: 2554 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2555 | engines: {node: '>=8'} 2556 | dependencies: 2557 | has-flag: 4.0.0 2558 | dev: true 2559 | 2560 | /supports-preserve-symlinks-flag@1.0.0: 2561 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2562 | engines: {node: '>= 0.4'} 2563 | dev: false 2564 | 2565 | /sync-request@6.1.0: 2566 | resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==} 2567 | engines: {node: '>=8.0.0'} 2568 | dependencies: 2569 | http-response-object: 3.0.2 2570 | sync-rpc: 1.3.6 2571 | then-request: 6.0.2 2572 | dev: false 2573 | 2574 | /sync-rpc@1.3.6: 2575 | resolution: {integrity: sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==} 2576 | dependencies: 2577 | get-port: 3.2.0 2578 | dev: false 2579 | 2580 | /tap-mocha-reporter@5.0.3: 2581 | resolution: {integrity: sha512-6zlGkaV4J+XMRFkN0X+yuw6xHbE9jyCZ3WUKfw4KxMyRGOpYSRuuQTRJyWX88WWuLdVTuFbxzwXhXuS2XE6o0g==} 2582 | engines: {node: '>= 8'} 2583 | hasBin: true 2584 | dependencies: 2585 | color-support: 1.1.3 2586 | debug: 4.3.4 2587 | diff: 4.0.2 2588 | escape-string-regexp: 2.0.0 2589 | glob: 7.2.3 2590 | tap-parser: 11.0.2 2591 | tap-yaml: 1.0.2 2592 | unicode-length: 2.1.0 2593 | transitivePeerDependencies: 2594 | - supports-color 2595 | dev: true 2596 | 2597 | /tap-parser@11.0.2: 2598 | resolution: {integrity: sha512-6qGlC956rcORw+fg7Fv1iCRAY8/bU9UabUAhs3mXRH6eRmVZcNPLheSXCYaVaYeSwx5xa/1HXZb1537YSvwDZg==} 2599 | engines: {node: '>= 8'} 2600 | hasBin: true 2601 | dependencies: 2602 | events-to-array: 1.1.2 2603 | minipass: 3.3.6 2604 | tap-yaml: 1.0.2 2605 | dev: true 2606 | 2607 | /tap-yaml@1.0.2: 2608 | resolution: {integrity: sha512-GegASpuqBnRNdT1U+yuUPZ8rEU64pL35WPBpCISWwff4dErS2/438barz7WFJl4Nzh3Y05tfPidZnH+GaV1wMg==} 2609 | dependencies: 2610 | yaml: 1.10.2 2611 | dev: true 2612 | 2613 | /tap@16.3.4(typescript@5.0.4): 2614 | resolution: {integrity: sha512-SAexdt2ZF4XBgye6TPucFI2y7VE0qeFXlXucJIV1XDPCs+iJodk0MYacr1zR6Ycltzz7PYg8zrblDXKbAZM2LQ==} 2615 | engines: {node: '>=12'} 2616 | hasBin: true 2617 | peerDependencies: 2618 | coveralls: ^3.1.1 2619 | flow-remove-types: '>=2.112.0' 2620 | ts-node: '>=8.5.2' 2621 | typescript: '>=3.7.2' 2622 | peerDependenciesMeta: 2623 | coveralls: 2624 | optional: true 2625 | flow-remove-types: 2626 | optional: true 2627 | ts-node: 2628 | optional: true 2629 | typescript: 2630 | optional: true 2631 | dependencies: 2632 | chokidar: 3.5.3 2633 | findit: 2.0.0 2634 | foreground-child: 2.0.0 2635 | fs-exists-cached: 1.0.0 2636 | glob: 7.2.3 2637 | isexe: 2.0.0 2638 | istanbul-lib-processinfo: 2.0.3 2639 | jackspeak: 1.4.2 2640 | libtap: 1.4.0 2641 | minipass: 3.3.6 2642 | mkdirp: 1.0.4 2643 | nyc: 15.1.0 2644 | opener: 1.5.2 2645 | rimraf: 3.0.2 2646 | signal-exit: 3.0.7 2647 | source-map-support: 0.5.21 2648 | tap-mocha-reporter: 5.0.3 2649 | tap-parser: 11.0.2 2650 | tap-yaml: 1.0.2 2651 | tcompare: 5.0.7 2652 | typescript: 5.0.4 2653 | which: 2.0.2 2654 | transitivePeerDependencies: 2655 | - supports-color 2656 | dev: true 2657 | bundledDependencies: 2658 | - ink 2659 | - treport 2660 | - '@types/react' 2661 | - '@isaacs/import-jsx' 2662 | - react 2663 | 2664 | /tar-stream@1.6.2: 2665 | resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} 2666 | engines: {node: '>= 0.8.0'} 2667 | dependencies: 2668 | bl: 1.2.3 2669 | buffer-alloc: 1.2.0 2670 | end-of-stream: 1.4.4 2671 | fs-constants: 1.0.0 2672 | readable-stream: 2.3.8 2673 | to-buffer: 1.1.1 2674 | xtend: 4.0.2 2675 | dev: false 2676 | 2677 | /tcompare@5.0.7: 2678 | resolution: {integrity: sha512-d9iddt6YYGgyxJw5bjsN7UJUO1kGOtjSlNy/4PoGYAjQS5pAT/hzIoLf1bZCw+uUxRmZJh7Yy1aA7xKVRT9B4w==} 2679 | engines: {node: '>=10'} 2680 | dependencies: 2681 | diff: 4.0.2 2682 | dev: true 2683 | 2684 | /test-exclude@6.0.0: 2685 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} 2686 | engines: {node: '>=8'} 2687 | dependencies: 2688 | '@istanbuljs/schema': 0.1.3 2689 | glob: 7.2.3 2690 | minimatch: 3.1.2 2691 | dev: true 2692 | 2693 | /tfx-cli@0.14.0: 2694 | resolution: {integrity: sha512-LTtp5JMVrsAvtnbvtRIqkEFG6WqO1qThNNM+3/CAlIKwxhBaenl+D/YL9pNojX83pgTA2Fe/FyZJ0A6jAiu5rA==} 2695 | engines: {node: '>=8.0.0'} 2696 | hasBin: true 2697 | dependencies: 2698 | app-root-path: 1.0.0 2699 | archiver: 2.0.3 2700 | azure-devops-node-api: 10.2.2 2701 | clipboardy: 1.2.3 2702 | colors: 1.3.3 2703 | glob: 7.1.2 2704 | jju: 1.4.0 2705 | json-in-place: 1.0.1 2706 | jszip: 3.10.1 2707 | lodash: 4.17.21 2708 | minimist: 1.2.8 2709 | mkdirp: 1.0.4 2710 | onecolor: 2.5.0 2711 | os-homedir: 1.0.2 2712 | prompt: 1.3.0 2713 | read: 1.0.7 2714 | shelljs: 0.8.5 2715 | tmp: 0.0.26 2716 | tracer: 0.7.4 2717 | util.promisify: 1.1.2 2718 | uuid: 3.4.0 2719 | validator: 13.9.0 2720 | winreg: 0.0.12 2721 | xml2js: 0.4.23 2722 | dev: false 2723 | 2724 | /then-request@6.0.2: 2725 | resolution: {integrity: sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==} 2726 | engines: {node: '>=6.0.0'} 2727 | dependencies: 2728 | '@types/concat-stream': 1.6.1 2729 | '@types/form-data': 0.0.33 2730 | '@types/node': 8.10.66 2731 | '@types/qs': 6.9.7 2732 | caseless: 0.12.0 2733 | concat-stream: 1.6.2 2734 | form-data: 2.5.1 2735 | http-basic: 8.1.3 2736 | http-response-object: 3.0.2 2737 | promise: 8.3.0 2738 | qs: 6.11.1 2739 | dev: false 2740 | 2741 | /tinytim@0.1.1: 2742 | resolution: {integrity: sha512-NIpsp9lBIxPNzB++HnMmUd4byzJSVbbO4F+As1Gb1IG/YQT5QvmBDjpx8SpDS8fhGC+t+Qw8ldQgbcAIaU+2cA==} 2743 | engines: {node: '>= 0.2.0'} 2744 | dev: false 2745 | 2746 | /tmp@0.0.26: 2747 | resolution: {integrity: sha512-XYEM7aFncfdEdU4/3jUG2edvFAryxtKbahJXTv8WK34MoOmexbbyNyneT3nY8yPVD3h0J1b5fL6kqlDoyuebQQ==} 2748 | engines: {node: '>=0.4.0'} 2749 | dependencies: 2750 | os-tmpdir: 1.0.2 2751 | dev: false 2752 | 2753 | /to-buffer@1.1.1: 2754 | resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} 2755 | dev: false 2756 | 2757 | /to-fast-properties@2.0.0: 2758 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 2759 | engines: {node: '>=4'} 2760 | dev: true 2761 | 2762 | /to-regex-range@5.0.1: 2763 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2764 | engines: {node: '>=8.0'} 2765 | dependencies: 2766 | is-number: 7.0.0 2767 | dev: true 2768 | 2769 | /tracer@0.7.4: 2770 | resolution: {integrity: sha512-yG3Yb4ztlE1CZHNRWcBqjRIVSCXd8fx7HvL9gvlC37tpPrG3I5skNAY3mQApWeQiw0/3m83JWbfagwOAlmP/ww==} 2771 | engines: {node: '>= 0.10.0'} 2772 | dependencies: 2773 | colors: 1.0.3 2774 | dateformat: 1.0.11 2775 | tinytim: 0.1.1 2776 | dev: false 2777 | 2778 | /trim-newlines@4.1.1: 2779 | resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} 2780 | engines: {node: '>=12'} 2781 | dev: false 2782 | 2783 | /trivial-deferred@1.1.2: 2784 | resolution: {integrity: sha512-vDPiDBC3hyP6O4JrJYMImW3nl3c03Tsj9fEXc7Qc/XKa1O7gf5ZtFfIR/E0dun9SnDHdwjna1Z2rSzYgqpxh/g==} 2785 | engines: {node: '>= 8'} 2786 | dev: true 2787 | 2788 | /tunnel@0.0.6: 2789 | resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} 2790 | engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} 2791 | dev: false 2792 | 2793 | /type-fest@0.8.1: 2794 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 2795 | engines: {node: '>=8'} 2796 | dev: true 2797 | 2798 | /type-fest@2.19.0: 2799 | resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} 2800 | engines: {node: '>=12.20'} 2801 | dev: false 2802 | 2803 | /type-fest@3.9.0: 2804 | resolution: {integrity: sha512-hR8JP2e8UiH7SME5JZjsobBlEiatFoxpzCP+R3ZeCo7kAaG1jXQE5X/buLzogM6GJu8le9Y4OcfNuIQX0rZskA==} 2805 | engines: {node: '>=14.16'} 2806 | dev: false 2807 | 2808 | /typed-array-length@1.0.4: 2809 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 2810 | dependencies: 2811 | call-bind: 1.0.2 2812 | for-each: 0.3.3 2813 | is-typed-array: 1.1.10 2814 | dev: false 2815 | 2816 | /typed-rest-client@1.8.9: 2817 | resolution: {integrity: sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==} 2818 | dependencies: 2819 | qs: 6.11.1 2820 | tunnel: 0.0.6 2821 | underscore: 1.13.6 2822 | dev: false 2823 | 2824 | /typedarray-to-buffer@3.1.5: 2825 | resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} 2826 | dependencies: 2827 | is-typedarray: 1.0.0 2828 | dev: true 2829 | 2830 | /typedarray@0.0.6: 2831 | resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} 2832 | dev: false 2833 | 2834 | /typescript@5.0.4: 2835 | resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} 2836 | engines: {node: '>=12.20'} 2837 | hasBin: true 2838 | dev: true 2839 | 2840 | /unbox-primitive@1.0.2: 2841 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 2842 | dependencies: 2843 | call-bind: 1.0.2 2844 | has-bigints: 1.0.2 2845 | has-symbols: 1.0.3 2846 | which-boxed-primitive: 1.0.2 2847 | dev: false 2848 | 2849 | /underscore@1.13.6: 2850 | resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} 2851 | dev: false 2852 | 2853 | /undici@5.22.1: 2854 | resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} 2855 | engines: {node: '>=14.0'} 2856 | dependencies: 2857 | busboy: 1.6.0 2858 | dev: false 2859 | 2860 | /unicode-length@2.1.0: 2861 | resolution: {integrity: sha512-4bV582zTV9Q02RXBxSUMiuN/KHo5w4aTojuKTNT96DIKps/SIawFp7cS5Mu25VuY1AioGXrmYyzKZUzh8OqoUw==} 2862 | dependencies: 2863 | punycode: 2.3.0 2864 | dev: true 2865 | 2866 | /update-browserslist-db@1.0.11(browserslist@4.21.5): 2867 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} 2868 | hasBin: true 2869 | peerDependencies: 2870 | browserslist: '>= 4.21.0' 2871 | dependencies: 2872 | browserslist: 4.21.5 2873 | escalade: 3.1.1 2874 | picocolors: 1.0.0 2875 | dev: true 2876 | 2877 | /util-deprecate@1.0.2: 2878 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2879 | dev: false 2880 | 2881 | /util.promisify@1.1.2: 2882 | resolution: {integrity: sha512-PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA==} 2883 | dependencies: 2884 | call-bind: 1.0.2 2885 | define-properties: 1.2.0 2886 | for-each: 0.3.3 2887 | has-proto: 1.0.1 2888 | has-symbols: 1.0.3 2889 | object.getownpropertydescriptors: 2.1.6 2890 | safe-array-concat: 1.0.0 2891 | dev: false 2892 | 2893 | /uuid@3.4.0: 2894 | resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} 2895 | deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. 2896 | hasBin: true 2897 | dev: false 2898 | 2899 | /uuid@8.3.2: 2900 | resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} 2901 | hasBin: true 2902 | dev: true 2903 | 2904 | /validate-npm-package-license@3.0.4: 2905 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 2906 | dependencies: 2907 | spdx-correct: 3.2.0 2908 | spdx-expression-parse: 3.0.1 2909 | dev: false 2910 | 2911 | /validator@13.9.0: 2912 | resolution: {integrity: sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==} 2913 | engines: {node: '>= 0.10'} 2914 | dev: false 2915 | 2916 | /walkdir@0.0.11: 2917 | resolution: {integrity: sha512-lMFYXGpf7eg+RInVL021ZbJJT4hqsvsBvq5sZBp874jfhs3IWlA7OPoG0ojQrYcXHuUSi+Nqp6qGN+pPGaMgPQ==} 2918 | engines: {node: '>=0.6.0'} 2919 | dev: false 2920 | 2921 | /which-boxed-primitive@1.0.2: 2922 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 2923 | dependencies: 2924 | is-bigint: 1.0.4 2925 | is-boolean-object: 1.1.2 2926 | is-number-object: 1.0.7 2927 | is-string: 1.0.7 2928 | is-symbol: 1.0.4 2929 | dev: false 2930 | 2931 | /which-module@2.0.1: 2932 | resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} 2933 | dev: true 2934 | 2935 | /which-typed-array@1.1.9: 2936 | resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} 2937 | engines: {node: '>= 0.4'} 2938 | dependencies: 2939 | available-typed-arrays: 1.0.5 2940 | call-bind: 1.0.2 2941 | for-each: 0.3.3 2942 | gopd: 1.0.1 2943 | has-tostringtag: 1.0.0 2944 | is-typed-array: 1.1.10 2945 | dev: false 2946 | 2947 | /which@1.3.1: 2948 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 2949 | hasBin: true 2950 | dependencies: 2951 | isexe: 2.0.0 2952 | dev: false 2953 | 2954 | /which@2.0.2: 2955 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2956 | engines: {node: '>= 8'} 2957 | hasBin: true 2958 | dependencies: 2959 | isexe: 2.0.0 2960 | 2961 | /winreg@0.0.12: 2962 | resolution: {integrity: sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==} 2963 | dev: false 2964 | 2965 | /winston@2.4.7: 2966 | resolution: {integrity: sha512-vLB4BqzCKDnnZH9PHGoS2ycawueX4HLqENXQitvFHczhgW2vFpSOn31LZtVr1KU8YTw7DS4tM+cqyovxo8taVg==} 2967 | engines: {node: '>= 0.10.0'} 2968 | dependencies: 2969 | async: 2.6.4 2970 | colors: 1.0.3 2971 | cycle: 1.0.3 2972 | eyes: 0.1.8 2973 | isstream: 0.1.2 2974 | stack-trace: 0.0.10 2975 | dev: false 2976 | 2977 | /wrap-ansi@6.2.0: 2978 | resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 2979 | engines: {node: '>=8'} 2980 | dependencies: 2981 | ansi-styles: 4.3.0 2982 | string-width: 4.2.3 2983 | strip-ansi: 6.0.1 2984 | dev: true 2985 | 2986 | /wrap-ansi@7.0.0: 2987 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2988 | engines: {node: '>=10'} 2989 | dependencies: 2990 | ansi-styles: 4.3.0 2991 | string-width: 4.2.3 2992 | strip-ansi: 6.0.1 2993 | dev: true 2994 | 2995 | /wrappy@1.0.2: 2996 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2997 | 2998 | /write-file-atomic@3.0.3: 2999 | resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} 3000 | dependencies: 3001 | imurmurhash: 0.1.4 3002 | is-typedarray: 1.0.0 3003 | signal-exit: 3.0.7 3004 | typedarray-to-buffer: 3.1.5 3005 | dev: true 3006 | 3007 | /xml2js@0.4.23: 3008 | resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} 3009 | engines: {node: '>=4.0.0'} 3010 | dependencies: 3011 | sax: 1.2.4 3012 | xmlbuilder: 11.0.1 3013 | dev: false 3014 | 3015 | /xmlbuilder@11.0.1: 3016 | resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} 3017 | engines: {node: '>=4.0'} 3018 | dev: false 3019 | 3020 | /xtend@4.0.2: 3021 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} 3022 | engines: {node: '>=0.4'} 3023 | dev: false 3024 | 3025 | /y18n@4.0.3: 3026 | resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} 3027 | dev: true 3028 | 3029 | /yallist@2.1.2: 3030 | resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} 3031 | dev: false 3032 | 3033 | /yallist@3.1.1: 3034 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 3035 | dev: true 3036 | 3037 | /yallist@4.0.0: 3038 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 3039 | 3040 | /yaml@1.10.2: 3041 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 3042 | engines: {node: '>= 6'} 3043 | dev: true 3044 | 3045 | /yargs-parser@18.1.3: 3046 | resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} 3047 | engines: {node: '>=6'} 3048 | dependencies: 3049 | camelcase: 5.3.1 3050 | decamelize: 1.2.0 3051 | dev: true 3052 | 3053 | /yargs-parser@21.1.1: 3054 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 3055 | engines: {node: '>=12'} 3056 | dev: false 3057 | 3058 | /yargs@15.4.1: 3059 | resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} 3060 | engines: {node: '>=8'} 3061 | dependencies: 3062 | cliui: 6.0.0 3063 | decamelize: 1.2.0 3064 | find-up: 4.1.0 3065 | get-caller-file: 2.0.5 3066 | require-directory: 2.1.1 3067 | require-main-filename: 2.0.0 3068 | set-blocking: 2.0.0 3069 | string-width: 4.2.3 3070 | which-module: 2.0.1 3071 | y18n: 4.0.3 3072 | yargs-parser: 18.1.3 3073 | dev: true 3074 | 3075 | /yocto-queue@1.0.0: 3076 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 3077 | engines: {node: '>=12.20'} 3078 | dev: false 3079 | 3080 | /zip-stream@1.2.0: 3081 | resolution: {integrity: sha512-2olrDUuPM4NvRIgGPhvrp84f7/HmWR6RiQrgwFF2VctmnssFiogtYL3DcA8Vl2bsSmju79sVXe38TsII7JleUg==} 3082 | engines: {node: '>= 0.10.0'} 3083 | dependencies: 3084 | archiver-utils: 1.3.0 3085 | compress-commons: 1.2.2 3086 | lodash: 4.17.21 3087 | readable-stream: 2.3.8 3088 | dev: false 3089 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - "vercel-deployment-task-source" 3 | - "vercel-azdo-pr-comment-task-source" 4 | - "scripts" 5 | -------------------------------------------------------------------------------- /scripts/build-and-publish.js: -------------------------------------------------------------------------------- 1 | import { join, dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { mkdir, rm, readFile, writeFile } from "fs/promises"; 4 | import { $ } from "execa"; 5 | 6 | const sources = ["vercel-deployment-task-source", "vercel-azdo-pr-comment-task-source"]; 7 | 8 | const __dirname = dirname(fileURLToPath(import.meta.url)); 9 | const root = join(__dirname, ".."); 10 | const $$ = $({ cwd: root }); 11 | 12 | /** 13 | * 14 | * @param {string} taskSourceDirname 15 | */ 16 | async function build (taskSourceDirname) { 17 | const taskDir = join(root, taskSourceDirname); 18 | await $$`pnpm -C ${taskDir} build`; 19 | 20 | const taskFilePath = join(taskDir, "task.json"); 21 | // removing for now - script will publish currently committed versions 22 | // const taskFileData = await readFile(taskFilePath); 23 | // const taskFileJSON = JSON.parse(taskFileData); 24 | // taskFileJSON.version.Patch = taskFileJSON.version.Patch + 1; 25 | // await writeFile(taskFilePath, JSON.stringify(taskFileJSON, undefined, 2)); 26 | 27 | const out = join(root, taskSourceDirname.replace('-source', '')); 28 | 29 | await rm(out, { recursive: true, force: true }); 30 | await mkdir(out); 31 | await $$`cp -r ${join(taskDir, "dist")} ${taskFilePath} ${join( 32 | taskDir, 33 | "package.json" 34 | )} ${out}`; 35 | 36 | await $$`npm -C ${out} install --production --package-lock=false`; 37 | 38 | return out; 39 | } 40 | 41 | const outputs = await Promise.all(sources.map(source => build(source))); 42 | 43 | const args = process.argv.slice(2); 44 | const publish = args[0] === "--publish"; 45 | 46 | const pat = process.env.AZURE_TOKEN; 47 | 48 | await $$`tfx extension ${ 49 | publish ? ["publish", "--token", pat, "--no-wait-validation"] : "create" 50 | } --manifest-globs vss-extension.json`; 51 | 52 | await Promise.all(outputs.map(output => rm(output, { recursive: true, force: true }))) -------------------------------------------------------------------------------- /scripts/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "scripts", 4 | "type": "module", 5 | "scripts": { 6 | "build": "node build-and-publish.js", 7 | "build-and-publish": "node build-and-publish.js --publish" 8 | }, 9 | "dependencies": { 10 | "execa": "7.1.1", 11 | "tfx-cli": "0.14.0" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /vercel-azdo-pr-comment-task-source/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | test-out 4 | .taskkey 5 | -------------------------------------------------------------------------------- /vercel-azdo-pr-comment-task-source/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "vercel-azdo-pr-comment-task", 4 | "scripts": { 5 | "build": "tsc --project ./tsconfig.json" 6 | }, 7 | "license": "MIT", 8 | "engines": { 9 | "node": "^16.0.0" 10 | }, 11 | "dependencies": { 12 | "azure-devops-node-api": "12.0.0", 13 | "azure-pipelines-task-lib": "4.3.1" 14 | }, 15 | "devDependencies": { 16 | "@types/node": "16.18.24", 17 | "typescript": "5.0.4" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /vercel-azdo-pr-comment-task-source/src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | getInput, 3 | TaskResult, 4 | setResult, 5 | setResourcePath, 6 | getVariable, 7 | } from "azure-pipelines-task-lib"; 8 | import path from "path"; 9 | import { getPersonalAccessTokenHandler, WebApi } from "azure-devops-node-api"; 10 | import { 11 | CommentThreadStatus, 12 | CommentType, 13 | } from "azure-devops-node-api/interfaces/GitInterfaces"; 14 | 15 | function errorHandler(error: unknown) { 16 | setResult(TaskResult.Failed, `Unknown error thrown: ${error}`); 17 | } 18 | 19 | process.on("unhandledRejection", errorHandler); 20 | process.on("unhandledException", errorHandler); 21 | 22 | async function run() { 23 | try { 24 | setResourcePath(path.join(__dirname, "..", "task.json")); 25 | 26 | const message = getInput("deploymentTaskMessage", true)!; 27 | 28 | const buildReason = getVariable("Build.Reason"); 29 | if (buildReason === "PullRequest") { 30 | const token = getInput("azureToken", true)!; 31 | 32 | const organizationURI = getVariable("System.CollectionUri")!; 33 | const repositoryId = getVariable("Build.Repository.ID")!; 34 | const pullRequestId = getVariable("System.PullRequest.PullRequestId")!; 35 | const project = getVariable("System.TeamProject")!; 36 | 37 | const authHandler = getPersonalAccessTokenHandler(token); 38 | const connection = new WebApi(organizationURI, authHandler); 39 | const gitClient = await connection.getGitApi(); 40 | 41 | gitClient.createThread( 42 | { 43 | comments: [ 44 | { 45 | content: message, 46 | commentType: CommentType.System, 47 | }, 48 | ], 49 | status: CommentThreadStatus.Unknown, 50 | }, 51 | repositoryId, 52 | parseInt(pullRequestId), 53 | project 54 | ); 55 | } 56 | 57 | console.log(message); 58 | 59 | setResult(TaskResult.Succeeded, "Success"); 60 | } catch (err) { 61 | if (err instanceof Error) { 62 | setResult(TaskResult.Failed, err.message); 63 | return; 64 | } 65 | 66 | setResult(TaskResult.Failed, `Unknown error thrown: ${err}`); 67 | } 68 | } 69 | 70 | run(); 71 | -------------------------------------------------------------------------------- /vercel-azdo-pr-comment-task-source/task.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/Microsoft/azure-pipelines-task-lib/master/tasks.schema.json", 3 | "id": "3a06b896-099c-4d26-b61f-93b5e5189d7b", 4 | "name": "vercel-azdo-pr-comment-task", 5 | "friendlyName": "Vercel Azure DevOps Pull Request Comment Task", 6 | "description": "An Azure Pipelines Task Extension for commenting on pull requests that trigger Vercel builds", 7 | "helpUrl": "https://github.com/vercel/vercel-azure-devops-extension", 8 | "helpMarkDown": "Something not working? Get help here: https://vercel.com/help", 9 | "category": "Azure Pipelines", 10 | "author": "Vercel", 11 | "version": { 12 | "Major": 2, 13 | "Minor": 0, 14 | "Patch": 0 15 | }, 16 | "instanceNameFormat": "Commenting on Pull Request", 17 | "inputs": [ 18 | { 19 | "name": "azureToken", 20 | "type": "string", 21 | "label": "Azure Personal Access Token", 22 | "required": true, 23 | "helpMarkDown": "An Azure personal access token with the Git 'PullRequestContribute' permission for your Azure DevOps Organization (https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate)" 24 | }, 25 | { 26 | "name": "deploymentTaskMessage", 27 | "type": "string", 28 | "label": "Deployment Task Message (from Vercel Deployment Task)", 29 | "required": true, 30 | "helpMarkDown": "The message to be commented on the Pull Request. Generally is created by the Vercel Deployment Task." 31 | } 32 | ], 33 | "execution": { 34 | "Node16": { 35 | "target": "dist/index.js" 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /vercel-azdo-pr-comment-task-source/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2021" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "commonjs" /* Specify what module code is generated. */, 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 39 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 40 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 41 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 42 | // "resolveJsonModule": true, /* Enable importing .json files. */ 43 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 44 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 45 | 46 | /* JavaScript Support */ 47 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 48 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 49 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 50 | 51 | /* Emit */ 52 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 53 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 54 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 55 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 56 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 57 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 58 | "outDir": "./dist" /* Specify an output folder for all emitted files. */, 59 | // "removeComments": true, /* Disable emitting comments. */ 60 | // "noEmit": true, /* Disable emitting files from a compilation. */ 61 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 62 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 63 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 64 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 65 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 66 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 67 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 68 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 69 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 70 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 71 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 72 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 73 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 74 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 75 | 76 | /* Interop Constraints */ 77 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 78 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 79 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 80 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, 81 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 82 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 83 | 84 | /* Type Checking */ 85 | "strict": true /* Enable all strict type-checking options. */, 86 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 87 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 88 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 89 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 90 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 91 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 92 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 93 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 94 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 95 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 96 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 97 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 98 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 99 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 100 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 101 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 102 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 103 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 104 | 105 | /* Completeness */ 106 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 107 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 108 | }, 109 | "include": ["./src/**/*.ts"] 110 | } 111 | -------------------------------------------------------------------------------- /vercel-deployment-task-source/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | test-out 4 | .taskkey 5 | -------------------------------------------------------------------------------- /vercel-deployment-task-source/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "vercel-deployment-task", 4 | "scripts": { 5 | "build": "tsc --project ./tsconfig.json", 6 | "pretest": "tsc --project ./tsconfig.test.json", 7 | "test": "tap --no-coverage test-out/test/index.test.js" 8 | }, 9 | "license": "MIT", 10 | "engines": { 11 | "node": "^16.0.0" 12 | }, 13 | "dependencies": { 14 | "azure-devops-node-api": "12.0.0", 15 | "azure-pipelines-task-lib": "4.3.1", 16 | "undici": "5.22.1" 17 | }, 18 | "devDependencies": { 19 | "@types/node": "16.18.24", 20 | "@types/tap": "15.0.8", 21 | "tap": "16.3.4", 22 | "typescript": "5.0.4" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /vercel-deployment-task-source/src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | getInput, 3 | getDelimitedInput, 4 | getBoolInput, 5 | TaskResult, 6 | setResult, 7 | which, 8 | tool, 9 | setResourcePath, 10 | setVariable, 11 | getVariable, 12 | } from "azure-pipelines-task-lib"; 13 | import path from "path"; 14 | import { request } from "undici"; 15 | 16 | function errorHandler(error: unknown) { 17 | setResult(TaskResult.Failed, `Unknown error thrown: ${error}`); 18 | } 19 | 20 | process.on("unhandledRejection", errorHandler); 21 | process.on("unhandledException", errorHandler); 22 | 23 | function isTeamID(teamId: string) { 24 | return teamId.startsWith("team_"); 25 | } 26 | 27 | async function getStagingPrefix(teamId: string, token: string): Promise { 28 | const { statusCode, body } = await request(`https://api.vercel.com/v2/teams/${teamId}`, { 29 | headers: { 30 | Authorization: `Bearer ${token}`, 31 | }, 32 | method: "GET", 33 | }); 34 | 35 | const result = await body.json(); 36 | 37 | if (statusCode !== 200) { 38 | throw new Error( 39 | `Failed to get project owner information. Error: ${result.message}` 40 | ); 41 | } 42 | 43 | return result.stagingPrefix; 44 | } 45 | 46 | async function getProjectName( 47 | projectId: string, 48 | teamId: string, 49 | token: string 50 | ): Promise { 51 | const { statusCode, body } = await request(`https://api.vercel.com/v9/projects/${projectId}?teamId=${teamId}`, { 52 | headers: { 53 | Authorization: `Bearer ${token}`, 54 | }, 55 | method: "GET", 56 | }); 57 | 58 | const result = await body.json(); 59 | 60 | if (statusCode !== 200) { 61 | throw new Error( 62 | `Failed to get project information. Error: ${result.message}` 63 | ); 64 | } 65 | 66 | return result.name; 67 | } 68 | 69 | /** 70 | * To reconcile configuration inputs, get both the _input_ and the _environment variable_. 71 | * 72 | * If neither are defined, throw an error. 73 | * 74 | * If both are defined, log a warning that _input_ will be used. 75 | * 76 | * If _input_ is defined, and not _environment variable_, set the _environment variable_ to the _input_ value and return the _input_ value. 77 | * 78 | * If _environment variable_ is defined, and not _input_, return the _environment variable_ value. 79 | * 80 | * @param configurationInput 81 | * @returns 82 | */ 83 | function reconcileConfigurationInput( 84 | inputKey: string, 85 | envVarKey: string, 86 | name: string, 87 | defaultValue?: string 88 | ): string { 89 | const inputValue = getInput(inputKey); 90 | const envVarValue = getVariable(envVarKey); 91 | 92 | if (inputValue && envVarValue) { 93 | console.warn( 94 | `${name} specified by both \`${inputKey}\` input and \`${envVarKey}\` environment variable. Input field \`${inputKey}\` will be used.` 95 | ); 96 | } 97 | 98 | if (inputValue) { 99 | setVariable(envVarKey, inputValue); 100 | return inputValue; 101 | } 102 | 103 | if (envVarValue) { 104 | return envVarValue; 105 | } 106 | 107 | if (defaultValue) { 108 | setVariable(envVarKey, defaultValue); 109 | return defaultValue; 110 | } 111 | 112 | throw new Error( 113 | `${name} must be specified using input \`${inputKey}\` or environment variable \`${envVarKey}\`` 114 | ); 115 | } 116 | 117 | async function run() { 118 | try { 119 | setResourcePath(path.join(__dirname, "..", "task.json")); 120 | 121 | const target = getInput("target"); 122 | 123 | const debug = getBoolInput("debug"); 124 | 125 | const archive = getBoolInput("archive"); 126 | 127 | const envs = getDelimitedInput("env", "\n", false); 128 | const buildEnvs = getDelimitedInput("buildEnv", "\n", false); 129 | 130 | const logs = getBoolInput("logs"); 131 | 132 | const vercelProjectId = reconcileConfigurationInput( 133 | "vercelProjectId", 134 | "VERCEL_PROJECT_ID", 135 | "Vercel Project Id" 136 | ); 137 | 138 | let vercelTeamId = reconcileConfigurationInput( 139 | "vercelTeamId", 140 | "VERCEL_TEAM_ID", 141 | "Vercel Team Id" 142 | ); 143 | 144 | if (!vercelTeamId) { 145 | console.warn('Please set \'vercelTeamId\'. \'vercelOrgId\' is deprecated.'); 146 | 147 | vercelTeamId = reconcileConfigurationInput( 148 | "vercelOrgId", 149 | "VERCEL_ORG_ID", 150 | "Vercel Org Id" 151 | ); 152 | } 153 | 154 | const vercelToken = reconcileConfigurationInput( 155 | "vercelToken", 156 | "VERCEL_TOKEN", 157 | "Vercel Token" 158 | ); 159 | 160 | const vercelCurrentWorkingDirectory = reconcileConfigurationInput( 161 | "vercelCWD", 162 | "VERCEL_CWD", 163 | "Vercel Current Working Directory", 164 | getVariable("System.DefaultWorkingDirectory") 165 | ); 166 | 167 | const deployToProduction = getBoolInput("production"); 168 | 169 | const VERCEL_CLI_VERSION = 170 | getVariable("VERCEL_CLI_VERSION") ?? "vercel@latest"; 171 | 172 | if (!isTeamID(vercelTeamId) && !deployToProduction) { 173 | throw new Error('Usage of a Personal Vercel ID is deprecated as it breaks Preview Deployments. Exchange your Personal Vercel ID with the Team ID your Project is associated with. The Team ID starts with \'team_\''); 174 | } 175 | 176 | if (!isTeamID(vercelTeamId)) { 177 | console.warn('Usage of a Personal Vercel ID is deprecated. Consider switching to using your Team ID (starts with \'team_\') instead.') 178 | } 179 | 180 | const npm = tool(which("npm", true)); 181 | const npmInstall = npm.arg(["install", "-g", VERCEL_CLI_VERSION]); 182 | let { stdout, stderr, code } = npmInstall.execSync(); 183 | 184 | if (code !== 0) { 185 | throw new Error( 186 | `npm install failed with exit code ${code}. Error: ${stderr}` 187 | ); 188 | } 189 | 190 | let vercel = tool(which("vercel", true)); 191 | const vercelPullArgs = [ 192 | "pull", 193 | "--yes", 194 | `--environment=${deployToProduction ? "production" : "preview"}`, 195 | `--token=${vercelToken}`, 196 | ]; 197 | if (debug) { 198 | vercelPullArgs.push("--debug"); 199 | } 200 | const vercelPull = vercel.arg(vercelPullArgs); 201 | ({ stdout, stderr, code } = vercelPull.execSync()); 202 | 203 | vercel = tool(which("vercel", true)); 204 | const vercelDeployArgs = deployToProduction 205 | ? ["deploy", "--prod", `--token=${vercelToken}`] 206 | : ["deploy", `--token=${vercelToken}`]; 207 | if (vercelCurrentWorkingDirectory) { 208 | vercelDeployArgs.push(`--cwd=${vercelCurrentWorkingDirectory}`); 209 | } 210 | if (target) { 211 | vercelDeployArgs.push(`--target=${target}`); 212 | } 213 | if (debug) { 214 | vercelDeployArgs.push("--debug"); 215 | } 216 | if (logs) { 217 | vercelDeployArgs.push("--logs"); 218 | } 219 | if (archive) { 220 | vercelDeployArgs.push("--archive=tgz"); 221 | } 222 | 223 | envs.forEach((env) => { 224 | vercelDeployArgs.push("--env", env); 225 | }); 226 | buildEnvs.forEach((buildEnv) => { 227 | vercelDeployArgs.push("--build-env", buildEnv); 228 | }); 229 | 230 | const vercelDeploy = vercel.arg(vercelDeployArgs); 231 | ({ stdout, stderr, code } = vercelDeploy.execSync()); 232 | 233 | if (code !== 0) { 234 | throw new Error( 235 | `vercel deploy failed with exit code ${code}. Error: ${stderr}` 236 | ); 237 | } 238 | 239 | const originalDeployURL = stdout; 240 | let deployURL = stdout; 241 | 242 | if (!deployToProduction) { 243 | // Get branch name 244 | // If triggered by a PR use `System.PullRequest.SourceBranch` (and replace the `refs/heads/`) 245 | // If not triggered by a PR use `Build.SourceBranchName` 246 | let branchName: string | undefined; 247 | const buildReason = getVariable("Build.Reason"); 248 | if (buildReason && buildReason === "PullRequest") { 249 | branchName = getVariable("System.PullRequest.SourceBranch"); 250 | if (branchName) { 251 | branchName = branchName.replace("refs/heads/", ""); 252 | } 253 | } else { 254 | branchName = getVariable("Build.SourceBranchName"); 255 | } 256 | 257 | if (branchName) { 258 | const [projectName, stagingPrefix] = await Promise.all([ 259 | getProjectName(vercelProjectId, vercelTeamId, vercelToken), 260 | getStagingPrefix(vercelTeamId, vercelToken), 261 | ]); 262 | const escapedBranchName = branchName.replace(/[^a-zA-Z0-9\-]-?/g, "-"); 263 | const escapedProjectName = projectName.replace( 264 | /[^a-zA-Z0-9\-]-?/g, 265 | "-" 266 | ); 267 | /** 268 | * Truncating branch name according to RFC 1035 if necessary 269 | * Maximum length is 63 characters. 270 | * 271 | * Read more: https://vercel.com/guides/why-is-my-vercel-deployment-url-being-shortened 272 | * 273 | * projectName has a fixedLength `x` 274 | * stagingPrefix has a fixedLenght `y` 275 | * .vercel.app has a fixedLength `11` 276 | * two dashes 277 | * 278 | * escapedBranchName can have a maximum length of 63-11-2-y-x 279 | * 280 | * This can cause confusion if you have all branches following a scheme, e.g. 281 | * feature/PREFIX-12345-my-feature-branch-name 282 | * feature/PREFIX-12346-my-second-feature-branch-name 283 | * 284 | * which can produce identical branchNames in the alias: 285 | * longer-project-name-feature-prefix-12-staging-prefix.vercel.app 286 | * longer-project-name-feature-prefix-12-staging-prefix.vercel.app 287 | * 288 | * Therefore, if the alias would exceed 63 characters, we remove the 289 | * stagingPrefix to have the longest branchName substring possible: 290 | * longer-project-name-feature-prefix-12345-my-feature.vercel.app 291 | * longer-project-name-feature-prefix-12346-my-second-f.vercel.app 292 | */ 293 | const branchNameAllowedLength = 294 | 50 - escapedProjectName.length - stagingPrefix.length; 295 | let aliasHostname = `${escapedProjectName}-${escapedBranchName}-${stagingPrefix}.vercel.app`; 296 | 297 | if (escapedBranchName.length > branchNameAllowedLength) { 298 | // Calculate the maximum length of the branchName by removing the stagingPrefix and the dash 299 | const branchNameExtendedLength = 300 | branchNameAllowedLength + stagingPrefix.length + 1; 301 | 302 | let aliasingBranchName = escapedBranchName.substring( 303 | 0, 304 | branchNameExtendedLength 305 | ); 306 | 307 | // If, after truncation, the last character is a dash, remove it 308 | if (aliasingBranchName.endsWith("-")) { 309 | aliasingBranchName = aliasingBranchName.substring( 310 | 0, 311 | aliasingBranchName.length - 1 312 | ); 313 | } 314 | 315 | // Remove the stagingPrefix from the aliasHostname and use the extended aliasingBranchName 316 | aliasHostname = `${escapedProjectName}-${aliasingBranchName}.vercel.app`; 317 | } 318 | 319 | deployURL = `https://${aliasHostname}`; 320 | vercel = tool(which("vercel", true)); 321 | const vercelAliasArgs = [ 322 | "alias", 323 | stdout, 324 | aliasHostname, 325 | `--token=${vercelToken}`, 326 | `--scope=${vercelTeamId}`, 327 | ]; 328 | if (debug) { 329 | vercelAliasArgs.push("--debug"); 330 | } 331 | const vercelAlias = vercel.arg(vercelAliasArgs); 332 | ({ stdout, stderr, code } = vercelAlias.execSync()); 333 | if (code !== 0) { 334 | throw new Error( 335 | `vercel alias failed with exit code ${code}. Error: ${stderr}` 336 | ); 337 | } 338 | } else { 339 | console.error( 340 | `Could not determine branch name for staging alias URL. Skipping alias operation.` 341 | ); 342 | } 343 | } 344 | 345 | setVariable("originalDeploymentURL", originalDeployURL, false, true); 346 | setVariable("deploymentURL", deployURL, false, true); 347 | const message = `Successfully deployed to ${deployURL}`; 348 | setVariable("deploymentTaskMessage", message, false, true); 349 | console.log(message); 350 | 351 | setResult(TaskResult.Succeeded, "Success"); 352 | } catch (err) { 353 | if (err instanceof Error) { 354 | setResult(TaskResult.Failed, err.message); 355 | return; 356 | } 357 | 358 | setResult(TaskResult.Failed, `Unknown error thrown: ${err}`); 359 | } 360 | } 361 | 362 | run(); 363 | -------------------------------------------------------------------------------- /vercel-deployment-task-source/task.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/Microsoft/azure-pipelines-task-lib/master/tasks.schema.json", 3 | "id": "7452306c-c0c7-4e93-8691-a364394d1229", 4 | "name": "vercel-deployment-task", 5 | "friendlyName": "Vercel Deployment Task", 6 | "description": "An Azure Pipelines Task Extension for automatically deploying to Vercel", 7 | "helpUrl": "https://github.com/vercel/vercel-azure-devops-extension", 8 | "helpMarkDown": "Something not working? Get help here: https://vercel.com/help", 9 | "category": "Azure Pipelines", 10 | "author": "Vercel", 11 | "version": { 12 | "Major": 2, 13 | "Minor": 0, 14 | "Patch": 0 15 | }, 16 | "instanceNameFormat": "Deploying $(vercelProject) to Vercel", 17 | "inputs": [ 18 | { 19 | "name": "vercelProjectId", 20 | "type": "string", 21 | "label": "Vercel Project ID", 22 | "required": false, 23 | "helpMarkDown": "The ID of your Vercel Project. Can also be set as the environment variable `VERCEL_PROJECT_ID`." 24 | }, 25 | { 26 | "name": "vercelTeamId", 27 | "type": "string", 28 | "label": "Vercel Team ID", 29 | "required": false, 30 | "helpMarkDown": "The ID of the Vercel Team your Vercel Project is associated with. Starts with `team_`. Can also be set as the environment variable `VERCEL_TEAM_ID`." 31 | }, 32 | { 33 | "name": "vercelToken", 34 | "type": "string", 35 | "label": "Vercel Personal Access Token", 36 | "required": false, 37 | "helpMarkDown": "A Vercel personal access token with deploy permissions for your Vercel Project (https://vercel.com/guides/how-do-i-use-a-vercel-api-access-token). Can also be set as the environment variable `VERCEL_TOKEN`." 38 | }, 39 | { 40 | "name": "vercelCWD", 41 | "type": "string", 42 | "label": "Vercel Current Working Directory", 43 | "required": false, 44 | "helpMarkDown": "The working directory the Vercel operations are executed from. Defaults to `System.DefaultWorkingDirectory`." 45 | }, 46 | { 47 | "name": "production", 48 | "type": "boolean", 49 | "label": "Deploy to Production", 50 | "required": false, 51 | "helpMarkDown": "Should the task deploy to production? Defaults to false" 52 | }, 53 | { 54 | "name": "target", 55 | "type": "string", 56 | "label": "Environment to deploy to", 57 | "required": false, 58 | "helpMarkDown": "Option to define the environment you want to deploy to. This could be production, preview, or a custom environment. For more information, see [Using an environment through the Vercel CLI](https://vercel.com/docs/deployments/custom-environments#using-an-environment-through-the-vercel-cli)." 59 | }, 60 | { 61 | "name": "debug", 62 | "type": "boolean", 63 | "label": "Enable debug output", 64 | "required": false, 65 | "helpMarkDown": "Enable `--debug` output for the internal Vercel CLI operations." 66 | }, 67 | { 68 | "name": "archive", 69 | "type": "boolean", 70 | "label": "Enable compression of the deployment code into a single file before uploading it", 71 | "required": false, 72 | "helpMarkDown": "Enable `--archive=tgz` flag for the internal Vercel CLI operations." 73 | }, 74 | { 75 | "name": "env", 76 | "type": "multiLine", 77 | "properties": { 78 | "resizable": true, 79 | "rows": "2" 80 | }, 81 | "label": "Env vars", 82 | "required": false, 83 | "helpMarkDown": "Additional environment variables to be provided at runtime. One line per env (e.g. KEY1=value1)." 84 | }, 85 | { 86 | "name": "buildEnv", 87 | "type": "multiLine", 88 | "properties": { 89 | "resizable": true, 90 | "rows": "2" 91 | }, 92 | "label": "Build env vars", 93 | "required": false, 94 | "helpMarkDown": "Additional environment variables to be provided during build. One line per env (e.g. KEY1=value1)." 95 | }, 96 | { 97 | "name": "logs", 98 | "type": "boolean", 99 | "label": "Enable build log output in the pipeline", 100 | "required": false, 101 | "helpMarkDown": "Enable `--logs` flag for the internal Vercel CLI operations." 102 | } 103 | ], 104 | "outputVariables": [ 105 | { 106 | "name": "deploymentURL", 107 | "description": "The URL of the deployment." 108 | }, 109 | { 110 | "name": "originalDeploymentURL", 111 | "description": "Original URL of the deployment. Can be used to create your own alias in a separate task." 112 | }, 113 | { 114 | "name": "deploymentTaskMessage", 115 | "description": "The message output from the deployment. Can be passed to Vercel Azure DevOps Pull Request Comment Task." 116 | } 117 | ], 118 | "execution": { 119 | "Node16": { 120 | "target": "dist/index.js" 121 | } 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /vercel-deployment-task-source/test/index.test.ts: -------------------------------------------------------------------------------- 1 | import tap from "tap"; 2 | import { MockTestRunner } from "azure-pipelines-task-lib/mock-test"; 3 | 4 | // Testing is incomplete due to a lack of documentation and examples from 5 | // azure-pipelines-task-lib/mock-* libraries. 6 | 7 | tap.test("ok", { skip: true }, (t) => { 8 | t.plan(1); 9 | const testRunner = new MockTestRunner(require.resolve("./success")); 10 | testRunner.run(); 11 | t.equal(testRunner.succeeded, true); 12 | }); 13 | -------------------------------------------------------------------------------- /vercel-deployment-task-source/test/success.ts: -------------------------------------------------------------------------------- 1 | import { TaskMockRunner } from "azure-pipelines-task-lib/mock-run"; 2 | 3 | const taskMockRunner = new TaskMockRunner(require.resolve("../src/index")); 4 | taskMockRunner.setInput("vercelProject", ""); 5 | taskMockRunner.setInput("vercelToken", ""); 6 | taskMockRunner.setInput("production", "false"); 7 | taskMockRunner.setInput("azureToken", ""); 8 | taskMockRunner.run(); 9 | -------------------------------------------------------------------------------- /vercel-deployment-task-source/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2021" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "commonjs" /* Specify what module code is generated. */, 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 39 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 40 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 41 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 42 | // "resolveJsonModule": true, /* Enable importing .json files. */ 43 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 44 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 45 | 46 | /* JavaScript Support */ 47 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 48 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 49 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 50 | 51 | /* Emit */ 52 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 53 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 54 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 55 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 56 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 57 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 58 | "outDir": "./dist" /* Specify an output folder for all emitted files. */, 59 | // "removeComments": true, /* Disable emitting comments. */ 60 | // "noEmit": true, /* Disable emitting files from a compilation. */ 61 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 62 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 63 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 64 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 65 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 66 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 67 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 68 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 69 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 70 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 71 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 72 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 73 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 74 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 75 | 76 | /* Interop Constraints */ 77 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 78 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 79 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 80 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, 81 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 82 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 83 | 84 | /* Type Checking */ 85 | "strict": true /* Enable all strict type-checking options. */, 86 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 87 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 88 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 89 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 90 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 91 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 92 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 93 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 94 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 95 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 96 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 97 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 98 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 99 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 100 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 101 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 102 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 103 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 104 | 105 | /* Completeness */ 106 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 107 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 108 | }, 109 | "include": ["./src/**/*.ts"] 110 | } 111 | -------------------------------------------------------------------------------- /vercel-deployment-task-source/tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "test-out" 5 | }, 6 | "include": ["./**/*.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /vss-extension.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json.schemastore.org/vss-extension", 3 | "manifestVersion": 1, 4 | "id": "vercel-deployment-extension", 5 | "name": "Vercel Deployment Extension", 6 | "version": "2.0.0", 7 | "publisher": "Vercel", 8 | "public": true, 9 | "targets": [ 10 | { 11 | "id": "Microsoft.VisualStudio.Services" 12 | } 13 | ], 14 | "description": "An Azure Pipelines Task Extension for automatically deploying to Vercel", 15 | "categories": [ 16 | "Azure Pipelines" 17 | ], 18 | "content": { 19 | "details": { 20 | "path": "README.md" 21 | } 22 | }, 23 | "files": [ 24 | { 25 | "path": "vercel-deployment-task" 26 | }, 27 | { 28 | "path": "vercel-azdo-pr-comment-task" 29 | }, 30 | { 31 | "path": "images", 32 | "addressable": true 33 | } 34 | ], 35 | "repository": { 36 | "type": "git", 37 | "uri": "https://github.com/vercel/vercel-azure-devops-extension" 38 | }, 39 | "icons": { 40 | "default": "./icons/logo.png" 41 | }, 42 | "tags": [ 43 | "Azure DevOps Extensions", 44 | "Vercel", 45 | "Deployment", 46 | "Next.js", 47 | "Frontend Cloud" 48 | ], 49 | "contributions": [ 50 | { 51 | "id": "vercel-deployment-task", 52 | "type": "ms.vss-distributed-task.task", 53 | "targets": [ 54 | "ms.vss-distributed-task.tasks" 55 | ], 56 | "properties": { 57 | "name": "vercel-deployment-task" 58 | } 59 | }, 60 | { 61 | "id": "vercel-azdo-pr-comment-task", 62 | "type": "ms.vss-distributed-task.task", 63 | "targets": [ 64 | "ms.vss-distributed-task.tasks" 65 | ], 66 | "properties": { 67 | "name": "vercel-azdo-pr-comment-task" 68 | } 69 | } 70 | ] 71 | } 72 | --------------------------------------------------------------------------------